制作Android马甲包最简单的方式就是使用 productFlavors 机制。
本文就是在productFlavors机制的基础上制作的马甲包,每个马甲只需要
-
在build.gradle文件中配置一下包名、各种key、签名文件
-
配置启动页、logo、app名等资源
-
配置服务器域名、微信分享回调Activity等代码
此外,代码、资源文件等全部都天然支持差异化功能
1. 原理
如下面代码所示,我们在build.gradle中使用productFlavors机制可以创建两个flavor——hdd以及jinyouzi,这样在Build Variant中就可以通过hddDebug、hddRelease、jinyouziDebug、jinyouziRelease来编译对应马甲的debug、release包。
注意,在此文章中hdd是基线包,jinyouzi是马甲包。
android {
defaultConfig {
applicationId "com.xxx.xxxxxxx.app"
flavorDimensions "product"
}
productFlavors{
hdd {
dimension "product"
}
jinyouzi {
dimension "product"
}
}
}
配置了flavor之后,我们在app/src下面可以创建与main目录同级的hdd、jinyouzi目录。这两个目录中的资源文件、代码在编译对应的flavor时可以加入编译。也就是说hdd = ['src/main', 'src/hdd'],jinyouzi = ['src/main', 'src/jinyouzi']。
-
对于资源文件来说,flavor下的资源会“覆盖”main下面的资源,也就是flavor的优先级高——不知道官方怎么称呼,我借用Android系统开发中的名词,称之为overlay机制。
其实这点与apk的编译流程有关,在 Shrink, obfuscate, and optimize your app - Merge duplicate resources中有提到:
Gradle merges duplicate resources in the following cascading priority order:
Gradle 会按以下级联优先顺序合并重复资源:
Dependencies → Main → Build flavor → Build type
依赖项 → 主资源 → 构建flavor → 构建类型
For example, if a duplicate resource appears in both your main resources and a build flavor, Gradle selects the one in the build flavor.
例如,如果某个重复资源同时出现在主资源和构建flavor中,Gradle 会选择构建flavor中的重复资源。
-
对于代码文件来说,如果flavor和main下有代码文件名称一样,编译时会报错。所以需要把各个flavor有差异的文件放到各个flavor下,而不是main下。
这就是马甲包的资源、代码管理的关键点。 这段关键点一头雾水没关系,后面具体配置的时候就会体会到。
此外,各个flavor原本就能配置不同的applicationId、版本号、友盟统计分享等key以及签名文件等,具体代码在后面会谈到。
2. 具体需求
我们先下面会从以下几个方面说明实际需求需要修改的位置:
-
applicationId、版本号
-
资源文件
-
各种key的配置
-
代码文件
-
签名配置
2.1 applicationId、版本号
applicationId、版本号可以在flavors中直接进行配置:
build.gradle:
android {
...
productFlavors{
hdd {
dimension "product"
applicationId "com.xxx.xxxxxxx.app"
versionCode 100080
versionName "1.0.8"
}
jinyouzi {
dimension "product"
applicationId "com.xxx.flavor.app"
versionCode 101030
versionName "1.1.3"
}
}
}
applicationId在AndroidManifest.xml中也需要使用到,这

文章介绍了如何利用Android的productFlavors机制创建马甲包,涉及配置包名、资源、代码、签名文件以及服务器域名等,强调了资源的覆盖机制和代码管理。通过在build.gradle中设置flavorDimensions和productFlavors,可以为每个马甲包定制不同的应用ID、版本号和各种key,同时通过配置AndroidManifest.xml实现微信分享回调等活动。
1539

被折叠的 条评论
为什么被折叠?



