Невозможно сослаться на активность библиотечного модуля в приложении

Я использую Android Studio 2.3.3 с Android Плагин для Gradle 2.3.3.

См. Мой пример проекта, https://github.com/Uni-/AndroidModuleTest. В этом проекте есть два образца модуля (как названия Android Studio), приложение и библиотека.

библиотека имеет com.example.test.myapplication.MainActivity класс, и на него есть ссылка в AndroidManifest.xml в приложении. Приложение скомпилировано хорошо, но вылетает при запуске:

10-31 22:20:55.031 30084-30084/? I/zygote64: Late-enabling -Xcheck:jni
10-31 22:20:55.312 30084-30084/? I/InstantRun: starting instant run server: is main process
10-31 22:20:55.325 30084-30084/? D/AndroidRuntime: Shutting down VM
10-31 22:20:55.327 30084-30084/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: com.example.test.myapplication, PID: 30084
                                                   java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test.myapplication/com.example.test.myapplication.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.test.myapplication.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/base.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_sliceMainActivityapk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slicebuild.gradleapk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice
debugCompile project(path: ':library', configuration: 'debugCompile')
releaseCompile project(path: ':library', configuration: 'releaseCompile')
apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice
compile project(':library')
apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slicecompileapk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_sliceimplementationapk.apk"],nativeLibraryDirectories=[/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/lib/arm64, /system/lib64, /vendor/lib64]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2718) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.test.myapplication.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/base.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_sliceMainActivityapk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slicebuild.gradleapk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice
debugCompile project(path: ':library', configuration: 'debugCompile')
releaseCompile project(path: ':library', configuration: 'releaseCompile')
apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slice
compile project(':library')
apk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_slicecompileapk.apk", zip file "/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/split_lib_sliceimplementationapk.apk"],nativeLibraryDirectories=[/data/app/com.example.test.myapplication-dsBQ8b1LFh9WtKzvdfrLYg==/lib/arm64, /system/lib64, /vendor/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) 10-31 22:20:55.328 30084-30084/? E/AndroidRuntime: at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.Instrumentation.newActivity(Instrumentation.java:1173) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2708) ... 9 more 10-31 22:21:00.439 30084-30093/com.example.test.myapplication I/zygote64: Waiting for a blocking GC ObjectsAllocated 10-31 22:21:00.537 30084-30093/com.example.test.myapplication I/zygote64: WaitForGcToComplete blocked for 97.913ms for cause ObjectsAllocated

Согласно журналу, класс MainActivity не существует в артефакте приложения.

Фактически, build.gradle из приложения содержит следующие строки:

debugCompile project(path: ':library', configuration: 'debugCompile')
releaseCompile project(path: ':library', configuration: 'releaseCompile')

Когда я заменяю эти строки строкой ниже, ошибка исправляется:

compile project(':library')

Однако я не этого хочу. В моем реальном проекте у меня есть различные варианты продуктов и пользовательские типы сборки, поэтому просто compile или даже _ 9_ в 3.0, не может быть решением.

Что я сделал не так в моем образце проекта?


person Uni-    schedule 31.10.2017    source источник
comment
В моем реальном проекте есть различные варианты продуктов и пользовательские типы сборки, поэтому простая компиляция или даже реализация в версии 3.0 не могут быть решением. Только некоторые типы сборки используют этот класс? Какой тип сборки вы используете, при котором возникает ошибка?   -  person Code-Apprentice    schedule 31.10.2017
comment
Действительно, у вас нет папки java в вашем репо (она должна быть в src / main / java). Где твоя деятельность?   -  person Jibbo    schedule 31.10.2017
comment
@Jibbo См. / Library / src / main / java / com / example / test / myapplication /.   -  person Uni-    schedule 31.10.2017
comment
@ Code-Apprentice Эту ошибку вызывают все типы сборки; в этом примере проекта и отладка, и выпуск.   -  person Uni-    schedule 31.10.2017
comment
Спасибо, что ответили на один из моих вопросов. Пожалуйста, ответьте и на другой.   -  person Code-Apprentice    schedule 31.10.2017
comment
Вы уже пытались переместить объявление активности в манифест библиотеки вместо приложения? поскольку он находится в этом модуле, он должен быть объявлен в этом манифесте   -  person Jibbo    schedule 31.10.2017
comment
Действия @Jibbo, используемые в приложении, должны быть объявлены в манифесте приложения, а не в манифесте библиотеки. См. ‹stackoverflow.com/questions/6157616/ ›. Когда я объявляю активность только в манифесте библиотеки, запуск завершается неудачно, потому что нет активности по умолчанию. Если я объявляю активность в обоих файлах манифеста, возникает такая же ошибка. Предложите решение после того, как попробуете.   -  person Uni-    schedule 31.10.2017
comment
@ Code-Apprentice все типы сборки приложения используют класс библиотеки MainActivity, в этом примере. Но настоящего проекта нет.   -  person Uni-    schedule 31.10.2017
comment
@ Uni- Вы должны изменить свой примерный проект, чтобы отразить это. Сегодня утром у меня нет времени разбираться в этом подробнее. Я посмотрю, что я могу сделать сегодня вечером или завтра.   -  person Code-Apprentice    schedule 31.10.2017
comment
@ Code-Apprentice Просмотрите проблему в примере проекта. У демонстрационного проекта тоже есть проблема, и он точно такой же, как и в реальном проекте.   -  person Uni-    schedule 31.10.2017


Ответы (2)


Я исправил это сам.

Ключевым моментом является установка publishNonDefault true в build.gradle библиотеки.

Кроме того, контекстные зависимости должны быть объявлены как:

debugCompile project(path: ':library', configuration: 'debug')
releaseCompile project(path: ':library', configuration: 'release')

Исправлено в 151f6e4. Спасибо.

person Uni-    schedule 01.11.2017

добавление в проект реализации модуля gradle (': yourLib') в моем случае решило проблему

person Nurseyit Tursunkulov    schedule 19.11.2019