最近有了解到多渠道打包。这里来记录一下。
一、美团walle
1.首先在Project方式下的项目的app目录中加入:keystore,channel,config.json三个
keystore文件夹中放的是签名文件:.keystore
channel文本文件:(里面是渠道信息)
meituan # 美团
samsungapps #三星
hiapk
anzhi
xiaomi # 小米
91com
gfan
appchina
nduoa
3gcn
mumayi
10086com
wostore
189store
lenovomm
hicloud
meizu
wandou
# Google Play
# googleplay
# 百度
baidu
#
# 360
360cn
#
# 应用宝
myapp
config.json文件:
{
/*
不声明extraInfo的channel默认使用的extraInfo
如果没有此项则没有默认extraInfo
*/
"defaultExtraInfo": {
"key2": "20161213",
"key": "20161212"
},
/*
strategy:
1. ifNone (默认适用此策略) : 仅当对应channel没有extraInfo时生效
2. always : 所有channel都生效,channel中extraInfo的key与defaultExtraInfo重复时,覆盖defaultExtraInfo中的内容。
*/
//"defaultExtraInfoStrategy": "always",
"channelInfoList": [
{
"channel": "meituan",
// 此channel将使用自己声明的extraInfo
/*
此alias可以做到写入apk的channel是meituan,而打包时输出的文件名是美团
注意:alias不声明时,walle配置apkFileNameFormat中channel就是channel,否则为alias
*/
"alias": "美团",
"extraInfo": {
"buildtime": "20161212",
"hash": "123"
}
},
{
"channel": "360cn",
// 此channel将使用自己声明的extraInfo
"extraInfo": {
"key": "20161213"
}
},
{
"channel": "googleplay"
// 此channel将使用defaultExtraInfo
},
{
"channel": "xiaomi"
// 此channel将使用defaultExtraInfo
},
{
"channel": "meizu"
// 此channel将使用defaultExtraInfo
},
{
"channel": "wandoujia",
"excludeDefaultExtraInfo": true
//强制声明不使用defaultExtraInfo,默认false
},
{
"channel": "myapp",
"excludeDefaultExtraInfo": true,
//强制声明不使用defaultExtraInfo,默认false
"extraInfo": {
// 尽管exclude default,但也可以继续写入自己的。
"key": "20161212"
}
}
]
}
》》》接下来是需要在项目根目录的build.gradle中添加walle gradle插件的依赖:
dependencies{
classpath 'com.meituan.android.walle:plugin:1.1.5'
}
如下图:
》》》然后需要在app的build.gradle中 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR:
apply plugin: 'walle'
dependencies {
compile 'com.meituan.android.walle:library:1.1.5'
}
build.gradle详细内容:
apply plugin: 'com.android.application'
apply plugin: 'walle'
android {
compileSdkVersion 25
buildToolsVersion "27.0.2"
defaultConfig {
applicationId "com.example.hello"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//签名 引用位置
signingConfigs {
sankuai {
storeFile file("keystore/meituan-debug.keystore")
storePassword "1234567"
keyAlias "meituan"
keyPassword "12345678"
}
}
//调用签名设置
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.sankuai
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.sankuai
}
}
//支持databinding
dataBinding{
enabled true
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.okhttp3:logging-interceptor:3.1.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.squareup.retrofit2:converter-scalars:2.0.2'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'
//多渠道打包
compile 'com.meituan.android.walle:library:1.1.5'
}
walle {
// 指定渠道包的输出路径
apkOutputFolder = new File("${project.buildDir}/outputs/channels")
apkFileNameFormat = '${appName}-${channel}-v${versionName}-${versionCode}-${buildTime}.apk'
//configFile与channelFile两者必须存在一个,否则无法生成渠道包。两者都存在时优先执行configFile
channelFile = new File("${project.getProjectDir()}/channel")
}
然后在项目根目录下,在studio的Terminal执行打包命令:gradlew clean assembleReleaseChannels
执行到最后显示successfully
最终的结果:(到指定渠道包的输出路径下)