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.

  • ¿Por qué debo incluir una dependencia de gradle como `@ aar`
  • No se ha establecido la raíz SDK de App Engine. Asegúrese de establecer la variable de entorno 'APPENGINE_HOME' propiedad del sistema 'appengine.sdk.root'!
  • ¿Cómo puedo añadir un submódulo java gradle a mi módulo Android?
  • ¿Por qué necesitamos aplicar plugin google-services en el fondo para Firebase SDK?
  • Gradle No se pudo encontrar el método compile () para los argumentos
  • Dependencias de Gradle con Travis CI en proyecto Android
  • AndroidManifest.xml para Gradle instrumentTest
  • 'FlavorDimension' será eliminado por Android Gradle Plugin 2.0, ha sido reemplazado por 'dimension'
  • Android Studio Sigue diciendo No se pudo completar la ejecución de Gradle
  • Android: ClassNotFoundException al usar el proyecto de biblioteca que tiene dependencias de gradle
  • ¿Cómo excluir la carpeta res de los desarrolladores de gradle build?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.