开发Android那么多年,你真的会打包吗
一、前言
最近前端框架似乎又火起来了,各大平台纷纷推出自家框架,各种跨平台方案,在这百家争鸣,万花齐放之下,最终谁能一统天下呢?我们拭目以待吧!接下来我还是先继续学习下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、小程序、跨平台开发~
扫一扫关注我的微信公众号:程序猿在广东
更多相关文章
- flutter项目的打包和发布 主要是Android
- Android(安卓)JAR组件安装打包教程
- 关于flutter android so库兼容性问题
- Android(安卓)Studio 将Library打包成jar或aar包
- Uniapp打包apk,添加/res/raw目录资源
- Android批量打不同的渠道包方法-使用第三方插件
- 【Cocos2d-x】Mac 上 Cocos2d-x 3.X 打包Android
- [置顶] [Android(安卓)Studio 权威教程]打包、生成jks密钥、签名Ap
- Android多渠道打包之Python打包