Android渠道打包

采用美团渠道打包形式

渠道包打包解决方案

美团渠道包解决方案

用于解决大量除了渠道码以外别的内容一摸一样的渠道包打包问题
原地址: http://tech.meituan.com/mt-apk-packaging.html

优点:

  1. 打包速度,目前一个release的包的打包大概是 90秒,目前我开发的项目有50+个包,预计一次打渠道包需要 80分钟
    ,采用美团方式, 2分钟
  2. 不再需要开发参与打渠道包,以后开发只需要打连接测试环境的包和连接正式环境的包就行了
  3. 打包方式利于qa进行测试验证

原理介绍:

META-INF目录
这个目录下面存放的是Apk包的签名,所有的文件都要通过这个签名的验证,当然有一种文件是可以越过这种验证,也就是在 META-INF目录下 一个空白没有内容只有名字的文件,那么我们只要把这个文件的名字改成我们的渠道码就可以了。
以后特殊设置我们照样是可以通过这个方法去累加。
Android中使用的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
private static String getChannelFromApk(Context context, String channelKey) {
//从apk包中获取
ApplicationInfo appinfo = context.getApplicationInfo();
String sourceDir = appinfo.sourceDir;
//默认放在meta-inf/里, 所以需要再拼接一下
String key = "META-INF/" + channelKey;
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(key)) {
ret = entryName;
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zipfile != null) {
try {
zipfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
String[] split = ret.split("_");
String channel = "";
if (split != null && split.length >= 2) {
channel = ret.substring(split[0].length() + 1);
}
return channel;
}
文章目录
  1. 1. 渠道包打包解决方案
    1. 1.1. 美团渠道包解决方案
      1. 1.1.1. 优点:
      2. 1.1.2. 原理介绍: