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