1. 多渠道打包概述
- 1.渠道是国内android平台特有的名词
- 2.由于google play无法使用,因此出现了众多市场
-
3.一个渠道就是代表一个市场
2. 使用场景
- 1.如果应用只针对某个平台,则无须多渠道
- 2.只要应用提供多种下载途径,就会使用到多渠道,例如:官网,豌豆夹,问问应用商店
3. 意义
- 1.可以更详细的统计app被下载的途径
- 2.我们可以查看app在每个渠道上的表现
- 3.更有利于我们app推广
4. 友盟多渠道打包
- 1.在友盟统计上注册账号并增加应用(http://mobile.umeng.com/apps),获取appKey
- 2.在module的build.gradle文件中添加依赖
dependencies {
compile 'com.umeng.sdk:common:1.5.0'
compile 'com.umeng.sdk:analytics:7.5.0'
}
- 3.在AndroidMenifest.xml文件中添加
<!-- 友盟统计的meta-data配置-->
<meta-data
android:name="UMENG_APPLEY"
android:value="5b5321eea40fa30660000151">//配置友盟申请的appKey
</meta-data>
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}">//通过占位符动态配置渠道号
</meta-data>
- 4.在 defaultConfig中添加默认打包
manifestPlaceholders = [UMENG_CHANNEL_VALUE:"umeng"] //默认打包渠道名umeng
- 5.添加签名配置以及渠道配置
渠道配置有两种方式:
方式1:
productFlavors{
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
方式2:
productFlavors{
xiaomi {}
wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] //动态的改变渠道名
}
- 6.编译生产渠道包
window下使用gradlew,而ubuntu下使用 ./gradlew
gradlew build //编译所有渠道的debug版本和release版本
gradlew assembleRelease //编译所有渠道的release版本
gradlew assembleDebug //编译所有渠道的debug版本
gradlew assemblewandoujiaRelease //编译豌豆荚渠道的release版本
打包中出现过时Api,在build.gradle中添加
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
}
再编译,可以看到具体的过时方法
解决办法:在build.gradle中添加下面代码,再去编译
android{
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
编译中文问题
Q: All flavors must now belong to a named flavor dimension
A: 版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了flavorDimensions "versionCode"
- 补充说明1:
productFlavors{
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
resValue "string", "app_name", "xiaomi_app" //修改渠道对应的apk名称为xiaomi_app
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
resValue "string", "app_name", "wandoujia_app" //修改渠道对应的apk名称为wandoujia_app
}
}
还需要将strings.xml中app_name注释掉
<!--<string name="app_name">MultiChannel</string>-->
- 补充说明2:
功能测试,解决手机上可以同时安装多个不同功能的apk,从而不用去卸载之前安装的版本,例如测试功能
okhttp和极光推送两个功能:
productFlavors{
okhttp {
applicationIdSuffix "okhttp" //会在包名后面追加okhttp
resValue "string", "app_name", "okhttp"
}
jpush{
applicationIdSuffix "jpush" //会在包名后面追加jpush
resValue "string", "app_name", "jpush"
}
}
5.百度统计多渠道打包
- 1.在百度统计上注册账号并增加应用,获取appKey
https://app.baidu.com/apps/
- 2.gradle集成
为方便开发者,百度移动统计-标准版SDK,已经支持配置gradle网络下载依赖JAR。开发者不再需要自行下载依赖JAR,然后配置;直接指定jcenter仓库的移动统计JAR即可。
(1). project build.gradle,android studio项目默认已经配置好:
allprojects {
repositories {
jcenter()
}
}
(2). module build.gradle,需要添加如下配置:
dependencies {
implementation'com.baidu.mobstat:mtj-sdk:latest.integration'
}
- 3…在AndroidMenifest.xml文件中添加
<!-- 百度统计的meta-data配置-->
<meta-data
android:name="BaiduModAd_STAT_ID"
android:value="a9e2a84a2">//配置百度申请的appKey
</meta-data>
<meta-data
android:name="BaiduModAd_STAT_CHANNEL"
android:value="${BAIDU_CHANNEL_VALUE}">//动态配置渠道号
</meta-data>
- 在 defaultConfig中添加默认打包
manifestPlaceholders = [BAIDU_CHANNEL_VALUE:"baidu"] ////默认打包渠道baidu
- 5 渠道配置和友盟完全类似
productFlavors{
xiaomi {
manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "xiaomi"]
}
wandoujia {
manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "wandoujia"]
}
baidu {
manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "baidu"]
}
}
利用美团walle(瓦力)快速进行多渠道打包
1.修改项目根目录下build.gradle文件,在buildscripts下的dependencies中增加:
classpath 'com.meituan.android.walle:plugin:1.1.6'
2.修改app工程的build.gradle文件,增加如下信息:
apply plugin: 'walle'
2.2 确保有签名配置(没有签名编译报错 ERROR: A problem occurred configuring project ‘:app’.)
signingConfigs {
release {
storeFile file("../test.jks")
storePassword "123456"
keyAlias "test"
keyPassword "123456"
}
debug {
storeFile file("../test.jks")
storePassword "123456"
keyAlias "test"
keyPassword "123456"
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}
2.3 增加如下配置(按照下面配置生成的渠道包在build/outputs/channels目录下,而不是build/outputs/apk目录):
walle {
// 指定渠道包的输出路径
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定制渠道包的APK的文件名称
apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
// 渠道配置文件
channelFile = new File("${project.getProjectDir()}/channel")
}
4.在app module下新建文件channel,放置渠道信息
yingyongbao
oppo
huawei
vivo
xiaomi
baidu
meizu
qh360
wandoujia
ppzhushou
jinli
aliyun
sougou
lenovo
anzhi
faqiao
4.命令行打包
常用的walle打包命令
//生成所有渠道包
gradlew clean assembleReleaseChannels
// 生成单个渠道包:
gradlew clean assembleReleaseChannels -PchannelList=meituan
//生成多个渠道包:
gradlew clean assembleReleaseChannels -PchannelList=meituan,dianping
5…为了关联到友盟统计
5.1 在dependencies中增加
implementation 'com.meituan.android.walle:library:1.1.6'
5.2 获取渠道信息
ChannelInfo channelInfo = WalleChannelReader.getChannelInfo(getApplicationContext());
String channelName = channelInfo.getChannel(); (渠道名称)
Map<String, String> extraInfo = channelInfo.getExtraInfo(); (额外信息)
或者
String channelId = WalleChannelReader.getChannel(this.getApplicationContext());
5.3 在Application中关联到友盟
String appkey = "your appkey"; //友盟key
String channelId = WalleChannelReader.getChannel(this.getApplicationContext()); //初始化友盟配置信息 通过代码方式配置友盟的渠道信息
MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(this, appkey, channelId);
6.Gradle依赖中添加
implementation 'com.umeng.analytics:analytics:latest.integration'
如不行,再加上
allprojects {
repositories {
mavenCentral()
}
}
在activity中添加如下代码,可使用统一的baseActivity中:
/**
* 友盟统计需要添加的
*/ @Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
系统退出时,用来保存友盟统计数据
MobclickAgent.onKillProcess(context);
可参考:
https://blog.youkuaiyun.com/yinxing2008/article/details/82588075
https://blog.youkuaiyun.com/u010622801/article/details/80592877