ClassNotFoundException: не найден класс "androidx.work.Worker" по пути: DexPathList - PullRequest
0 голосов
/ 29 мая 2019

Я пытался создать библиотеку Android, когда использую Периодический запрос WorkManager. Он работает безупречно как модуль в приложении для разработки хоста. Однако, как только я экспортирую его как файл aar и использую в другом приложении, я получаю следующую ошибку:

java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/work/Worker;
.
.
.
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.work.Worker" on path: DexPathList[[zip file "/data/app/com.example.testapp-0WusKIYjC1qsHRMASLjm1Q==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.testapp-0WusKIYjC1qsHRMASLjm1Q==/lib/arm64, /system/lib64, /vendor/lib64]]

Есть идеи, как мне это исправить?

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

AAR сам по себе не встраивает или иным образом кодирует что-либо о транзитивных зависимостях (таких как зависимость вашего AAR от WorkManager), поэтому ожидается, что если вы просто используете AAR в качестве локальная бинарная зависимость , что вам нужно будет повторно объявить все переходные зависимости.

В соответствии с документацией Gradle Decalaring Dependencies правильная зависимость имеет форму репозитория maven (локального или удаленного). Репозиторий maven, помимо размещения самого AAR, также включает POM-файл , который объявляет транзитивные зависимости, от которых зависит ваша библиотека. Это гарантирует, что в вашу сборку включена только одна версия каждой библиотеки (поскольку она может дедуплицировать транзитивные зависимости между несколькими библиотеками).

Вы не видите этой же проблемы при локальном использовании проекта, поскольку эти переходные зависимости включены как часть процесса сборки.

0 голосов
/ 29 мая 2019

у вас есть ошибка зависимости, приложение, которое вы пытаетесь использовать в своей библиотеке, использует библиотеку поддержки Androidx , попробуйте изменить WorkManager's зависимость на androidx зависимость

...