【Android】Gadle改变应用名称(appName)的两种方法

应用场景

  • App在debug/release编译环境下,想通过改变appName来给予区分。
  • productFlavors增加各种编译参数时,比如更换applicationId包名,appName也需要跟着变动。

方法一:设置manifestPlaceholders

 
    
android {
... ...
defaultConfig{
... ...
manifestPlaceholders = [k_appName : "哈啰"] // 设置默认的k_appName
}
// 依据debug/release变动的话设置如下
buildTypes {
debug {
manifestPlaceholders = [k_appName : "Debug哈啰"]
}
}
// 依据flavors变动的话设置如下
productFlavors {
autoTest {
manifestPlaceholders = [k_appName : "AT哈啰"]
}
appStore {
// do nothing
}
}
}

对应的AndroidManifest.xml需要对android:label修改为:

 
    
<application
android:icon="@mipmap/ic_launcher"
android:label="${k_appName}" // 这里取k_appName
>


方法二:定义resValue

 
    
android {
... ...
defaultConfig{
... ...
resValue "string", "app_name", "哈啰" // 设置默认的app_name
}
// 依据debug/release变动的话设置如下
buildTypes {
debug {
resValue "string", "app_name", "Debug哈啰"
}
}
// 依据flavors变动的话设置如下
productFlavors {
autoTest {
resValue "string", "app_name", "AT哈啰"
}
appStore {
// do nothing
}
}
}

因为gradle会根据resValue的定义自动生成<string name="app_name">资源。
所以需要将/res/values/strings.xml中默认生成的<string name="app_name">HelloWorld</string>删除,避免出现重复的string资源定义错误。

 
    
Error:Execution failed for task ':app:mergeAutoTestDebugResources'.
> [string/app_name] D:\github\HelloWorld\app\src\main\res\values\strings.xml
[string/app_name] D:\github\HelloWorld\app\build\generated\res\resValues\autoTest\debug\values\generated.xml:
Error: Duplicate resources

两者比较

直接用APK反编译后的图来对比吧:

左边是manifestPlaceholders方法一的实现;右边是resValue定义方法二的实现
comparecompare

可以看出,manifestPlaceholders属于字符串直接替换赋值,当应用有 多语言 切换时,应用名是仍然会是固定的”Debug哈啰”,不会变化。
resValue定义显得委婉一些,只要res/values-en/strings.xml中有<string app_name>的外语定义,是会跟随系统的语言变化而切换app名称的。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值