update tools studio configurar actualizar android gradle android-gradle

android - tools - ¿Por qué Gradle construye mi módulo en modo Release cuando la aplicación está en Debug?



install gradle android studio (4)

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

app debug custom_lib debug

Al llamar a Build > Make Project , estamos construyendo todos los módulos del proyecto en su variante actual .

Sin embargo, debido a una limitación actual de Gradle ( https://code.google.com/p/android/issues/detail?id=52962 ), la creación de la app en debug requerirá construir la release de release de custom_lib , y así terminarás construyendo ambos.

Recomendaría no utilizar Make Project sino usar la opción a continuación que dice Make Module app . Esta opción cambiará de una app a otra en función de la selección actual en el panel Project o en función del editor actual, y siempre hará solo lo necesario para construir el módulo actual.

(Al analizar esto, notamos que no hay un atajo para hacerlo, así que estamos agregando uno).

Estoy haciendo un nuevo proyecto de Android, con el módulo de ''app'' estándar, así como un proyecto de biblioteca (llamémoslo ''custom_lib'' ). En el archivo build.gradle la app , vinculo el módulo como tal:

dependencies { compile project('':custom_lib'') }

Cuando desencadenar el proceso de compilación (Menú Build > Make Project ), obtengo el siguiente resultado en la consola Gradle

Executing tasks: [clean, :app:compileDebugSources, :custom_lib:compileDebugSources] Configuration on demand is an incubating feature. :app:clean :custom_lib:clean :app:preBuild :app:preDebugBuild :app:checkDebugManifest :app:preReleaseBuild :custom_lib:compileLint :custom_lib:copyReleaseLint UP-TO-DATE :custom_lib:mergeReleaseProguardFiles UP-TO-DATE :custom_lib:preBuild :custom_lib:preReleaseBuild :custom_lib:checkReleaseManifest :custom_lib:prepareReleaseDependencies :custom_lib:compileReleaseAidl :custom_lib:compileReleaseRenderscript :custom_lib:generateReleaseBuildConfig :custom_lib:generateReleaseAssets UP-TO-DATE :custom_lib:mergeReleaseAssets :custom_lib:generateReleaseResValues UP-TO-DATE :custom_lib:generateReleaseResources :custom_lib:packageReleaseResources :custom_lib:processReleaseManifest :custom_lib:processReleaseResources :custom_lib:generateReleaseSources :custom_lib:compileReleaseJava :custom_lib:processReleaseJavaRes UP-TO-DATE :custom_lib:packageReleaseJar :custom_lib:compileReleaseNdk :custom_lib:packageReleaseJniLibs UP-TO-DATE :custom_lib:packageReleaseLocalJar UP-TO-DATE :custom_lib:packageReleaseRenderscript UP-TO-DATE :custom_lib:bundleRelease :app:prepareComAndroidSupportAppcompatV72102Library :app:prepareComAndroidSupportSupportV42102Library :app:prepareTestDoubleBuildCustom_libUnspecifiedLibrary :app:prepareDebugDependencies :app:compileDebugAidl :app:compileDebugRenderscript :app:generateDebugBuildConfig :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources :app:mergeDebugResources :app:processDebugManifest :app:processDebugResources :app:generateDebugSources :app:compileDebugJava :app:compileDebugNdk :app:compileDebugSources :custom_lib:preDebugBuild :custom_lib:checkDebugManifest :custom_lib:prepareDebugDependencies :custom_lib:compileDebugAidl :custom_lib:compileDebugRenderscript :custom_lib:generateDebugBuildConfig :custom_lib:generateDebugAssets UP-TO-DATE :custom_lib:mergeDebugAssets :custom_lib:generateDebugResValues UP-TO-DATE :custom_lib:generateDebugResources :custom_lib:packageDebugResources :custom_lib:processDebugManifest :custom_lib:processDebugResources :custom_lib:generateDebugSources :custom_lib:compileDebugJava :custom_lib:compileDebugNdk :custom_lib:compileDebugSources BUILD SUCCESSFUL Total time: 2.184 secs

Lo que me desconcierta es que el mecanismo de compilación desencadena una compilación de depuración (como dice la primera línea), pero casi inmediatamente, Gradle usa la tarea :app:preReleaseBuild que hace que mi módulo custom_lib se construya con la configuración de Release.

Y luego, una vez que la aplicación está completamente construida, Gradle compila mi módulo con la configuración de depuración.

Entonces mis preguntas son:

  • ¿Por qué está haciendo esta doble construcción que parece incoherente?
  • ¿Cómo puedo asegurarme de que la biblioteca está construida con la configuración de depuración cuando inicio un proceso de compilación de depuración?

EDITAR:

app / build.gradle:

apply plugin: ''com.android.application'' android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { applicationId "com.deezer.testdoublebuild" minSdkVersion 8 targetSdkVersion 21 versionCode 1 versionName "1.0" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { debug{ debuggable true } release { debuggable false minifyEnabled false } } } dependencies { compile project('':custom_lib'') }

custom_lib / build.gradle:

apply plugin: ''com.android.library'' android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { applicationId "com.deezer.mylibrary" minSdkVersion 8 targetSdkVersion 21 versionCode 1 versionName "1.0" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } } dependencies { }

Nota : Estoy usando Android Studio 1.0 RC 1 / Gradle 2.2 y reproduje este problema creando un nuevo proyecto desde cero, agrego un módulo de biblioteca de Android vacío y "voila"


Esto está estrechamente relacionado con esta pregunta .

Parece que Gradle construye todos los módulos referenciados de un proyecto en modo de lanzamiento. Como custom_lib es solo una biblioteca, su configuración es anulada por el módulo que la hace referencia. No me preocuparía demasiado que la biblioteca se haya creado con la etiqueta "release".

Notará que en su salida de gradle, su proyecto se está compilando correctamente con la configuración de depuración.


Gradle ahora es compatible con la directiva Flavor-buildType-Compile, por lo que la respuesta de KaneORiley ahora se puede mejorar de la siguiente manera:

build.gradle de la biblioteca:

android { defaultPublishConfig ''release'' publishNonDefault true productFlavors { library { } }

build.gradle de la aplicación:

configurations { devDebugCompile devReleaseCompile storeDebugCompile storeReleaseCompile } android { ..... } dependencies { (...) devDebugCompile project(path: '':path:to:lib'', configuration: ''devDebug'') devReleaseCompile project(path: '':path:to:lib'', configuration: ''devRelease'') storeDebugCompile project(path: '':path:to:lib'', configuration: ''storeDebug'') storeReleaseCompile project(path: '':path:to:lib'', configuration: ''storeRelease'') }


Pon esto en tus dependencias de aplicaciones:

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

y en el build.gradle de tu biblioteca agrega:

android { defaultConfig { defaultPublishConfig ''release'' publishNonDefault true } }

Entonces la biblioteca se construirá en el mismo modo que la aplicación. Contrariamente a las revisiones anteriores de esta respuesta, he confirmado que no se requiere un sabor en la biblioteca (esto puede deberse a las versiones de complemento de Gradle o Android: estoy usando el complemento Gradle 2.14 y Android 2.1.0 y no lo necesitaba) .

Editar: puede tener problemas si no limpia / reconstruye después de modificar los archivos gradle, como se describe en esta respuesta aquí.