教你一招APP如何快速定制马甲包
作者:互联网
废话不多说,给我上·····
按照本文进行定制马甲包的好处:
- 马甲包和主包可以进行同步打包,一键生成
- 不会增加apk的大小,不同的包打进对应的资源
- 不影响主线的开发(无须拉分支、版本迭代时增加的需求,也无须在写一遍)
- 在各个马甲包的母包上,可以利用一些加固平台,进行渠道分包
关于马甲包的方式,会从最简单的方式开始介绍:
最简单的方式
- AndroidManifest.xml的配置
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL}" />
- app gradle的配置
android {
defaultConfig {
flavorDimensions "versionCode"
}
productFlavors {
GS1408 {//默认母包
applicationId = "com.gs"
manifestPlaceholders = [app_name: "主包",
icon : "@mipmap/logo",
style : "@style/SplashAppTheme"
]
}
JSQ{
applicationId = "com.gsjsq"
manifestPlaceholders = [app_name : "马甲包1",
icon : "@mipmap/logo",
style : "@style/SplashAppTheme",
]
}
BJ {
applicationId = "com.gsbj"
manifestPlaceholders = [app_name : "马甲包2",
icon : "@mipmap/logo",
style : "@style/SplashAppTheme",
]
}
productFlavors.all { flavors ->
manifestPlaceholders.put("UMENG_CHANNEL", name)
}
}
}
- 使用
记的使用前先编译
<application
android:allowBackup="true"
android:icon="${icon}"
android:label="${app_name}"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="${icon}"
android:supportsRtl="true"
android:theme="${style}"
tools:replace="android:label">
//tools:replace="android:label" 别忘了这个需要配置
</application>
到这里已经完成多名多icon了,这里只是替换了不同app名字、style主题、包名
这种方式没有替换app内部的任何布局或资源。这种肯定不行的,市场审核不一定通过啊。
马甲包正确的打开方式(替换app内部的资源)
上面的完成后,咱们继续,开始发功
- 在src目录下创建存放马甲包资源的文件夹(需要跟上方app gradle配置的一样)
JSQ、BJ。
注意:GS1408是母包,测试时把它隐藏、或者不要放到第一位,as编译运行时默认取的第一个渠道。
2. 再放入不同渠道的资源时,切记资源一定要和主包命名一样
这样在你编译时打包时,AS在打包时会根据不同的渠道把不同马甲包的资源打进来。
图片的使用:
// 跟正常的使用没区别
<ImageView
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="wrap_content"
android:src="@mipmap/home_select"
android:layout_height="wrap_content"/>
到这里就完成了马甲包的定制。
到这里的操作,都是默认指,资源都在一个app下的情况。
另外两种情况:
1.资源都在同一个lib_res下,app直接依赖lib_res
- app下不要使用mipmap
- mipmap全部放到项目所依赖的lib
- app gradle依旧按照上文的配置productFlavors
- lib的gradle,也要加上多渠道 productFlavors的配置,还有清单文件
lib的AndroidManifest.xml
lib的gradle
注意:app的gradle下配置几个,这里也要配置几个,否则会报错。
不同的是,这里只要声明就可以,不需要具体在配置,如下面代码配置:
defaultConfig {
flavorDimensions "versionCode"
}
productFlavors {
// GS1408 {
// }
MJ {
}
JSQ {
}
productFlavors.all { flavors ->
manifestPlaceholders.put("UMENG_CHANNEL", name)
}
}
- 其他和上文介绍也要的一样
2.组件项目的马甲包配置
如下图:
关系:
- modle_开头的三个模块会依赖公共 lib_res
- app会依赖modle_开头的三个模块
马甲包配置:
上文介绍的配置依旧保留
- 马甲包的资源还是放到lib_res下
- modle三个模块的gradle,都加上多渠道productFlavors配置,和
1.资源都在同一个lib_res下,app直接依赖lib_res
配置一样
切记!切记!切记!
lib_res、modle下的productFlavors
配置是一样的多渠道的先后顺序一定要和app的productFlavors
配置顺序一样
这样才更好的方便你测试
总结
- app gradle 配置
productFlavors
- 图片资源公共目录lib_res,也要配置
productFlavors
- app模块modle配置
productFlavors
- 不同马甲包的名字、logo等是放到app gradle 配置
productFlavors
多渠道中的 productFlavors
多渠道名字的配置、顺序一样要保持
- 清单文件别忘配置
- 资源图片/或者color/或者drawable下的shape等等,
命名一定要一样
- app下不再使用mipmap
- 创建马甲包对应的文件夹,在src目录下。和多渠道名字保持一致
如果对你有帮助,请帮忙点个赞吧!
如有什么描述错误的请指出,我会及时纠正!
Thanks
标签:lib,APP,配置,productFlavors,gradle,马甲,一招,app 来源: https://blog.csdn.net/qq_34501274/article/details/100136385