Мы создаем библиотеку, которую мы распространяем для наших клиентов. Мы распространяем необработанные файлы aar для их использования. Также мы используем API-интерфейс необработанного доступа GitHub для предоставления репозитория Maven.
Теперь, чтобы сохранить порядок вещей, мы разделили библиотеку на несколько модулей:
include ':library'
include ':geohash'
include ':networkstate'
include ':okvolley'
include ':volley'
library
- это Android-библиотека, поэтому volley
и okvolley
и networkstate
.
Теперь, когда я публикую library
, дерево зависимостей выглядит следующим образом:
\--- com.sensorberg.sdk:sensorberg-sdk:0.10.0-SNAPSHOT
+--- com.squareup.okhttp:okhttp-urlconnection:2.2.0
| \--- com.squareup.okhttp:okhttp:2.2.0
| \--- com.squareup.okio:okio:1.2.0
+--- com.google.code.gson:gson:2.3.1
+--- android-sdk:okvolley:unspecified
| +--- com.squareup.okhttp:okhttp-urlconnection:2.2.0 (*)
| +--- com.google.code.gson:gson:2.3.1
| +--- android-near-gradle:volley:unspecified
| \--- com.squareup.okhttp:okhttp:2.2.0 (*)
+--- android-sdk:networkstate:unspecified
+--- com.squareup.okhttp:okhttp:2.2.0 (*)
+--- android-sdk:volley:unspecified
\--- com.loopj.android:android-async-http:1.4.5
Как вы можете видеть, android-sdk:networkstate:unspecified
и android-sdk:okvolley:unspecified
отображаются в списке внешних зависимостей.
Я хотел бы создать мой library
aar с локальными модулями в комплекте. Он должен делать локальное слияние манифеста и далекое jar... и объединять зависимости всех модулей. Только внешние модули должны показывать.
Я попытался ссылаться на локальный файл aar из папки build/output/aar
соответствующих модулей, но это также, похоже, не работает. По-прежнему кажется, что они ссылаются на локальные модули по их именам и не объединяют манифесты jar...
Кто-нибудь когда-нибудь делал что-то подобное? Вне Android это будет называться fatjar, и есть плагины, такие как musketyr/gradle-fatjar-plugin, которые производят fatjar с Gradle.
Я пробовал это на своих локальных модулях
if (project.ext.libraryBuild == true) {
def moduleName = getName()
File artifactFile = file("/build/outputs/aar/${moduleName}-release.aar")
if (!artifactFile.exists()) {
throw new GradleException("Dependency ${moduleName} is not build")
}
configurations.create("default")
artifacts.add("default", artifactFile)
return;
}
apply plugin: 'com.android.library'
android {
compileSdkVersion 19
buildToolsVersion = '21.1.2'
}
для ссылки на aar напрямую...