多应用多渠道打包问题
最近有个需求要求使用一套代码逻辑然后通过包名的区分进而形成多个app,当时想到了productflavors。但是又有需求需要集成友盟统计,这就有点难搞了。经过翻找资料之后发现,gradle是真的强大。我们可以通过构建变体(buildvariant)来实现这个需求。
1、buildTypes
在编译的时候,buildTypes 默认构建debug和release版本。
debug {
minifyEnabled false
multiDexEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled false
multiDexEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
2、自定义buildTypes
改变buildTypes
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
demo1.initWith(buildTypes.debug)
demo1{
applicationIdSuffix ".demo1"
}
demo2.initWith(buildTypes.debug)
demo2{
applicationIdSuffix ".demo2"
}
}
这样我们就可以在这里进行包名的修改,资源的配置。同时还要在src文件夹下面,main同级目录中,创建命名一致的文件夹,里面存放你要用到的资源文件。
如图:
这样的话我们就可以解决第一个需求了。然后我们可以对 productflavors 进行配置,完成友盟统计问题。
productFlavors {
google {}
huawei {}
xiaomi {}
}
同时在这里还要说一下,在 Android studio 3.0新增了一个 dimension,也就是 flavorDimensions,我把它理解成一个标记。
flavorDimensions "market"
productFlavors {
google { dimension "market" }
huawei { dimension "market" }
}
这个是单个,也可以进行多个编译
flavorDimensions "market","demo"
productFlavors {
google { dimension "market" }
huawei { dimension "demo" }
}
就这样解决了这个需求。还有几个需要注意的点:
1、在运行的时候可以通过选择 Build Variant。进而运行你想跑的app(AS左下角Build Variants)
2、记得把 buildType 中 initWith.release 改成 debug 方便调试
3、在打包签名的时候可以选择 Build Type 进行不同的应用。