美团多渠道快速打包
来源:互联网 发布:126邮箱 smtp端口 编辑:程序博客网 时间:2024/04/29 13:47
上个博客介绍了一个传统的打包方式,但是这种打包方式只适用于渠道包较少的情况,而渠道包一旦多起来的时候,这种方法就不太适用了,打包的过程中耗费了太多的时间,真可谓费力不讨好,今天,给大家介绍一种新的多渠道快速打包的方式:美团自动化打包之旅,为广大安卓技术开发者提供新的打包方式
打包方案
实现原理
传统的打包方案是,在每次打包的时候,都会重新执行一次构建的过程,而这个过程非常的耗费时间,如果一次打包需要3分钟,那么30个渠道包就需要90分钟的时间(然而现实开发中打包时间比这个更长),而美团团队所提供的打包方案却能完美解决这个问题,一分钟900个渠道包不是梦,他的实现原理是,通过解压Apk文件,并在META-INF文件夹里面添加一个由渠道号命名的空文件,以此来标识不同的渠道版本,使用这种方法,只需要打出一个正式包就可以了,后续的其他包只是在这个正式包里面修改空文件的文件名就可以了,是不是很神奇呢,下面我们就一起来看看吧!
步骤一
下面的python代码用来给apk添加空的渠道文件,渠道名的前缀为mtchannel_:
import zipfilezipped = 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)
步骤二
添加完空渠道文件后的目录,META-INFO目录多了一个名为mtchannel_meituan的空文件:
步骤三
接下来就可以在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 ""; } }
这样,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。这种打包方式速度非常快,900多个渠道不到一分钟就能打完。
阅读全文
0 0
- 美团多渠道快速打包
- APK打包 (多渠道打包,美团打包)
- Android美团多渠道打包
- 美团多渠道打包记录
- Android多渠道打包(三):美团多渠道打包
- Android美团多渠道打包方式
- android 美团多渠道打包详解
- 美团多渠道打包方案初体验
- 美团多渠道打包原理以及使用
- 美团多渠道打包方案初体验
- 美团多渠道打包之实现篇
- 美团多渠道打包方案小记
- Android快速多渠道打包
- android多渠道快速打包
- Android多渠道打包汇总(六)—— 美团的多渠道打包方式
- 美团多渠道打包方案详解,速度快到白驹过隙
- Android 一站式打包(二)美团多渠道方案
- 【Android 进阶】美团的多渠道打包方式
- [leetcode]257. Binary Tree Paths[facebook](todo)
- Android开发中isTaskRoot方法的使用情景
- Android如何下载网络图片
- Async/await和promise
- 程序员应具备的素质
- 美团多渠道快速打包
- GCC与G++
- hibernate之表关系中的多对多
- MongoDB学习笔记(2)
- MySQL的聚集索引和非聚集索引
- recycleview三种布局
- REST API 安全设计指南
- PHP中substr截取中文乱码解决方案
- 初识tensorflow