biblioteca com dependências de pacotes configuráveis (fat aar)
Construímos uma biblioteca que distribuímos aos nossos clientes. Nós distribuímos os arquivos aar brutos para eles usarem. Também usamos a API de acesso bruto do GitHub para fornecer um repositório Maven.
Agora, para manter as coisas organizadas, dividimos a biblioteca em vários módulos:
include ':library'
include ':geohash'
include ':networkstate'
include ':okvolley'
include ':volley'
library
é uma biblioteca Android, assim comovolley
eokvolley
enetworkstate
.
Agora, quando eu publicolibrary
, a árvore de dependência fica assim:
\--- 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
Como você pode verandroid-sdk:networkstate:unspecified
eandroid-sdk:okvolley:unspecified
aparecem na lista de dependências externas.
Eu gostaria de criar meulibrary
com os módulos locais empacotados. Deve fazer uma mesclagem de manifesto local e jar distante ... e mesclar as dependências de todos os módulos. Somente módulos externos devem aparecer.
Eu tentei fazer referência ao arquivo aar local a partir dobuild/output/aar
pasta dos respectivos módulos, mas isso também parece não funcionar. Ainda parece referenciar os módulos locais por seus nomes e não mesclar os manifestos do jar ...
Alguém já fez algo assim? Fora do Android, isso seria chamado de fatjar e existem plugins comomosqueteiro / gradle-fatjar-plugin que produzem um fatjar com Gradle.
Eu tentei isso nos meus módulos locais
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'
}
para referenciar o aar diretamente ...