Android的应用市场很多,简单罗列就有 360、应用宝、小米、百度、安卓、91、搜狗、华为、豌豆荚、机锋 等等,为了区分不同市场的推广效果,一般产品经理会要求在不同的市场上上架的apk有一个唯一的标志,这个标志被称为渠道号,一般结合友盟统计一起用,可以在友盟后台上看不同渠道的推广效果。
那怎么样快速地打出多个渠道包呢?
在Eclipse+ADT时代,最佳方案是美团研发团队研究出来的,利用空文件不影响应用签名验证
的原理,可以1分钟内打完900多个渠道的包。
操作步骤如下:
- 编译出一个原始的不带渠道的apk
- 利用脚本在apk中添加空的渠道文件,渠道名的前缀为mtchannel_:
import zipfile
zipped = zipfile.ZipFile(your_apk, 'a', zipfile.ZIP_DEFLATED)
empty_channel_file = "META-INF/mtchannel_{channel}".format(channel=your_channel)
zipped.write(your_empty_file, empty_channel_file)
- 在Java代码中读取空渠道文件名
public static String getChannel(Context context) {
ApplicationInfo appinfo = context.getApplicationInfo();
String sourceDir = appinfo.sourceDir;
String ret = "";
ZipFile zipfile = null;
try {
zipfile = new ZipFile(sourceDir);
Enumeration<?> entries = zipfile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
String entryName = entry.getName();
if (entryName.startsWith("mtchannel")) {
ret = entryName;
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zipfile != null) {
try {
zipfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
String[] split = ret.split("_");
if (split != null && split.length >= 2) {
return ret.substring(split[0].length() + 1);
} else {
return "";
}
}
现在步入了Android Studio+Gradle的时代,我们也可以利用Gradle的productFlavors机制来做多渠道打包。以友盟为例,操作步骤如下:
- 在 AndroidManifest.xml中修改
UMENG_CHANNEL
:
<meta-data android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
- 在模块下的build.gradle文件中增加
android{
productFlavors {
yingyongbao{}
baidu{}
anzhuo{}
jiuyi91{}
sanliuling360{}
sougou{}
huawei{}
xiaomik{}
wandoujia{}
jifeng{}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
}
- 在项目文件夹下执行命令
gradlew assembleRelease
- 最后在
build/outputs/apk
下面就能看到生成的包了。
这种方式,简单方便不用写脚本,但是耗时比较长,10个渠道打包要3~4分钟,从时效上来看,还是美团提供的方法比较好。
打完包之后,要验证一下,同样以友盟统计为例,怎么样知道自己的渠道号有没有修改成功呢?
- 把设备在友盟后台注册为测试设备
- 在代码中打开调试开关
MobclickAgent.setDebugMode( true );
- 点击不同页面,在logcat中查看
MobclickAgent
标签的信息,看到信息上传后,去友盟后台统计到的渠道是否符合预期。
参考:
Panda
2016-08-25
网友评论
对于每个渠道的SDK 部分功能做调整 这种情况有什么好的方式吗?