一、前言

最近前端框架似乎又火起来了,各大平台纷纷推出自家框架,各种跨平台方案,在这百家争鸣,万花齐放之下,最终谁能一统天下呢?我们拭目以待吧!接下来我还是先继续学习下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);    }}

 

开始打包了,还是原来的打包方式,只是多了不同渠道而已,要是想全部一起打包就选中全部

 

打包好之后↓

 

当然 如果我要测试某个渠道版的,每次都这样打包测试也不方便,于是还有一种方法

绑定签名文件

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'        }    }

绑定好自家的签名文件后,就可以直接开发工具运行编译到模拟器或手机里调试了,多么方便啊!

那么问题又来了,我怎么调试运行某个渠道呢?那就请看下图吧!

每个渠道包都有Debug版和Release版,Debug可以编译调试方便开发,等要发布上线时再打包release版,release版的包体积也小很多。

github地址:https://github.com/ChessLuo/ChannelPackageDemo

 

今天就学习到这里吧,祝大家周末愉快!

>>>支持我的话可以关注下我的公众号,一起学习Android、小程序、跨平台开发~

扫一扫关注我的微信公众号:程序猿在广东

更多相关文章

  1. flutter项目的打包和发布 主要是Android
  2. Android(安卓)JAR组件安装打包教程
  3. 关于flutter android so库兼容性问题
  4. Android(安卓)Studio 将Library打包成jar或aar包
  5. Uniapp打包apk,添加/res/raw目录资源
  6. Android批量打不同的渠道包方法-使用第三方插件
  7. 【Cocos2d-x】Mac 上 Cocos2d-x 3.X 打包Android
  8. [置顶] [Android(安卓)Studio 权威教程]打包、生成jks密钥、签名Ap
  9. Android多渠道打包之Python打包

随机推荐

  1. SQL判断语句用法和多表查询
  2. SQLServer获取临时表所有列名或是否存在
  3. Sql Server中Substring函数的用法实例解
  4. Mysql数据库性能优化三(分表、增量备份、
  5. SQL where条件和jion on条件的详解及区
  6. SQL 多条件查询几种实现方法详细介绍
  7. SQL Server附加数据库报错无法打开物理文
  8. SQL Server简单查询示例汇总
  9. 浅谈SQL Server交叉联接 内部联接
  10. SqlServer 注释符 单行注释与多行注释