一、前言
最近前端框架似乎又火起来了 各大平台纷纷推出自家框架 各种跨平台方案 在这百家争鸣 万花齐放之下 最终谁能一统天下呢 我们拭目以待吧 接下来我还是先继续学习下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、小程序、跨平台开发~
扫一扫关注我的微信公众号 程序猿在广东
本文链接: http://createflavours.immuno-online.com/view-689422.html