Транзитивные зависимости для локальной aar-библиотеки
Мы создаем некоторую библиотеку, в основном для нашего API, что облегчит жизнь нашим внешним разработчикам.
Итак, мы создали новый проект библиотеки и добавили Retrofit и некоторые другие библиотеки в качестве зависимостей.
dependencies {
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
}
Теперь, когда мы его создаем, он создает файл aar
.
Но теперь, когда мы помещаем файл aar
в каталог libs
и устанавливаем его как зависимость, нам все равно придется поместить ту же зависимость в файл пользователя build.gradle
, который отстой. Он должен быть взят из библиотеки, не так ли?
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile(name: 'ourlibrary', ext: 'aar') {
transitive = true;
}
}
Как сделать transitive = true
работать?
Ответы
Ответ 1
Файл aar не содержит вложенных (или transitive) зависимостей и не имеет файла pom, который описывает зависимости, используемые библиотекой.
Это означает, что если вы импортируете файл aar с помощью ретрансляции flatDir
, вы должны указать зависимости также в своем проекте.
В вашем случае добавление transitive=true
не разрешает вашу проблему по причине, описанной выше.
Вам следует использовать хранилище maven (вы должны публиковать библиотеку в частном или публичном репозитории maven), у вас не будет такой же проблемы.
В этом случае gradle загружает зависимости, используя файл pom, который будет содержать список зависимостей.