一, 前言
最近前端框架似乎又火起来了, 各大平台纷纷推出自家框架, 各种跨平台方案, 在这百家争鸣, 万花齐放之下, 最终谁能一统天下呢? 我们拭目以待吧! 接下来我还是先继续学习下 Android, 然后去学习 xxx, 再去学习 xxx, 再去学习 xxx, 再去学习 xxx, 再去学习 xxx...
二, 多渠道打包
今天就学习下多渠道打包; 对于 Android 开发者来说, 估计都懂得多渠道打包, 就算不懂的随便网上搜一搜相关的文章一堆了; 不过我还是喜欢总结归纳, 以后我可以打开回顾下. 多渠道莫过于应用发布到不同的市场, 给不同的人去使用;
多渠道打包的好处:
(1) 方便开发, 测试
开发过程中只使用开发环境渠道, 发布时切换正式渠道; 这样大大节约了开发时间, 也便于后续的代码管理;
(2) 方便统计不同渠道数据, 运营维护必备
多渠道打包发布到各大应用市场后, 可以统计不同渠道的流量等数据, 给 App 后续发展提供了方向;
(3) 根据不同渠道的客户需要, 开发相应的功能
假如现在有 A,B,C 三个渠道的大客户, 他们都在使用自家的 App, 但都有不同的需求, 那么作为程序猿总不能复制成 3 个项目工程, 然后再改不同的需求吧, 万一后续还有很多其他不同渠道呢, 哈哈! 所以多渠道打包就派上用场了!
三, 步骤
在 App 目录下的 build.gradle 设置 productFlavors:
下面我添加了 huawei,xiaomi,qh360,baidu,wandoujia,qq 这六个渠道; buildConfigField 就是自定义的渠道类型 int, 当然也可以是 String 类型等, CHANNEL_VALUE 就是自定义的 key-value 值; 这些在代码里都可以利用 BuildConfig 去获取对应的值以至于判断不同渠道.
- Android {
- compileSdkVersion 27
- defaultConfig {
- applicationId "com.chessluo.channelpackagedemo"
- minSdkVersion 14
- targetSdkVersion 27
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
- //
- flavorDimensions "versionCode"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
- /** 在 build.gradle 设置 productFlavors */
- productFlavors {
- xiaomi {
- buildConfigField "int", "CHANNEL_TYPE", "1"
- manifestPlaceholders = [
- CHANNEL_VALUE: "小米"
- ]
- }
- qh360 {
- buildConfigField "int", "CHANNEL_TYPE", "2"
- manifestPlaceholders = [
- CHANNEL_VALUE: "360"
- ]
- }
- baidu {
- buildConfigField "int", "CHANNEL_TYPE", "3"
- manifestPlaceholders = [
- CHANNEL_VALUE: "百度"
- ]
- }
- wandoujia {
- buildConfigField "int", "CHANNEL_TYPE", "4"
- manifestPlaceholders = [
- CHANNEL_VALUE: "豌豆荚"
- ]
- }
- qq {
- buildConfigField "int", "CHANNEL_TYPE", "5"
- manifestPlaceholders = [
- CHANNEL_VALUE: "应用宝"
- ]
- }
- huawei {
- buildConfigField "int", "CHANNEL_TYPE", "6"
- manifestPlaceholders = [
- CHANNEL_VALUE: "华为"
- ]
- }
- }
- }
配置好 productFlavors 后, 我们就可以在业务代码里面获取刚刚配置好的渠道值了:
于是将 BuildConfig 的属性值全都获取展示出来了, 关于前面提到的优点都能实现了吧
- public class MainActivity extends AppCompatActivity {
- private TextView mTv;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mTv = findViewById(R.id.tv);
- initData();
- }
- private void initData() {
- /** 读取 BuildConfig 配置值 */
- boolean isDebug = BuildConfig.DEBUG;// 是否 debug
- String applicationId = BuildConfig.APPLICATION_ID;//applicationId
- String buildType = BuildConfig.BUILD_TYPE;// 构建类型. 要么是 debug 版, 要么是 release 版; 可通过 Build Variants 选择打包类型;
- String flavor = BuildConfig.FLAVOR;// 对应渠道名
- int versionCode = BuildConfig.VERSION_CODE;// 版本号
- String versionName = BuildConfig.VERSION_NAME;// 版本名
- int channelType = BuildConfig.CHANNEL_TYPE;// 通过 buildConfigField 自定义的渠道值
- mTv.setText("是否 debug:"+isDebug+"\r\n"
- +"applicationId:"+applicationId+"\r\n"
- +"构建类型:"+buildType+"版 \ r\n"
- +"渠道名:"+flavor+"\r\n"
- +"版本号:"+versionCode +"\r\n"
- +"版本名:"+versionName+"\r\n"
- +"通过 buildConfigField 自定义的渠道值:"+channelType);
- }
- }
开始打包了, 还是原来的打包方式, 只是多了不同渠道而已, 要是想全部一起打包就选中全部
多渠道打包. PNG
打包好之后↓
多渠道打包 1.PNG
当然 如果我要测试某个渠道版的, 每次都这样打包测试也不方便, 于是还有一种方法
绑定签名文件
- signingConfigs {
- appkey {
- //ChessluoStudy.jks 文件放在项目根目录下
- storeFile file('../ChessluoStudy.jks')
- storePassword "123456"
- keyAlias "ChessluoStudy"
- keyPassword "123456"
- }
- }
- buildTypes {
- debug {
- minifyEnabled false
- signingConfig signingConfigs.appkey
- }
- release {
- minifyEnabled false
- signingConfig signingConfigs.appkey
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
绑定好自家的签名文件后, 就可以直接开发工具运行编译到模拟器或手机里调试了, 多么方便啊!
那么问题又来了, 我怎么调试运行某个渠道呢? 那就请看下图吧!
多渠道打包 2.PNG
每个渠道包都有 Debug 版和 Release 版, Debug 可以编译调试方便开发, 等要发布上线时再打包 release 版, release 版的包体积也小很多.
GitHub 地址: https://github.com/ChessLuo/ChannelPackageDemo
今天就学习到这里吧, 祝大家周末愉快!
来源: http://www.jianshu.com/p/f8c14f7d2305