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