Obtenga el tipo de generación gradle en el sabor del producto

Necesito crear diferentes nombres de aplicación dependiendo del sabor del producto utilizado.

Si bien esto fue fácil simplemente estableciendo un recurso de cadena, ya no puedo hacer eso porque cuando la aplicación se carga en hockeyapp el nombre de la aplicación se establece como '@ string / app_name' en lugar del valor de app_name.

He realizado algunos progresos estableciendo la etiqueta en el manifiesto como '$ {applicationName}' y estableciendo el valor con

manifestPlaceholders = [ applicationName : appName ]; 

En el bloque del sabor del producto de modo que el valor sea fijado en el tiempo de la compilación.

El problema aparece cuando intento anexar el tipo de compilación al nombre de la aplicación. Parece que no puedo encontrar una manera de saber qué tipo de construcción se está utilizando actualmente dentro del sabor del producto.

Esta es una versión simplificada de la compilación para mayor legibilidad

 android { buildVersionName "1.0.0 buildTypes { release { ... nothing special } uat { signingConfig signingConfigs.debug buildType = "uat" applicationIdSuffix = "." + buildType } debug { signingConfig signingConfigs.debug buildType = "uat" applicationIdSuffix = "." + buildType } } productFlavors{ flavor1{ def appName = "app name " + buildType; manifestPlaceholders = [ applicationName : appName ]; applicationId [id] def clientIteration = [client iteration] versionName buildVersionName + clientIteration versionCode [version code] } flavor2{ ... same as above with different app name } flavor3{ ... same as above with different app name } } } 

Este código funciona bien, excepto que la variable 'buildType' es siempre el último buildtype (en este caso debug) lo que significa que el nombre de la aplicación siempre tiene depuración al final.

Probablemente vale la pena señalar que no necesito tener nada añadido al final del nombre de la aplicación para las versiones.

3 Solutions collect form web for “Obtenga el tipo de generación gradle en el sabor del producto”

Sé que estoy un poco tarde para la fiesta, pero si quieres nombres diferentes basados ​​en los sabores, deberías tener algo como esto:

  productFlavors{ flavour 1 { applicationId "your_app_id" resValue "string", "app_name", "Flavour 1 app name" ....... } flavour 2 { applicationId "your_app_id" resValue "string", "app_name", "Flavour 2 app name" ....... } } 

Y en su AndroidManifest.xml:

  android:label="@string/app_name" 

Espero que esto ayude.

Puede agregar valores como este

  android { productFlavors { Foo { applicationId "com.myexample.foo" manifestPlaceholders = [ appName:"Foo"] } Bar { applicationId "com.myexample.bar" manifestPlaceholders = [ appName:"Bar"] } } buildTypes { release { manifestPlaceholders = [ appNameSuffix:""] } debug { manifestPlaceholders = [ appNameSuffix:".Debug"] applicationIdSuffix ".debug" } } } 

Y en el manifiesto

 <application android:label="${appName}${appNameSuffix}" ... </application> 

Si desea acceder a diferentes valores basados ​​en tipo de compilación puede hacerlo de esta manera

 buildTypes { debug{ buildConfigField "String", "Your_string_key", '"yourkeydebugvalue"' buildConfigField "String", "SOCKET_URL", '"some text"' buildConfigField "Boolean", "LOG", 'true' } release { buildConfigField "String", "Your_string_key", '"yourkeyreleasevalue"' buildConfigField "String", "SOCKET_URL", '"release text"' buildConfigField "Boolean", "LOG", 'false' } } 

Y para acceder a esos valores utilizando variantes de construcción:

  if(!BuildConfig.LOG) // do something with the boolean value 

O

 view.setText(BuildConfig.yourkeyvalue); 

Este enlace http://inaka.net/blog/2014/12/22/create-separate-production-and-staging-builds-in-android/ puede ayudarte.

Si tiene dos productFlavors (Production and Staging, por ejemplo)

Debe crear dos carpetas de recursos diferentes:

Proyecto / app / src / production / res / values ​​/ strings.xml

 <resources> <string name="root_url">http://production.service.com/api</string> </resources> 

Proyecto / app / src / staging / res / valores / strings.xml

 <resources> <string name="root_url">http://staging.service.com/api</string> </resources> 

Debe agregar este código siguiente dentro del android {}:

 productFlavors { production { applicationId "com.inaka.app.production" } staging { applicationId "com.inaka.app.staging" } } 

Es una buena idea tener iconos diferentes para diferentes productFlavors, sólo tiene que agregar el icono dentro de cada carpeta de recursos diferentes.

  • ¿Cómo ejecutar pruebas filtradas con etiquetas con pepino-jvm y gradle?
  • Generar aar o jar de la biblioteca de Android con dependencias
  • Uso de Kotlin en un módulo de biblioteca sin utilizarlo en el módulo de aplicaciones
  • ¿Por qué CardView y RecyclerView requieren minSdkVersion L?
  • Android Studio: Gradle sync failed: Proyecto: app declara una dependencia
  • La tarea Gradle no se ejecuta en Android Studio
  • Vista personalizada en una biblioteca aar local no accesible?
  • Gradle no puede resolver la dependencia de Play Services
  • Error de generación con Android Studio 3.0 Canary 4
  • ¿Cuál es la mejor práctica para compartir clases entre una aplicación de Wear y Android?
  • Android Gradle Apache HttpClient no existe?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.