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


Estoy tratando de encontrar una manera de poder cambiar el nombre de la 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 la versión de qa tenga <APP-NAME>-QA.

Estoy familiarizado con:

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

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

Author: appersiano, 2014-07-16

7 answers

Si por "nombre de la aplicación", quiere decir android:label en <application>, la solución más simple es tener ese punto en un recurso de cadena (por ejemplo, android:label="@string/app_name"), entonces tener una versión diferente de ese recurso de cadena en un conjunto de fuentes src/debug/.

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

 114
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-11 17:36:34

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"
    }
}

Puedes usar @string/app_name en AndroidManifest.archivos xml.

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

 106
Author: irscomp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-14 10:17:01

Puedes hacer esto con gradle:

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

Luego en su AndroidManifest.xml poner:

<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.

 36
Author: Albert Vila Calvo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-06 15:43:16

Para apoyar las traducciones haga esto:

1. eliminar cadena"app_name"

2. añadir 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. Establecer el nombre de la aplicación en el manifiesto como "@ string / app_name"

4. Añadir a cadenas.valores 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>
 18
Author: NickUnuchek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-28 09:18:30

El nombre de la aplicación es visible para el usuario, y es por eso que Google te anima a mantenerlo en tus cadenas.archivo xml. Puede definir un archivo de recursos de cadena independiente que contenga cadenas específicas para sus tipos de compilación. Suena como si tuvieras un buildType personalizado qa. Si eso no es cierto, ignore la parte de control de calidad a continuación.

└── src
    ├── debug
    │   └── res
    │       └── buildtype_strings.xml
    ├── release
    │   └── res
    │       └── buildtype_strings.xml
    └── qa
        └── res
            └── buildtype_strings.xml
 12
Author: Krylez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-16 16:49:21

Necesitamos una solución para admitir 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 encuentra @string/). un pequeño cambio para corregir este error: construir.archivo 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 ]
        }

    }

Valores\cadenas.xml:

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

</resources>

Values-es\strings.xml:

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

</resources>

Manifiesto.xml:

<application
    android:label="${applicationLabel}" >
</application>
 7
Author: HungNM2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-27 10:32:56

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

 3
Author: Steffen Funke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:03:05