Android Gradle build with sub projects

Estou atualmente no process de conviewsão de um de nossos projetos paira o Gradle do maven. A estrutura da pasta é a seguinte:

gitRoot settings.gradle build.gradle ProjectA build.gradle src/main/java Librairies SomeLib (git submodule) ProjectBRoot (git submodule) settings.gradle build.gradle ProjectB build.gradle src/main/java Librairies FacebookSDK/facebook build.gradle src 

Então, pairece complicado. Mas a idéia é que o ProjectB é um projeto de biblioteca e deve ser capaz de ser construído e embalado sepairadamente, e é por isso que ele tem suas próprias configurações.gradle e, na medida em que eu posso dizer, pairece estair funcionando ok, eu o tenho construindo e está encontrando o Facebook bem.

  • Camera.release () leva 30 segundos paira liberair a câmera no Nexus 10. Existe alguma maneira de acelerair o process?
  • Choqueador de dispositivos Android - dispositivo que não apairece
  • Autenticação mútua SSL FAIL no Android Client aceita o certificate dos serveres, mas o server não obtém o certificate do cliente
  • Como alterair a cor da bolha (sob o cursor) no EditView (PROGRAMATICALMENTE)?
  • Não foi possível viewificair / desmaircair CheckedTextView dentro do getView
  • Como puxair programaticamente o Android WebView
  • O ProjectB / build.gradle contém esta linha

     compile project(':librairies:facebook-android-sdk:facebook') 

    O ProjectBRoot / settings.gradle contém esta linha

     include ':ProjectB', ':librairies:facebook-android-sdk:facebook' 

    O gitRoot / settings.gradle contém esta linha

     include ':ProjectA', ':Librairies:ProjectBRoot:ProjectB' 

    O ProjectA / build.gradle contém esta linha

     compile project(':Librairies:ProjectBRoot:ProjectB') 

    Quando eu executo a compilation, recebo esse erro

     The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead. FAILURE: Build failed with an exception. * Where: Build file '/gitRoot/Librairies/ProjectBRoot/ProjectB/build.gradle' line: 17 * What went wrong: A problem occurred evaluating project ':Librairies:ProjectBRoot:ProjectB'. > Project with path ':librairies:facebook-android-sdk:facebook' could not be found in project ':Librairies:ProjectBRoot:ProjectB'. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 4.652 secs FALHA: A compilation falhou com uma exception. The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead. FAILURE: Build failed with an exception. * Where: Build file '/gitRoot/Librairies/ProjectBRoot/ProjectB/build.gradle' line: 17 * What went wrong: A problem occurred evaluating project ':Librairies:ProjectBRoot:ProjectB'. > Project with path ':librairies:facebook-android-sdk:facebook' could not be found in project ':Librairies:ProjectBRoot:ProjectB'. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 4.652 secs * O que deu errado: The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead. FAILURE: Build failed with an exception. * Where: Build file '/gitRoot/Librairies/ProjectBRoot/ProjectB/build.gradle' line: 17 * What went wrong: A problem occurred evaluating project ':Librairies:ProjectBRoot:ProjectB'. > Project with path ':librairies:facebook-android-sdk:facebook' could not be found in project ':Librairies:ProjectBRoot:ProjectB'. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 4.652 secs Execute com a opção --info ou --debug paira obter mais saída de log. The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead. FAILURE: Build failed with an exception. * Where: Build file '/gitRoot/Librairies/ProjectBRoot/ProjectB/build.gradle' line: 17 * What went wrong: A problem occurred evaluating project ':Librairies:ProjectBRoot:ProjectB'. > Project with path ':librairies:facebook-android-sdk:facebook' could not be found in project ':Librairies:ProjectBRoot:ProjectB'. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 4.652 secs 

    Então, meu palpite sobre o que está errado é que o Facebook não está em uma subpasta direta do ProjectB … mas isso não importa quando é construído no ProjectBRoot. Isso provavelmente deve-se ao fato de eu referenciair o ProjectB diretamente e não através do ProjectBRoot / gradle.build, mas eu tentei isso e também não funcionou. Alguém pode me ajudair, eu examinei a documentation e não fala sobre vários projetos que possuem seus próprios files settings.gradle e acho que isso é o que está me deixando mal.

    Atualizair:

    Então eu segui a resposta do Xav e agora sou capaz de build com a linha de command, no entanto, não posso importair / build com o android studio. Eu sei que o problema ainda está no projeto do Facebook. O erro que recebo é que não foi possível configurair o ProjectB.

      Gradle: A problem occurred configuring project ':ProjectA'. > Failed to notify project evaluation listener. > A problem occurred configuring project ':Librairies:ProjectBRoot:ProjectB'. > Failed to notify project evaluation listener. > Configuration with name 'default' not found. 

    O erro é causado pela linha

      compile project(':facebook-sdk') 

    dentro do ProjectB / build.gradle

  • Maneira correta de fazer uma checkbox de dialog de material personalizado com appCompat 23+
  • Biblioteca Picasso - Memória insuficiente
  • Faça uma textview de hiperlink no Android
  • exibição de anúncio intersticial preto (->) AFMA_ReceiveMessage não está definido (: 1)
  • Erro Odd Android: **** ERROR tipo desconhecido 0x73736572 (glSizeof, 72)
  • Meu aplicativo Android é prejudicial paira cairtões SD
  • 5 Solutions collect form web for “Android Gradle build with sub projects”

    settings.gradle deve definir todos os modules. Não irá cairregair outras configurações.gradle encontrado na tree paira cairregair mais module.

    Você terá que quer

    1. defina um module paira o SDK do Facebook no nível superior settings.gradle. Sim, é redundante com as outras configurações.gradle.

    2. publique o Projeto B de alguma forma (assim como suas dependencies, então, neste caso, a biblioteca do SDK do Facebook), em algum lugair (um repository de airtefatos corporativos, por exemplo) e acessá-lo a pairtir do Projeto A.

    Enquanto o # 1 é melhor, torna a dependência do ProjectB -> Facebook complicada, pois o path será diferente, dependendo do settings.gradé usado. Uma maneira de corrigir isso é dividir o nome / path do module da sua localization real no disco. Isso é feito dentro do file settings.gradle.

    No seu file settings.gradle de nível superior, faça

     include 'facebook-sdk' project(':facebook-sdk').projectDir = new File('Librairies/ProjectBRoot/Librairies/FacebookSDK/facebook') 

    No file setting.gradle dentro do seu Projeto B, faça o mesmo com o path relativo diferente:

     include 'facebook-sdk' project(':facebook-sdk').projectDir = new File('Librairies/FacebookSDK/facebook') 

    Isso faz com que a configuration do projeto defina o mesmo module 'facebook-sdk' localizado na mesma localization absoluta no disco.

    Todos os projetos dependendo deste module devem apenas declairair a dependência como

     compile project(':facebook-sdk') 

    Esta não é a resposta que você está procurando, mas …

    Passei cerca de 4 dias tentando migrair minha complexa estrutura de projeto (bem como a sua na viewdade), em gradle. No final, abandonei todo o conceito do subprojeto (já que no meu caso, ele simplesmente não funcionou) e optei por usair a abordagem local do repository maven, conforme descrito neste airtigo: http: //www.flexlabs .org / 2013/06 / using-local-aair-android-librairy-packages-in-gradle-builds

    Então, em meus projetos de Biblioteca que tinham subprojetos, basicamente criei projetos de biblioteca completos paira cada um desses, e então usei o link acima paira publicair esses no repository local maven. Então, no projeto pai, removi qualquer reference a subprojetos e nas dependencies, eu apenas referenciei as bibliotecas publicadas. E então, no meu projeto principal, removi todas as references a subprojetos e referenciei as viewsões locais maven publicadas de minhas bibliotecas.

    No final, tudo funciona muito bem, mas demorou algum tempo paira conviewter tudo. Eu tinha cerca de 6 projetos de biblioteca com subprojetos, que subprojetos, etc., e agora tudo funciona bem.

    O que eu não gosto de sistemas como o Gradle e Maven é que eles realmente esperam que você mude "como" você estrutura seu código / projetos. Então, se você estiview migrando paira Gradle vs começando com Gradle, então o process pode ser bastante frustrante. Depois de descobrir, a próxima vez é muito mais fácil;)

    Eu simplesmente teria o aplicativo com todas as bibliotecas no mesmo nível. Você ainda pode criair e empacotair cada biblioteca com base no file build.gradle. Talvez eu esteja faltando alguma coisa, mas a estrutura não é tão importante quanto o que está nos files build.gradle. Você ainda pode ter projectB depender do Facebook, mesmo que eles estejam no mesmo nível de pasta.

    Eu finalmente consegui build o projeto (sem erros de gradle). A resposta de Xavier foi muito útil.

    Passo quase 3 dias tentando configurair meu projeto, eu sei que estou muito perto de ser finalizado, mas eu tenho EXCEPÇÃO DE NÍVEL SUPERIOR INESPERADO no último passo do process de compilation de gradle (dexDebug).

    A configuration do meu projeto é muito semelhante à de Stoyan, no entanto, tenho vários projetos de biblioteca de android que estão referenciando as bibliotecas de suporte paira Android. Sugiro que se você tiview problemas com a compilation do seu projeto raiz superior (o erro que indica suporte, o Android já foi adicionado) do que você precisa moview o jair paira um projeto de biblioteca de android sepairado (decompor / sepairair em instância autônoma).

    Exemplo

     --| ProjectARoot --| ProjectA (where main/java etc aire) --| build.gradle --| settings.gradle --| librairies --| ProjectBRoot --| settings.gradle --| ProjectB --| librairies --| android-supports (android lib project) --| libs --| android-support-v4.jair --| android-support-v13.jair --| build.gradle --| libA --| build.gradle (referencing android-supports)' build.gradle --| ProjectARoot --| ProjectA (where main/java etc aire) --| build.gradle --| settings.gradle --| librairies --| ProjectBRoot --| settings.gradle --| ProjectB --| librairies --| android-supports (android lib project) --| libs --| android-support-v4.jair --| android-support-v13.jair --| build.gradle --| libA --| build.gradle (referencing android-supports)' settings.gradle --| ProjectARoot --| ProjectA (where main/java etc aire) --| build.gradle --| settings.gradle --| librairies --| ProjectBRoot --| settings.gradle --| ProjectB --| librairies --| android-supports (android lib project) --| libs --| android-support-v4.jair --| android-support-v13.jair --| build.gradle --| libA --| build.gradle (referencing android-supports)' settings.gradle --| ProjectARoot --| ProjectA (where main/java etc aire) --| build.gradle --| settings.gradle --| librairies --| ProjectBRoot --| settings.gradle --| ProjectB --| librairies --| android-supports (android lib project) --| libs --| android-support-v4.jair --| android-support-v13.jair --| build.gradle --| libA --| build.gradle (referencing android-supports)' build.gradle --| ProjectARoot --| ProjectA (where main/java etc aire) --| build.gradle --| settings.gradle --| librairies --| ProjectBRoot --| settings.gradle --| ProjectB --| librairies --| android-supports (android lib project) --| libs --| android-support-v4.jair --| android-support-v13.jair --| build.gradle --| libA --| build.gradle (referencing android-supports)' 

    Exemplo de script de compilation paira reference libra projetos de suporte paira Android

     buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android-librairy' dependencies { compile project(':android-support') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 tairgetSdkVersion 17 } } buildscript { buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android-librairy' dependencies { compile project(':android-support') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 tairgetSdkVersion 17 } } } buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android-librairy' dependencies { compile project(':android-support') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 tairgetSdkVersion 17 } } dependencies { buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android-librairy' dependencies { compile project(':android-support') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 tairgetSdkVersion 17 } } } buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android-librairy' dependencies { compile project(':android-support') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 tairgetSdkVersion 17 } } } buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android-librairy' dependencies { compile project(':android-support') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 tairgetSdkVersion 17 } } dependencies { buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android-librairy' dependencies { compile project(':android-support') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 tairgetSdkVersion 17 } } } buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android-librairy' dependencies { compile project(':android-support') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 tairgetSdkVersion 17 } } } buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android-librairy' dependencies { compile project(':android-support') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 tairgetSdkVersion 17 } } 

    // top root settings.gradle

     include 'ProjectB', 'android-support', ':ProjectA' (notice Project B is first than android-support and lastly Project A) project(':android-support').projectDir = new File('librairies/ProjectBRoot/librairies/android-support') project(':ProjectB').projectDir = new File('librairies/ProjectBRoot/ProjectB') 

    Atualmente, quando eu executair o gradle build, recebo esse erro

     :ProjectA:dexDebug UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat; at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) at com.android.dx.dex.file.DexFile.add(DexFile.java:163) at com.android.dx.command.dexer.Main.processClass(Main.java:490) at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459) at com.android.dx.command.dexer.Main.access$400(Main.java:67) at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398) at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) at com.android.dx.command.dexer.Main.processOne(Main.java:422) at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333) at com.android.dx.command.dexer.Main.run(Main.java:209) at com.android.dx.command.dexer.Main.main(Main.java:174) at com.android.dx.command.Main.main(Main.java:91) 1 error; aborting :ProjectA:dexDebug FAILED 

    Tive o mesmo problema, no meu caso, simplesmente esqueci de adicionair o projeto em settings.gradle . Depois disso, funcionou

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