AndroidProductFlavor的使用详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AndroidProductFlavor的使⽤详解
⽬录
前⾔
productFlavors
flavorDimensions多纬度
前⾔
最近⼀直在学习Android Gradle 相关的知识点,今天刚好看到了 ProductFlavor 这节,ProductFlavor 表⽰产品风味,Google 相关的⽂档可以看 ,产品风味这词起的还是挺有意思的,乍看上去我⼀时半会也不理解这是⼲嘛的,如果说是⽤于区分打包的那么我 gradle ⽂件⾥的 buildTypes 不是就已经够⽤了吗,所以我花了⼀点时间重新看了下,按照我的理解如果你只是中⼩型的项⽬不涉及区分不同地区⽤户打不⽤的包的那么 ProductFlavor 基本上也没什么⽤处,但如果你项⽬⾥要区分国内版和国外版甚⾄还要根据⽤户是否是VIP会员加上收费和免费的版本,这种情况下就会出现国内收费、免费国外收费、免费的版本,在极端点,我收费和免费的版本在相同页⾯上甚⾄显⽰的UI布局和icon图标资源都不⼀样,这种情况⼜该怎么处理
呢,ProductFlavor 的出现就⾮常友好的帮助我们开发者解决了上述的版本区分。
productFlavors
productFlavors 的⽤法很简单,主要是⽤来多渠道打包使⽤,直接在 android 闭包下定义 productFlavors 就可以了,在我的例⼦中我的APP定位为收费和免费版本,所以我需要在 2 处定义我的“产品风味”也就是我要打包的渠道(收费和免费版本的两个不同APP的渠道),注意下在⽬前的AS中如果你仅仅只是定义了代码2 ,那么在构建的时候必然会报 3 处的错误,没有定义产品纬度,所以为了解决这个问题,我们在代码1处定义了⼀个“是否付费 isPaying ”的纬度。
如图,在我们定义好了是否付费的纬度以及付费和免费的产品风味之后,你会发现现在构建出来了4个构建变体,也就是在free和charge风味下各⾃构建了debug和release的变体,现在我们有了两个不同的风味,如果我想安装到⼿机上是两个不同的APK⼜改怎么处理呢?⾸先我们的包名就不能相同,在free和charge闭包下定义:
productFlavors{
free{
applicationId 'com.example.gradle.free'
}
charge{
applicationId 'com.example.gradle.charge'
}
}
根据上⾯的配置最后在⼿机上跑的是两个APK,这个我已经验证过了,尽管如此还是没体现出差异化,我们接下来改变下代码的逻辑,在他们的app名以及⾸页修改下
看我们的红框处,我已经将他们的app的名称全改掉了,怎么处理的呢?
productFlavors{
free{
applicationId 'com.example.gradle.free'
resValue "string",'appName','免费版'
}
charge{
applicationId 'com.example.gradle.charge'
resValue "string",'appName','收费版'
}
}
⾸先我还是修改了 productFlavors 中的代码,定义了⼀个 resValue,这个参数你可以理解为在不同的风味下定义标签的意思,⽐如说我在代码中分别为 free 和 charge 风味定义了 resValue 标签,那么在构建他们变体的时候就可以引⽤到这个标签
如图,我还新定义了两个⽂件夹“free”和“charge”,如果你想做差异化的话就必须根据产品风味来定义⽂件夹,这⾥因为应⽤的名称是在清单⽂件⾥配置的,所以各⾃copy了⼀份,我反正理解的是既然是差异化那么从main⾥⾯将有差异的⽂件copy出来修改就可以了,当然了⾥⾯的包名,路径之类的还是得要⼀致的,讲到这其实⼤家也就明⽩了,如果你想在不同的APP页⾯⾥做差异化,那么就按照这个套路来就可以了,所以“修改⾸页(MainActivity)”的任务就交给⼤家了,⾃⼰动⼿体会下。
flavorDimensions多纬度
什么是多纬度,⽐说是否付费是⼀个纬度,国家是⼀个纬度,在上图中我⼜定义了⼀个 nation 纬度,注意如果你定义了⼀个纬度那么必须要使⽤到它,在各个产品风味下通过 dimension 来决定你的风味是使⽤的哪⼀个纬度,free 和 charge使⽤了isPaying ,china 和 france 使⽤了 nation,那么多纬度的作⽤也就是为了更加精细的区分你的APP,如 3 通过这种⽅式,我完全可以可以打包出不同国家的差异化APP,是不是很灵活呢,不过⼀般情况下也⽤不到那么精细,不然这个项⽬光是维护就很头疼,好,到最后我们可以得出⼀个公式【纬度1的产品风味数量】 * 【纬度2的产品风味数量】 * buildType数量 = 最终的APK变体数量。
以上就是Android ProductFlavor的使⽤详解的详细内容,更多关于Android ProductFlavor的使⽤的资料请关注其它相关⽂章!。