¿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
?
- No se puede crear un nuevo proyecto en el android studio
- Tecla Eliminar en Editor de traducciones
- Gradle se queda atascado en 'build' o 'assembleDebug' al usar la versión de 64 bits o 32 bits de Android Studio
- El módulo de prueba de Android (Gradle Plugin 1.3) no funciona: "debug-classes not found"
- Cannont resolver el símbolo JSONObject (Android Studio)
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 paradebug
yrelease
. 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 deSNAPSHOT
para ladebug
pero no para larelease
o algo así. Sin embargo, la mezcla de Maven, Gradle, Android ySNAPSHOT
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 larelease
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
?
- Cómo utilizar assert en Android Studio
- Android Studio 2.2 vista previa lanzar error al implementar enlace de datos
- Diferencia entre TextInputLayout y TextInputEditText
- No se encontró com.android.tools.build:gradle:3.0.0-alpha1 en el círculo ci
- Problemas de procesamiento Excepción generada durante la representación: No se pudo encontrar el recurso de diseño
- Android Studio: Drawable Folder: ¿Cómo poner imágenes para múltiples ppp?
- Android Studio 1.0.1 agrega bibliotecas externas
- Android gradle de estudio, error: Causa: error = 2, Ningún archivo o directorio
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.