renderizado - El empaquetado de la aplicación de desgaste de Android falla con sabores
problemas con gradle en android studio (4)
Tengo una aplicación que incluye una aplicación de desgaste. Todo funciona bien en la depuración probada con un dispositivo real. También puedo crear el apk de lanzamiento que contiene el apk de desgaste dentro de él. Pero solo si hay un solo sabor en mi aplicación.
Quiero mantener dos versiones de la aplicación con diferente ID de aplicación, pero aunque esta compilación sin errores, en este caso los dos apks de lanzamiento (uno de cada sabor) no coinciden con los apks de desgaste correspondientes.
Esta es la parte relevante de la aplicación móvil build.gradle:
productFlavors {
Trial {
applicationId "com.example.myapp.trial"
versionName "3.0.1"
versionCode 301
}
Full {
applicationId "com.example.myapp"
versionName "3.0.1"
versionCode 301
}
}
}
dependencies {
compile ''com.google.android.gms:play-services:6.1.+@aar''
wearApp project('':myWearApp'')
}
Y esta es la aplicación de desgaste correspondiente build.gradle:
productFlavors {
Trial {
applicationId "com.example.myapp.trial"
versionName "3.0.1"
versionCode 301
}
Full {
applicationId "com.example.myapp"
versionName "3.0.1"
versionCode 301
}
}
}
dependencies {
compile ''com.google.android.support:wearable:1.0.0''
compile ''com.google.android.gms:play-services-wearable:6.1.71''
}
Cualquier ayuda será bienvenida. Gracias.
Agregaré un poco más a la respuesta de @tormod, ya que omitió algunos puntos cruciales para incluir el hecho de publishNonDefault true
Aquí hay algunos ejemplos de archivos de Gradle para empaquetar un módulo de desgaste con sabores y tipos de construcción.
Módulo móvil build.gradle
apply plugin: ''com.android.application''
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.app"
minSdkVersion 15
targetSdkVersion 23
versionCode 85
versionName "2.5.2"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
embedMicroApp = true
minifyEnabled false
}
release {
embedMicroApp = true
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''
zipAlignEnabled true
}
}
productFlavors {
free{
applicationId "com.example.app"
}
pro{
applicationId "com.example.app.pro"
}
}
}
configurations {
freeDebugWearApp
proDebugWearApp
freeReleaseWearApp
proReleaseWearApp
}
dependencies {
compile fileTree(dir: ''libs'', include: [''*.jar''])
testCompile ''junit:junit:4.12''
compile ''com.android.support:appcompat-v7:23.4.0''
freeDebugWearApp project(path: '':wear'', configuration: ''freeDebug'')
proDebugWearApp project(path: '':wear'', configuration: ''proDebug'')
freeReleaseWearApp project(path: '':wear'', configuration: ''freeRelease'')
proReleaseWearApp project(path: '':wear'', configuration: ''proRelease'')
}
Módulo Wear build.gradle
apply plugin: ''com.android.application''
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
publishNonDefault true
defaultConfig {
applicationId "com.example.app"
minSdkVersion 20
targetSdkVersion 23
versionCode 85
versionName "2.5.2"
}
buildTypes {
debug {
applicationIdSuffix ".debug"
minifyEnabled false
}
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''
zipAlignEnabled true
}
}
productFlavors {
free {
applicationId "com.example.app"
}
pro {
applicationId "com.example.app.pro"
}
}
}
dependencies {
...
}
El sabor de la aplicación principal no se propaga automáticamente al proyecto Wear. Tienes que mapearlo explícitamente.
En lugar de esto:
dependencies {
wearApp project('':myWearApp'')
}
Hacer esto:
En tu aplicación Wear:
android {
publishNonDefault true
}
En tu aplicación para padres:
dependencies {
TrialWearApp project(path: '':myWearApp'', configuration: ''Trial'')
FullWearApp project(path: '':myWearApp'', configuration: ''Full'')
}
Gracias a la pista que Scott me dio, esta es la solución completa:
1.) Los sabores deben estar en minúsculas.
2.) las configuraciones de dependencia deben incluir el lanzamiento de sabor
3.) En la aplicación Wear buil gradle, bajo Android {}, debemos incluir publishNonDefault true
Así que para la aplicación móvil build.gradle:
android {
......
productFlavors {
trial {
applicationId "com.sample.myapp.trial"
versionName "3.0.1"
versionCode 301
}
full {
applicationId "com.sample.myapp"
versionName "3.0.1"
versionCode 301
}
}
}
dependencies {
trialWearApp project(path: '':myWearApp'', configuration: ''trialRelease'')
fullWearApp project(path: '':myWearApp'', configuration: ''fullRelease'')
}
Y para la aplicación de desgaste build.gradle:
android {
publishNonDefault true
......
productFlavors {
trial {
applicationId "com.sample.myapp.trial"
versionName "3.0.1"
versionCode 301
}
full {
applicationId "com.sample.myapp"
versionName "3.0.1"
versionCode 301
}
}
}
Veo que encontró una solución a su problema, pero aquí está mi versión que combina configuraciones de construcción con sabores y sufijos de aplicación en caso de que la necesite en el futuro. También podría ser información relevante para aquellos que terminan en Google entrando en esta publicación.
app / build.gradle:
android {
compileSdkVersion 23
buildToolsVersion ''23.0.3''
signingConfigs {
debug { ... }
release { ... }
}
defaultConfig {
applicationId "com.sample.myapp"
minSdkVersion 14
targetSdkVersion 23
versionName "3.0.1"
versionCode 301
}
buildTypes {
debug {
applicationIdSuffix ".debug"
embedMicroApp = true
minifyEnabled false
debuggable true
}
release {
embedMicroApp = true
minifyEnabled true
zipAlignEnabled true
proguardFiles getDefaultProguardFile(''proguard-android-optimize.txt''), ''proguard-rules.pro''
}
productFlavors {
trial {
applicationIdSuffix ".trial"
}
full {
applicationIdSuffix ".pro"
}
}
}
configurations {
trialDebugWearApp
fullDebugWearApp
trialReleaseWearApp
fullReleaseWearApp
}
dependencies {
...
trialDebugWearApp project(path: '':myWearApp'', configuration: ''trialDebug'')
fullDebugWearApp project(path: '':myWearApp'', configuration: ''fullDebug'')
trialReleaseWearApp project(path: '':myWearApp'', configuration: ''trialRelease'')
fullReleaseWearApp project(path: '':myWearApp'', configuration: ''fullRelease'')
}
desgaste / build.gradle:
android {
compileSdkVersion 23
buildToolsVersion ''23.0.3''
publishNonDefault true
signingConfigs {
debug { ... }
release { ... }
}
defaultConfig {
applicationId "com.sample.myapp"
minSdkVersion 20
targetSdkVersion 23
versionName "3.0.1"
versionCode 301
}
buildTypes {
debug {
applicationIdSuffix ".debug"
minifyEnabled false
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(''proguard-android-optimize.txt''), ''proguard-rules.pro''
}
productFlavors {
trial {
applicationIdSuffix ".trial"
}
full {
applicationIdSuffix ".pro"
}
}
dependencies {
...
}
}