android多渠道包(风味包)——安卓gradle

目录
一、前言
二、我们需要解决的问题
1、所要达到的效果
2、需要解决的问题
三、编码时刻
四、效果演示
五、写在最后

一、前言

经过前几篇 安卓gradle 文章的介绍,童鞋们应该对 安卓gradle 更加熟悉了。
1、defaultConfig——安卓gradle
2、buildTypes——安卓gradle
3、flavorDimensions和productFlavors——安卓gradle

这几篇文章中,我们或多或少的提到 “渠道包” 和 “风味包” ,今天我们就来分享下,如何机遇一套代码,编译出多个 “可以并存” 且 “存在有些许差异” 的apk包。

完整代码:github传送,如果对你有帮助,给个star吧。

二、我们需要解决的问题

我们先理清楚做这件事情所要达到的效果 和 中间存在的问题

1、所要达到的效果

  • 一套核心代码编译出多个 “可以并存” 的apk包
  • 可以有差异化,eg:logo、app名字、签名、统计渠道 等可以根据不同的apk有些许不同
  • 易维护,耦合度低

2、需要解决的问题

根据我们需要想要达到的效果,我们需要解决以下几个问题

  • 能够配置多个 applicationId
  • 能够动态的设置 AndroidManifest.xml 中的数据
  • 能够使用不同的资源,但又不污染核心代码
  • 能够实现差异化逻辑

接下来我们就来解决这些问题,达到我们预期的效果

三、编码时刻

1、建立 维度 和 风味

对 维度 和 风味 陌生的童鞋,可以移步查看小盆友的另一片博文:flavorDimensions和productFlavors——安卓gradle

我们进入应用级的 build.gradle 中,增加以下代码

android {
    // 省略其他代码...

	// 创建风味维度
    flavorDimensions('abi')
    productFlavors {
       	x86 {
       		// 创建维度
            dimension 'abi'
        }

        armV7 {
            dimension 'abi'
        }
    }
}

至此,我们可以编译出两个apk包:“x86” 和 “armV7”。从编译器的提示,我们也可以看出已经有 四种变体

因为 “x86” 和 “armV7” 两个风味各自都默认有 “release” 和 “debug” 两种编译类型,所以 2x2 则有 四种变体。

2、让两种风味并存

我们需要给他们各自定一个 applicationId ,这样才可以并存不冲突。

android {
    // 省略其他代码...

	// 创建风味维度
    flavorDimensions('abi')
    productFlavors {
       	x86 {
       		// 创建维度
            dimension 'abi'

			// 配置 风味的applicationId
			applicationId 'com.zinc.bear'
        }

        armV7 {
            dimension 'abi'
            
			applicationId 'com.zinc.shark'
        }
    }
}

这样第一个问题解决了!!?很简单吧,继续前行。 但此时运行起来,是两个完全相同的apk,还没进行差异化的配置。

3、动态的设置 AndroidManifest.xml 中的数据

通过使用 manifestPlaceholders 达到这一效果

首先还是在 build.gradle 中添加以下代码

productFlavors 
  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值