studio para now must flavors flavor descargar configurar belong all android android-gradle

para - gradle version android studio



Cómo cambiar el nombre de la aplicación por tipo de compilación de Gradle (7)

Estoy tratando de encontrar una manera de poder cambiar el nombre de la aplicación de mi aplicación por tipo de compilación en gradle.

Por ejemplo, me gustaría que la versión de depuración tenga <APP_NAME>-debug y que la versión qa tenga <APP-NAME>-QA .

Estoy familiarizado con:

debug { applicationIdSuffix ''.debug'' versionNameSuffix ''-DEBUG'' }

Sin embargo, parece que no puedo encontrar un comando gradle para aplicar el cambio de la aplicación cuando está en el iniciador.


El nombre de la aplicación es visible por el usuario, y es por eso que Google lo alienta a mantenerlo en su archivo strings.xml. Puede definir un archivo de recursos de cadenas separado que contiene cadenas que son específicas de sus buildTypes. Parece que podrías tener un qa buildType personalizado. Si eso no es cierto, ignore la parte qa a continuación.

└── src ├── debug │   └── res │   └── buildtype_strings.xml ├── release │   └── res │   └── buildtype_strings.xml └── qa    └── res    └── buildtype_strings.xml


Necesitamos una solución para apoyar el nombre de la aplicación con localización (para múltiples idiomas). He probado con la solución @Nick Unuchek, pero la construcción ha fallado (no se ha encontrado @ string /). un pequeño cambio para arreglar este error: archivo build.gradle:

android { ext{ APP_NAME = "@string/app_name_default" APP_NAME_DEV = "@string/app_name_dev" } productFlavors{ prod{ manifestPlaceholders = [ applicationLabel: APP_NAME] } dev{ manifestPlaceholders = [ applicationLabel: APP_NAME_DEV ] } }

values ​​/ strings.xml:

<resources> <string name="app_name_default">AAA prod</string> <string name="app_name_dev">AAA dev</string> </resources>

values-en / strings.xml:

<resources> <string name="app_name_default">AAA prod en</string> <string name="app_name_dev">AAA dev en</string> </resources>

Manifest.xml:

<application android:label="${applicationLabel}" > </application>


Para respaldar las traducciones, haga esto:

1. eliminar la cadena "app_name"

2. agregar a gradle

buildTypes { admin { resValue "string", "app_name", "@string/app_name_admin" } release { resValue "string", "app_name", "@string/app_name_release" } debug { resValue "string", "app_name", "@string/app_name_debug" } }

3. Establezca el nombre de la aplicación en Manifiesto como "@ string / app_name"

4. Agregue a los valores strings.xml

<string name="app_name_admin">App Admin</string> <string name="app_name_release">App release</string> <string name="app_name_debug">App debug</string>


Para una solución más dinámica basada en gradle (por ejemplo, establezca un nombre de aplicación base en strings.xml de strings.xml una vez, y evite repetirse en cada strings.xml de combinación de tipo de compilación / tipo de strings.xml ), consulte mi respuesta aquí: https://.com/a/32220436/1128600


Puedes hacer esto con gradle:

android { buildTypes { release { manifestPlaceholders = [appName: "My Standard App Name"] } debug { manifestPlaceholders = [appName: "Debug"] } } }

Luego, en su AndroidManifest.xml ponga:

<application android:label="${appName}"/> <activity android:label="${appName}"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>

Nota: también funciona con productFlavors .


Puedes usar algo como esto

buildTypes { debug { applicationIdSuffix ''.debug'' versionNameSuffix ''-DEBUG'' resValue "string", "app_name", "AppName debug" } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' signingConfig signingConfigs.release zipAlignEnabled true resValue "string", "app_name", "AppName" } }

Puede usar @ string / app_name en los archivos AndroidManifest.xml.

Asegúrese de eliminar app_name de los valores / carpeta (no hay entrada con este nombre).


Si por "nombre de la aplicación", te refieres a android:label en <application> , la solución más simple es tener ese punto en un recurso de cadena (eg, android:label="@string/app_name" ), luego tener una versión diferente de ese recurso de cadena en un src/debug/ sourceset.

Puede verlo en este proyecto de ejemplo , donde tengo un reemplazo para app_name en src/debug/res/values/strings.xml , que se aplicará para compilaciones de debug . release versiones de release usarán la versión de app_name en src/main/ .