Как исправить 'java.lang.NoClassDefFoundError' в проекте Android .aar - PullRequest
0 голосов
/ 11 июля 2019

У меня есть библиотека Android 1001 *, и я пытаюсь интегрировать ее с одним из проектов.Когда приложение пытается открыть начальный экран библиотеки .aar, где у меня есть вызов API с использованием модернизации.Я получаю следующее исключение

java.lang.NoClassDefFoundError: Не удалось разрешить из: Lokhttp3 / OkHttpClient $ Builder;

Я не запутал или не включил pro-guard вмой .aar проект.

Ниже приведены мои .aar зависимости Gradle

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:converter-gson:2.2.0'

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

1 Ответ

0 голосов
/ 11 июля 2019

Давайте предположим, что вы создали свой .aar и опубликовали его в хранилище maven (artifactory, nexus, что у вас есть) - например, "реализация" com.mycompany: library: 1.0@aar '". Любые дочерние зависимости должны быть включены в pom.xml, предоставляемый сервером, чтобы они были доступны в вашем приложении.

Поскольку вы использовали ключевое слово "реализация", эти зависимости считаются частными для .aar и не будут перечислены в pom.xml. Таким образом, они не будут доступны в вашем aar и не будут автоматически импортированы в проект gradle.

Если вы измените ключевое слово api на «api» вместо реализации, эти зависимости станут общедоступными и должны быть перечислены в сгенерированном pom.xml, и, следовательно, должны автоматически импортироваться в проект.

На самом деле это также верно и для внутренних модулей aar, а не для ссылки на них через внешние системы (например, проект внедрения (': mylibrary')). Если вам нужны зависимости mylibrary для запуска проекта, они должны быть api.

Для справки, вы можете взглянуть на документацию Конфигурации зависимостей Android Studio .

Если, однако, вы вручную включаете arr через оператор файлов (например, файлы реализации ('libs / my.aar')), то вы не получаете автоматического управления зависимостями и собираетесь Необходимо добавить библиотеки, необходимые вашему aar, в основной проект вручную, а также скопировать и вставить их в файлы build.gradle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...