Включение плагина Android Gradle Aspectj с подключенными тестами - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь использовать AspectJ в своем приложении для Android для сбора статистики производительности. Я использую плагин 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. В этом случае связанные тесты выполняются, но ни один из аспектов не вызывается. Я хотел бы, чтобы аспекты были вызваны для связанных тестов, так как таким образом я могу отслеживать статистику. Я пробовал и другие плагины 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 - это проблема, которую я создал для плагина. Поскольку уже несколько дней я борюсь с этим, я хотел бы расширить охват. Не могли бы вы помочь мне найти решение?

...