如何更改每个Gradle构建类型的应用程序名称

时间:2014-07-16 15:52:37

标签: android android-gradle

我正在尝试找出一种方法,可以在gradle中更改每个构建类型的应用程序的应用程序名称。

例如,我希望调试版本为<APP_NAME>-debug,qa版本为<APP-NAME>-QA

我熟悉:

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

但是,我似乎无法在启动器中找到应用更改应用程序的gradle命令。

8 个答案:

答案 0 :(得分:134)

如果使用&#34;应用名称&#34;,则表示android:label上的<application>,最简单的解决方案是将该点放在字符串资源上(例如android:label="@string/app_name") ,然后在src/debug/源集中拥有该字符串资源的不​​同版本。

您可以在this sample project中看到app_namesrc/debug/res/values/strings.xml替换debugrelease将用于app_name版本。 src/main/版本将使用{{1}}中的{{1}}版本。

答案 1 :(得分:47)

您可以使用gradle执行此操作:

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

然后在AndroidManifest.xml放置:

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

注意:它也适用于productFlavors

答案 2 :(得分:27)

要支持翻译,请执行以下操作:

1。删除字符串“app_name”

2。添加到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. 将Manifest中的应用名称设置为“@ string / app_name”

4. 添加到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>

答案 3 :(得分:12)

应用名称是用户可见的,这就是Google鼓励您将其保留在strings.xml文件中的原因。您可以定义一个单独的字符串资源文件,其中包含特定于buildTypes的字符串。听起来您可能有自定义qa buildType。如果不成立,请忽略下面的qa部分。

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

答案 4 :(得分:8)

我们需要一个解决方案来支持具有本地化的应用名称(适用于多语言)。 我已经使用@Nick Unuchek解决方案进行了测试,但构建失败(未找到@ string /)。一点点修改来解决这个bug: 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 ]
        }

    }

值\ strings.xml中:

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

</resources>

值烯\ 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>

答案 5 :(得分:2)

您可以在不同的文件夹中使用strings.xml,请参见Android separate string values for release and debug builds

因此,创建此文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Your app name</string>
</resources>

然后将其粘贴到app\src\debug\res\values\app\src\release\res\values\文件夹中。在调试和发布文件中替换“您的应用程序名称”。从app_name文件夹中的strings.xml中删除app\src\main\res\values\项。

AndroidManifest中,您将拥有相同的

<application
    android:label="@string/app_name"
    ...

完全没有变化。即使您添加了带有AndroidManifest文件和strings.xml的库。

答案 6 :(得分:0)

您可以采取多种方式。

您可以在应用程序级别manifestPlaceholders中创建resValue OR build.gradle。例如

buildTypes {
     release {
          ...
          manifestPlaceholders = [appLabel: "My App"]
          //resValue "string", "appLabel", '"My App"'
     }
     debug {
          ...
          manifestPlaceholders = [appLabel: "My App - Debug"]
          //resValue "string", "appLabel", '"My App - Debug"'
     }
}

OR

如果您有productFlavors,则可以在那里创建

flavorDimensions "env"
productFlavors {
    dev {
        dimension "env"
        ...
        manifestPlaceholders = [appLabel: "My App - Development"]
        //resValue "string", "appLabel", '"My App - Development"'
    }
    prod {
        dimension "env"
        ...
        manifestPlaceholders = [appLabel: "My Awesome App"]
        //resValue "string", "appLabel", '"My Awesome App"'
    }
}

然后在AndroidManifest.xml中使用manifestPlaceholders,只需按以下方式更改android:label="${appLabel}" ,如果您使用resValue,只需更改{ {1}}

android:label=@string/appLabel

注意:请确保同时更改<application ... android:label="${appLabel}"> //OR `android:label=@string/appLabel` <activity ... android:label="${appLable}"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 类别的android:lable中的<activity>。如果不需要在LAUNCHER中使用android:label,只需删除它即可。


如果您不想直接添加<activity>,则可以添加所选build.gradle的{​​{1}}。例如

添加

values/string.xml

ProductFlavors

<string name="appLabel">My App - Development</string> 

app/src/dev/res/values/string.xml

答案 7 :(得分:-1)

正如作者要求在 Gradle 中执行此操作一样,我们可以假定他想在脚本中而不是在配置文件中执行此操作。由于 Android Studio Gradle 在去年(〜2018年)都已进行了重大更新和修改,因此上述所有其他答案似乎过于扭曲。简便的方法是将以下内容添加到您的app/build.gradle中:

android {
    ...
    buildTypes {
        ...
        // Rename/Set default APK name prefix (app*.apk --> AwesomeApp*.apk)
        android.applicationVariants.all { variant ->
            variant.outputs.all { output ->
                def appName = "AwesomeApp"
                outputFileName = appName+"-${output.baseName}-${variant.versionName}.apk"
        }
    }
}