采用美团渠道打包形式
渠道包打包解决方案
美团渠道包解决方案
用于解决大量除了渠道码以外别的内容一摸一样的渠道包打包问题
原地址: http://tech.meituan.com/mt-apk-packaging.html
优点:
- 打包速度,目前一个release的包的打包大概是 90秒,目前我开发的项目有50+个包,预计一次打渠道包需要 80分钟
,采用美团方式, 2分钟
- 不再需要开发参与打渠道包,以后开发只需要打连接测试环境的包和连接正式环境的包就行了
- 打包方式利于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) { ApplicationInfo appinfo = context.getApplicationInfo(); String sourceDir = appinfo.sourceDir; 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; }
|