¿Cómo puedo detener Gradle para Android desde el edificio * Todos * Módulo de biblioteca de tipos de construcción en cada construcción?

Estoy seguro de que esto se ha preguntado antes, pero no estoy encontrando las palabras clave adecuadas para encontrar respuestas, así que …

¿Cómo dejo de Gradle para Android (dentro o fuera de Android Studio) construir todos los tipos de compilación de un módulo de biblioteca cuando solicito la construcción de un tipo de compilación? IOW, si estoy construyendo debug , ¿cómo puedo evitar que Gradle para Android también edifique la release ?


La historia, para aquellos con ideas alternativas:

Supongamos que tengo dos proyectos de Android Studio, A y B. Cada uno tiene dos módulos: un módulo de biblioteca de Android y una aplicación de demostración que depende de esa biblioteca. Por lo tanto, tengo un total de cuatro módulos:

  • A L : biblioteca del proyecto A
  • Una aplicación de demostración de D : project A
  • B L : biblioteca del proyecto B
  • B D : aplicación de demostración del proyecto B

Mientras A y B no estén relacionados, la vida es buena.

Pero, ¿y si quiero que B L dependa de A L ?

Para release , si quiero que esas bibliotecas vayan en un repositorio de artefactos estilo Maven, necesito la variante de release de B L para depender del artefacto publicado de A L. De esta manera, mi B POM tiene la información de dependencia correcta.

Para debug , sería ideal si B L podría depender de la copia de trabajo de A L. Mientras que la configuración que hasta es un poco hacky, puedo hacer que funcione.

Pero entonces si agrego cosas a A, como una nueva clase de Java, y trato de usarlo desde B L , no puedo construir. Mi compilación de debug es perfectamente bien AFAICT. Sin embargo, aunque realmente realmente no quiero hacer una release ahora, Gradle para Android insiste en hacer una release todos modos:

 $ gradle assembleDebug :demo:preBuild UP-TO-DATE :demo:preDebugBuild UP-TO-DATE :demo:compileDebugNdk UP-TO-DATE :demo:checkDebugManifest :demo:preReleaseBuild UP-TO-DATE :richedit:compileLint :richedit:copyReleaseLint UP-TO-DATE :richedit:mergeReleaseProguardFiles UP-TO-DATE :richedit:preBuild UP-TO-DATE :richedit:preReleaseBuild UP-TO-DATE :richedit:checkReleaseManifest :richedit:prepareReleaseDependencies :richedit:compileReleaseAidl UP-TO-DATE :richedit:compileReleaseRenderscript UP-TO-DATE :richedit:generateReleaseBuildConfig UP-TO-DATE :richedit:generateReleaseAssets UP-TO-DATE :richedit:mergeReleaseAssets UP-TO-DATE :richedit:generateReleaseResValues UP-TO-DATE :richedit:generateReleaseResources UP-TO-DATE :richedit:packageReleaseResources :richedit:processReleaseManifest UP-TO-DATE :richedit:processReleaseResources :richedit:generateReleaseSources :richedit:compileReleaseJava 

(Donde richedit es B L y demo es B D en mi nomenclatura anterior)

Estoy pidiendo para ensamblar la compilación de debug , pero todavía compila la release compilación. Y la release no se puede compilar, porque estoy tratando de tener B L uso de material nuevo no publicado de A L.

Estoy razonablemente seguro, aunque no 100% seguro, que si Gradle para Android simplemente ignoraría la release cuando estoy tratando de construir debug , que estaría en buena forma.

Por supuesto, existen posibles soluciones:

  • Podría abandonar la idea de que estas son bibliotecas separadas y consolidarlas en una sola. Todavía puedo hacer eso. Pero seguro que siente que lo que estoy tratando de hacer debería ser posible.

  • No pude intentar usar los cambios de A L hasta que publique una release A L , en cuyo caso B L puede depender del artefacto publicado para debug y release . Sin embargo, parece que va a causar una gran cantidad de churn de patchlevel en el proyecto A, ya que mi "caso de uso" principal del consumidor de esta nueva funcionalidad A es B. Sólo porque tengo cambios en A que pasan pruebas de instrumentación no significa que Será lo que B necesita, y no lo sabré hasta que pueda construir B con los cambios en A.

  • Una variación en la solución anterior puede ser liberaciones SNAPSHOT , donde de alguna manera permitir la comprobación de las liberaciones de SNAPSHOT para la debug pero no para la release o algo así. Sin embargo, la mezcla de Maven, Gradle, Android y SNAPSHOT parece bastante poco documentada, y no tengo idea de si es algo que debo perseguir. Y, como con la bala anterior, esto todavía daría lugar a la release se construye innecesariamente; La construcción tendría éxito en mi caso.

¿Hay algún Gradle para la configuración de Android en algún lugar que me falta que dice debug significa sólo debug ?

https://stackoverflow.com/a/27278352/535762 Si solucionas el problema, estaría interesado en saber cómo, porque seguro que no es totalmente funcional todavía utilizar gradle construye con sólo debug en mente.

Aquí las partes esenciales:

En la ventana del panel "Construir variantes" a la izquierda, debe ver ambos módulos y junto a ellos las variantes "activas" actuales. Por ejemplo

 app debug custom_lib debug Build > Make Project 

Está construyendo cada módulo en el proyecto en su variante actual

https://code.google.com/p/android/issues/detail?id=52962 requerirá la creación de la variante de lanzamiento de custom_lib, por lo que terminará creando ambos.

Utilice la opción que dice Make Module app . Esta opción cambiará de una aplicación a otra basada en la selección actual en el panel Proyecto o basada en el editor actual y siempre hará sólo lo necesario para construir el módulo actual.

Hay un error aquí: https://code.google.com/p/android/issues/detail?id=52962

¿El comentario # 35 es decir

Intente establecer esto en el proyecto de dependencia

 android { publishNonDefault true ... } 

Y esto en el proyecto que lo usa

 dependencies { releaseCompile project(path: ':theotherproject', configuration: 'release') debugCompile project(path: ':theotherproject', configuration: 'debug') } 

Tomado de aquí: https://code.google.com/p/android/issues/detail?id=66805

¿trabajo para ti? Parece ser el que la mayoría de la gente piensa que el trabajo, no lo he intentado personalmente todavía.

  • Android Analyze APK
  • Android Studio no muestra mi sony xperia tipo
  • Android-Studio (o IDEA en general) refactor sobre múltiples conjuntos de fuentes
  • Android Wear Project Gradle Sync falla
  • Agregue el proyecto android de ZXing como biblioteca en android studio
  • ¿Por qué Android activo no funciona con gradle 2.0?
  • Gradle connectedAndroidTest devuelve "No se encontró ninguna prueba", sin embargo, el shell adb shell puede encontrar las pruebas
  • Error en la instalación de la aplicación: INSTALL_FAILED_VERIFICATION_FAILURE
  • Cómo depurar la aplicación de Android en modo de publicación mediante Android studio
  • Android Studio XML no reconoce objectAnimator
  • No se puede establecer el valor DSCP en la aplicación android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.