参考学习链接:
https://developer.android.google.cn/studio/build/index.html
总所周知,使用Gradle可以使用productFlavors构建不同的变体,根据不同的配置构建出不同app版本。可以通过使用如下代码打包出这四种不同的app,并且每个app的图标都不一样,
productFlavors {
huawei{
manifestPlaceholders = [ app_icon: "@drawable/icon_huawei"]
}
vivo{
manifestPlaceholders = [ app_icon: "@drawable/icon_vivo"]
}
yingyongbao{
manifestPlaceholders = [ app_icon: "@drawable/icon_yingyongbao"]
}
xiaomi{
manifestPlaceholders = [ app_icon: "@drawable/icon_xiaomi"]
}
}
配置了上面了以后还需要在Manifest.xml中配置tools:replace=”android:icon 添加在application标签中,在根节点中需要加入tools的引用xmlns:tools=”http://schemas.android.com/tools” 这里replace 具体含义以及其他属性详见 manifest 合并多个清单文件,然后我们在引入我们配置的app_icon 属性android:icon="${app_icon}"
这样既可解决打包出的不同apk的不同引用图标。
还有一种方式则是在buildTypes 中不同的编译类型如debug中使用resValue的方式来定义,
debug {
resValue("string", "app_nameV", "appDebugName")
}
需要注意的是你的String.xml中不能包含定义的这个app_nameV名字,不然会报错,这种写法表示在你构建的版本中会自己生成一个名字为app_nameV,值为appDebugName的资源文件,注意类型string不能是大写的S,否则会报错。然后再manifest中直接使用@string/app_nameV 即可引用到你声明的这个字段名称,android:label="@string/app_nameV"
这样既可,还需要主要的是也需要使用tools:replace="android:icon,android:label"
这样同时替换了label和icon 。
完整的写法
<application
android:name=".Application"
android:allowBackup="true"
android:icon="${app_icon}" //你定义的app_icon
android:label="@string/app_nameV" //通过resValue定义的app_nameV字段
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:icon,android:label"> //替换icon 和label
还可以这样写 在buildType中 debug类型(打个比方)
debug {
manifestPlaceholders = [app_icon: "@drawable/ic_launcher_ky_beta",label: "@string/app_name_debug"]
}
这里使用了manifestPlaceholders 同时在里面设置了app_icon和label 要resValue了。 新的为android:label=”${label}” 这样就ok了。可以配置不同的图标和应用名称,不过需要注意的是manifest合并的时候会出现的一些问题,包含有其他第三方库的时候可能会出现的一些冲突,可以看下文章开头的链接学习一下。ヾ( ̄▽ ̄)Bye~Bye~