@van_Kalsing

Как правильно работать с рекурсивными зависимостями в Android библиотеках?

Контекст. Имеется 3 проекта: App (Android приложение), Lib, OuterLib (Android библиотеки). Схема зависимостей такая: Lib <- OuterLib <- App. Lib содержит класс Cls; OuterLib содержит функцию fn, которая использует Cls; App использует fn (но не использует напрямую ничего из Lib).

Проблема. Код из App не может быть выполнен: выкидывается исключение java.lang.NoClassDefFoundError. Т.е. результирующий apk не содержит класса Cls. Проверял только в тестах, без запуска на эмуляторе/устройстве. Отстутсвие нужного класса видно при декомпиляции.

Вопрос. Что нужно сделать, чтобы пролемы не возникало? При этом схема зависимостей и расположение компонентов должны остаться неизменными. Библиотеки должны остаться Android библиотеками (т.е. собираться в .aar файлы, не в .jar). В App не должно быть (явной) зависимости на Lib.

Пробовал играть с полем scope при настройке зависимостей: ставил как Implementation, так и API в OuterLib и App (т.е. 4 варианта перебрал). Зависимости задавались через файлы (т.е. указывал конкретные .aar файлы без репозитория). Использовал Android Studio 3.0 Canary 4, код написан на Kotlin (ну это вряд ли причина проблемы)
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
thelongrunsmoke
@thelongrunsmoke
Программист
Проверял только в тестах, без запуска на эмуляторе/устройстве.

Большинство классов андроид API в модульные тесты не включается, ведь они выполняются локальной JVM. Библиотеки aar тоже, обычно, недоступны.

Пиши инструментальные тесты, гоняй их на эмуляторе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы