Я добавил * .aar в свой проект, когда я запускаю его, проект работает хорошо, но при запуске деятельности появляется ошибка, как ее решить? - PullRequest
0 голосов
/ 02 июня 2019

aar отлично работал как проект, затем я преобразовал его в библиотечный модуль и добавил в простой проект, чтобы проверить, работает ли он правильно

ошибка:

"java.lang.NoClassDefFoundError: Не удалось разрешить: Lcom / google / gson / Gson;"

Я уже добавил Gson в aar. Но это выдает мне эту ошибку при запуске действия (котороенаходится внутри аара)

The error

как решить?

Ответы [ 4 ]

1 голос
/ 02 июня 2019

Используйте эту зависимость вместо * .aar файла.

реализация 'com.google.code.gson: gson: 2.8.5'

0 голосов
/ 02 июня 2019

решение состоит в том, чтобы добавить "реализацию" com.google.code.gson: gson: 2.8.5 '"к тестовому проекту, это решило мою проблему, но мне все равно это не нравится;)

0 голосов
/ 02 июня 2019

Tl; dr: Вероятно, произошло то, что вы включили Gson как compileOnly зависимость.Исправьте это, используя implementation.

Существует несколько методов, которые ваш модуль может объявлять зависимости от другого библиотечного модуля.

implementation

Gradle добавляетзависимость от пути к классам компиляции и упаковывает зависимость к выводу сборки.Однако, когда ваш модуль настраивает зависимость implementation, он сообщает Gradle, что вы не хотите, чтобы модуль пропускал зависимость другим модулям во время компиляции.То есть зависимость доступна для других модулей только во время выполнения.

Это означает, что вы можете ссылаться на код из библиотеки, и библиотека упакована в ваш apk. Он не упакован внутри библиотеки.Он хранится в метаданных как транзитивная зависимость.

Если у вас был модуль приложения App и модуль библиотеки Lib, который зависел от Gson через implementation, тогда Lib мог видеть Gson, но приложение не могло.Gson будет скрытой реализацией модуля Lib.

api

Gradle добавляет зависимость к пути к классам компиляции и выводу сборки.Когда модуль включает api зависимость, он сообщает Gradle, что модуль хочет транзитивно экспортировать эту зависимость в другие модули, чтобы он был доступен им как во время выполнения, так и во время компиляции.

То жетак как implementation за исключением того, что Gson будет представлен как API Lib, так что вы можете использовать его из App.

compileOnly

Gradle добавляет зависимость только к пути к классам компиляции (чтоесть, он не добавляется в вывод сборки).Это полезно, когда вы создаете модуль Android и вам нужна зависимость во время компиляции, но необязательно, чтобы она присутствовала во время выполнения.

Это означает, что вы можете ссылаться на код из библиотеки но библиотека NOT упакована в ваш apk .

Примером может служить Android SDK.Вы компилируете с использованием API 28 SDK, вы используете API, но вы не упаковываете SDK в свой apk.Среда выполнения Android уже установлена ​​в телефоне или эмуляторе.

Подробнее: https://developer.android.com/studio/build/dependencies

0 голосов
/ 02 июня 2019

Вы также должны добавить все зависимости вашей библиотеки (aar) в build.gradle вашего приложения. Библиотеки не включают свои зависимости.

...