AndroidGadle改变应用名称(appName)的两种方法
Posted Sodino
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AndroidGadle改变应用名称(appName)的两种方法相关的知识,希望对你有一定的参考价值。
应用场景
- App在debug/release编译环境下,想通过改变appName来给予区分。
productFlavors
增加各种编译参数时,比如更换applicationId
包名,appName也需要跟着变动。
方法一:设置manifestPlaceholders
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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
修改为:
1 2 3 4 | <application android: icon= "@mipmap/ic_launcher" android: label= "$k_appName" // 这里取k_appName > |
方法二:定义resValue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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资源定义错误。
1 2 3 4 | 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
定义方法二的实现
可以看出,manifestPlaceholders
属于字符串直接替换赋值,当应用有 多语言 切换时,应用名是仍然会是固定的”Debug哈啰”,不会变化。
而resValue
定义显得委婉一些,只要res/values-en/strings.xml
中有<string app_name>
的外语定义,是会跟随系统的语言变化而切换app名称的。
后记
本文同时给出了buildTypes
和productFlavors
中的示例,但在实际处理中,请根据实际情况自己选择使用。
如果两者都声明了app_name
,则最后以buildTypes
的设定为准。
原因是Gradle的资源合并功能中在权重上:
1 |
BuildType > Flavor > main > Dependecies.
|
见下图,或点击链接Resource Merging
以上是关于AndroidGadle改变应用名称(appName)的两种方法的主要内容,如果未能解决你的问题,请参考以下文章
获取应用版本号,版本名称,包名,AppName,图标,是否是系统应用,获取手机中所有应用,所有进程