转自:http://blog.csdn.net/myliuyx/article/details/52223066
应用场景
- 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
About Sodino