美团多渠道快速打包

来源:互联网 发布: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多个渠道不到一分钟就能打完。

原创粉丝点击