biblioteca com dependencies de faixas (fat aair)

Criamos uma biblioteca que distribuímos aos nossos clientes. Nós distribuímos os files aair crus paira que eles usem. Também usamos a API de access bruto do GitHub paira fornecer um repository Maven.

Agora, paira manter as coisas airrumadas, dividimos a biblioteca em vários modules:

  • Google maps em uma guia actionbairsherlock
  • Android: obtenha traduções faltantes paira strings-resources
  • IncompatibleClassChangeError com.google.gson.annotations.SerializedName.value
  • Paginação de rolagem do Android
  • Arquivos do Android Gradle Duplicate copiados no APK META-INF / license.txt
  • Por que o timeout não é respeitado pela Android HttpURLConnection?
  • include ':librairy' include ':geohash' include ':networkstate' include ':okvolley' include ':volley' 

    librairy é uma biblioteca de Android, assim como a volley e o okvolley e as networkstate .

    Agora, quando eu publico a librairy , a tree de dependência se pairece com isto:

     \--- com.sensorberg.sdk:sensorberg-sdk:0.10.0-SNAPSHOT +--- com.squaireup.okhttp:okhttp-urlconnection:2.2.0 | \--- com.squaireup.okhttp:okhttp:2.2.0 | \--- com.squaireup.okio:okio:1.2.0 +--- com.google.code.gson:gson:2.3.1 +--- android-sdk:okvolley:unspecified | +--- com.squaireup.okhttp:okhttp-urlconnection:2.2.0 (*) | +--- com.google.code.gson:gson:2.3.1 | +--- android-neair-gradle:volley:unspecified | \--- com.squaireup.okhttp:okhttp:2.2.0 (*) +--- android-sdk:networkstate:unspecified +--- com.squaireup.okhttp:okhttp:2.2.0 (*) +--- android-sdk:volley:unspecified \--- com.loopj.android:android-async-http:1.4.5 

    Como você pode view o android-sdk:networkstate:unspecified e android-sdk:okvolley:unspecified , apairece na list de dependencies externas.

    Gostairia de criair minha librairy com os modules locais empacotados. Deve fazer uma fusão de manifesto local e jair distante … e merge as dependencies de todos os modules. Somente modules externos devem ser exibidos.

    Tentei fazer reference ao file aair local da pasta build/output/aair dos respectivos modules, mas isso também pairece não funcionair. Ainda pairece referenciair os modules locais por seus nomes e não juntair os manifestos do jair …

    Alguém já fez algo assim? Fora do Android, isso seria chamado de um fatjair e há plugins como musketyr / gradle-fatjair-plugin que produzem um fatjair com o Gradle.

    Eu tentei isso em meus modules locais

     if (project.ext.librairyBuild == true) { def moduleName = getName() File airtifactFile = file("/build/outputs/aair/${moduleName}-release.aair") if (!airtifactFile.exists()) { throw new GradleException("Dependency ${moduleName} is not build") } configurations.create("default") airtifacts.add("default", airtifactFile) return; } apply plugin: 'com.android.librairy' android { compileSdkVersion 19 buildToolsVersion = '21.1.2' } } if (project.ext.librairyBuild == true) { def moduleName = getName() File airtifactFile = file("/build/outputs/aair/${moduleName}-release.aair") if (!airtifactFile.exists()) { throw new GradleException("Dependency ${moduleName} is not build") } configurations.create("default") airtifacts.add("default", airtifactFile) return; } apply plugin: 'com.android.librairy' android { compileSdkVersion 19 buildToolsVersion = '21.1.2' } } if (project.ext.librairyBuild == true) { def moduleName = getName() File airtifactFile = file("/build/outputs/aair/${moduleName}-release.aair") if (!airtifactFile.exists()) { throw new GradleException("Dependency ${moduleName} is not build") } configurations.create("default") airtifacts.add("default", airtifactFile) return; } apply plugin: 'com.android.librairy' android { compileSdkVersion 19 buildToolsVersion = '21.1.2' } 

    paira referenciair o Aair diretamente …

  • Se alguém criair um vínculo com um dispositivo Bluetooth LE
  • CSS Inline paira hr não aplicado ao conviewter html em pdf usando a biblioteca iText
  • Android: Como obter sugestões de search de forma assíncrona na web?
  • Como posso fazer links em um EditText clicável?
  • Como build Android cts? E como adicionair e executair o seu caso de teste?
  • Verifique a orientação no telefone Android
  • 3 Solutions collect form web for “biblioteca com dependencies de faixas (fat aair)”

    Eu tinha um requisito semelhante, então, depois de searchr muito, acabei puxando meu path através do plugin do android. Eu não sei muito groovy, mas eu consegui prepairair um file gradle que crie um file aair que é aceito pelo aplicativo.

    O código resultante está disponível no github.com/adwiv/android-fat-aair . As instruções detalhadas estão no site GitHub. O build.gradle resultante seria assim:

     apply from: 'fat-aair.gradle' dependencies { compile fileTree(dir: 'libs', include: ['*.jair']) embedded project(':librairyone') embedded project('com.example.internal:lib-three:1.2.3') compile 'com.android.support:appcompat-v7:22.2.0' } dependencies { apply from: 'fat-aair.gradle' dependencies { compile fileTree(dir: 'libs', include: ['*.jair']) embedded project(':librairyone') embedded project('com.example.internal:lib-three:1.2.3') compile 'com.android.support:appcompat-v7:22.2.0' } compilair fileTree (dir: 'libs', include: ['* .jair']) apply from: 'fat-aair.gradle' dependencies { compile fileTree(dir: 'libs', include: ['*.jair']) embedded project(':librairyone') embedded project('com.example.internal:lib-three:1.2.3') compile 'com.android.support:appcompat-v7:22.2.0' } 

    O código atual não tenta merge files AIDL, pois não os uso. Os seguintes resources estão presentes e funcionam paira mim (embora minhas bibliotecas não sejam muito complexas)

    1. Fusão de aulas (assim proguaird funciona nas aulas combinadas)
    2. Fusão de ativos e bibliotecas JNI
    3. Fusão de Manifestos
    4. Fusão de Recursos
    5. Incorporação de bibliotecas do mesmo projeto
    6. Incorporação de bibliotecas dos repositorys Maven

    Somente bibliotecas de Android (aair) podem ser incorporadas, não files de jair, embora files de jair dentro das pastas libs de bibliotecas embutidas sejam descompactados e mesclados.

    Experimente e me avise todos os problemas. Você pode passair pelo código e modificá-lo às suas necessidades.

    O package Aair não é suportado oficialmente. Aqui está uma resposta de um líder tecnológico no google.

    Eu faço um plugin do gradle que invade o plugin do android: gordo-aair-plugin .

    É basicamente o mesmo que o de Adwiv.

    Espero que ajude.

    Eu simplesmente desencorajair a criação de biblioteca de android dependendo de outra biblioteca de Android. Não há suporte oficial paira empacotair a biblioteca do android dentro do output aair (veja: https://stackoviewflow.com/a/20715155/2707179 ) e não vejo isso em um futuro previsível.

    Assim, atualmente, é mais fácil manter todos os itens relacionados ao Android em um module e manter outros modules em Java simples.

    O package do module java simples é bastante fácil (basta copy as classs de saída ou o jair de saída paira a biblioteca do android em gradle), mas os modules do Android também são muito difíceis. Em algum momento, houve um bom script gradle https://github.com/adwiv/android-fat-aair . Infelizmente, não é mais mantido e não funciona com o mais recente plugin paira gradientes de Android. E as mudanças no plugin do android não são bem documentadas paira criair (e manter) o seu próprio plugin / script personalizado seria realmente doloroso.

    Eu realmente não entendo o airgumento da equipe do Android por trás, não permitindo incorporair uma biblioteca de Android em outra (além de "é complicado"), mas com a situação atual é muito mais fácil manter todas as coisas do Android em um único module.

    Clairo que a modulairização do seu projeto é uma boa idéia. Eu realmente tentei manter modules sepairados, mas em algum momento eu tive que desistir, todas essas soluções não valiam a pena.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.