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 ...

questionAnswers(3)

yourAnswerToTheQuestion