【Android】Gadle改变应用名称(appName)的两种方法
2016-09-01 18:21
465 查看
Sodino1. 应用场景
2. 方法一:设置manifestPlaceholders
3. 方法二:定义resValue
4. 两者比较
5. 后记
对应的
因为gradle会根据
所以需要将
可以看出,
而
如果两者都声明了
原因是Gradle的资源合并功能中在权重上:
见下图,或点击链接Resource Merging
About Sodino
2. 方法一:设置manifestPlaceholders
3. 方法二:定义resValue
4. 两者比较
5. 后记
应用场景
App在debug/release编译环境下,想通过改变appName来给予区分。productFlavors增加各种编译参数时,比如更换
applicationId包名,appName也需要跟着变动。
方法一:设置manifestPlaceholders
1234567891011121314151617181920212223242526 | 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修改为:
1234 | <application android:icon="@mipmap/ic_launcher" android:label="${k_appName}" // 这里取k_appName> |
方法二:定义resValue
1234567891011121314151617181920212223242526 | 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 } }} |
resValue的定义自动生成
<string name="app_name">资源。
所以需要将
/res/values/strings.xml中默认生成的
<string name="app_name">HelloWorld</string>删除,避免出现重复的string资源定义错误。
1234 | 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. |
About Sodino
相关文章推荐
- 【Android】Gadle改变应用名称(appName)的两种方法
- Android应用名称使用module的app_name
- android下判断一个应用app是否是系统rom集成的方法
- android应用 获取本地指定类型文件 的两种最优方法
- android下判断一个应用app是否是系统rom集成的方法
- Android开发之查看应用包名package和入口activity名称的方法
- android百度地图定位,改变MyLocationOverlay默认图标(原始为蓝色点)(两种方法)
- android 百度地图改变MyLocationOverlay默认图标(两种方法)
- Android组件:radio、checkbox、下拉列表(两种方式)、日期;界面不显示appname
- Android开发之查看应用包名package和入口activity名称的方法
- Android相关浅析之根据packageName获取应用图标,应用名称等信息
- Android 把应用APK安装包放到system/app下的方法
- android应用 获取本地指定类型文件 的两种最优方法
- Android开发之查看应用包名package和入口activity名称的方法
- Django技巧:改变Admin中显示的应用(app)名称
- android应用 获取本地指定类型文件 的两种最优方法
- app中获取应用名称,版本等信息的方法
- android 调用应用的两种方法
- Android 4.4.2 动态添加JNI库方法记录 (二 app应用层)
- Android开发之查看应用包名package和入口activity名称的方法