Как правильно работать с рекурсивными зависимостями в 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 (ну это вряд ли причина проблемы)
van_Kalsing: для модульных тестов apk не собирается. Только транслируются классы.
Кроме того, для OuterLib могут быть выключены транзитивные зависимости, при этом Lib в App видна не будет.