我正在尝试在我的Android应用程序中使用AspectJ来收集性能统计信息。我使用的是Android gradle插件com.archinamon.aspectj
。运行主应用程序时,它可以正常工作。但是,在运行连接的测试时,测试运行程序无法找到任何测试类。
java.lang.ClassNotFoundException: com.ashj.aspectjdemo.MainActivityTest
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:453)
at androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:72)
at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:104)
at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:793)
at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:547)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:390)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2075)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.ashj.aspectjdemo.MainActivityTest" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/android.test.mock.jar", zip file "/data/app/com.ashj.aspectjdemo.test-wwzgCTSCs-xIiXgmJUHk0w==/base.apk", zip file "/data/app/com.ashj.aspectjdemo-CMfzKuP0HI8ORsx86_fZyw==/base.apk"],nativeLibraryDirectories=[/data/app/com.ashj.aspectjdemo.test-wwzgCTSCs-xIiXgmJUHk0w==/lib/x86, /data/app/com.ashj.aspectjdemo-CMfzKuP0HI8ORsx86_fZyw==/lib/x86, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 8 more
如果启用了插件com.google.firebase.firebase-perf
,则不会找到主要活动本身,并且应用程序无法启动。
我尝试使用com.archinamon.aspectj-junit
代替com.archinamon.aspectj
。在这种情况下,可以运行连接的测试,但是不会调用任何方面。我也希望将这些方面称为关联测试,因为这就是我跟踪统计信息的方式。
我也尝试了其他方面的插件。但是他们都没有积极发展,对我没有用。
为了演示该问题,我创建了项目https://github.com/ashj11/android-aspectj-demo。看起来是否启用了任何其他使用编织的插件,都会干扰AspectJ编织。
> Task :app:transformClassesWithAspectjForDebugAndroidTest
---------- Starting augmentation with AspectJ transformer ----------
Ajc classpath doesn't has needed runtime environment
---------- Exit AspectJ transformer w/o processing ----------
:app:transformClassesWithAspectjForDebugAndroidTest spend 38ms
:app:transformClassesWithAspectjForDebugAndroidTest spend 38ms
https://github.com/Archinamon/android-gradle-aspectj/issues/93是我为插件创建的问题。由于已经有好几天我一直在为此而苦苦挣扎,所以我想扩大范围。您能帮我找到解决方法吗?