php动态生成apk渠道包,Android自动生成渠道包

本文介绍了如何通过Python脚本自动化构建Android渠道包。首先,创建一个包含渠道列表的文件,然后脚本读取列表,对每个渠道重命名并复制原始APK,并在新APK中写入对应渠道的空文件,最终生成各渠道的定制包。解压APK后,可以验证空文件已正确写入。文章还提供了识别渠道包的Java代码。
摘要由CSDN通过智能技术生成

承接上文Android应用的自动化构建,我们已经通过ANT自动构建了应用,那接下来的问题是,如何自动构建渠道包,这里强烈推荐一篇文章美团Android自动化之旅—生成渠道包。

美团提到的第三种方式,截图如下:

5726cd5a4a27

本文主要以这种方式,来实现Android渠道包的自动生成。

Demo文件结构如下:

5726cd5a4a27

其中,empty是需要写入apk的空文件,channel文件为渠道列表,内容如下:

wandoujia

meituan

yingyongbao

最重要的是python脚本文件,实现如下:

import os

import os.path

import shutil

import zipfile

pkgPath = os.getcwd() + "/channelApk"

isPathExist = os.path.exists(pkgPath)

if isPathExist != True:

os.mkdir(pkgPath)

f = open('channel','r')

for line in f :

channelPath = pkgPath+"/ant-release_{temp}.apk".format(temp = line.strip('\n'))

shutil.copy("ant-release.apk", channelPath)

zipped = zipfile.ZipFile(channelPath, 'a', zipfile.ZIP_DEFLATED)

empty_channel_file = "META-INF/mtchannel_{channel}".format(channel=line.strip('\n'))

zipped.write("empty", empty_channel_file)

python代码很容易理解,就是把原本的apk,重命名复制一份到指定的channelApk目录下,然后再向重命名后的apk里面写入空文件,生成渠道包。

执行脚本后文件目录如下:

5726cd5a4a27

可以看到,已经生成了渠道包:

5726cd5a4a27

我们解压其中一个渠道包可以看到,确实写入了该渠道路径的空文件:

5726cd5a4a27

通过简单的脚本文件,我们已经实现了渠道包的自动生成,最后附上识别渠道包的java代码:

public class ChannelTools {

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();

Log.i("ANTDEMO", "entryName : " + entryName);

if (entryName.startsWith("META-INF/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 "";

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值