赞
踩
先了解V1和V2的定义
再看下这几类热门多渠道打包方式的对比
原理:
这种打包方式是使用Android Studio的编译工具gradle配合使用的,原理就是通过脚本修改AndroidManifest.xml中的mate-date内容,执行N次打包签名操作实现多渠道打包的需求
优点:
缺点
补充知识点
Flavors
:产品渠道,通过productFlavors
针对不同的渠道进行配置flavorDimensions
: flavors的作用是扩大维度,flavorDimensions则是将维度再次扩大。flavorDimensions
来扩大维度(具体的可以找下博客很多的)。BuildTypes
: 构建类型,AndroidStudio的Gradle组件默认提供给了“debug”“release”两个配置。//这段包裹在application下,与activity同级别
<meta-data
android:name="UMENG_CHANNEL"
//value 用占位符
android:value="${UMENG_CHANNEL_VALUE}"/>
//单独只有一个选择项时,所有渠道默认为该选项
flavorDimensions "default"
productFlavors {
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
q360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
}
}
如果几十个平台这样子写有点麻烦,可以直接这样子写,如下所示
//
flavorDimensions "default"
productFlavors {
xiaomi {
}
q360 {
}
}
//使用productFlavors.all字段统一配置
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
private String getChannel() {
try {
PackageManager pm = getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
return appInfo.metaData.getString("UMENG_CHANNEL");
} catch (PackageManager.NameNotFoundException ignored) {
}
return "";
}
打包方式分为两种
根据如下步骤
Generate Signed APK
Project Structure
作者传送门 多渠道神器walle
美团打包总共有两代
原理:
把一个Android应用包当作zip文件包进行解压,然后发现在签名生成的目录下(META-INF)添加一个空文件不需要重新签名。利用android签名不校验META-INF文件夹内容的漏洞,在此文件夹内放置渠道信息文件将不受签名限制
优点:
直接使用已有的apk,解压放入渠道文件,再压缩,不用再签名。所以这种方式速度非常快,900个渠道包用时不到一分钟
缺点:
1、只适用于V1
2、一些不法的渠道商很容易通过工具修改渠道。
原理:
利用V2签名的校验方式不校验APK Signing Block并且忽略APK Signing Block中多余的ID-VALUE这个特点,将渠道信息写到APK Signing Block中。
优点
缺点
1、还是不安全
Walle提供两种打渠道包方式:
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.meituan.android.walle:plugin:1.1.6'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR
apply plugin: 'walle'
dependencies {
compile 'com.meituan.android.walle:library:1.1.6'
}
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")
}
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
//加clen就是先清除原先的
./gradlew clean assembleReleaseChannels
clean
去掉,变为./gradlew assembleReleaseChannels
作者传送门 360多渠道
原理
利用的是Zip文件“可以添加comment(摘要)”的数据结构特点,在文件的末尾写入任意数据,而不用重新解压zip文件(apk文件就是zip文件格式);
优点:
没有解压缩、压缩、重签名,没有兼容性问题,速度最快;写入的渠道号数据支持加密;
缺点:
只适用于V1,不适用于V2,安全。
过程很简单因为有可视化工具下载一下就好了
使用一看就懂如下
以前看的资料,中间还有其他的一些博客没记
Android打渠道包方案的分类
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。