淘先锋技术网

首页 1 2 3 4 5 6 7

解压apk,解压后的根目录会有一个META-INF目录。如果在META-INF目录内添加空文件,可以不用重新签名应用。因此,通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道。

下面代码可以实现往apk中的META-INF目录下添加一个空文件zipped = zipfile.ZipFile([apk绝对路径], 'a', zipfile.ZIP_DEFLATED)

empty_channel_file = "META-INF/[CHANNEL_PREFIX]{channel}".format(channel=[渠道名])

zipped.write([源空文件], empty_channel_file)

zipped.close()

下面代码为Java获取渠道号代码public static String getChannel() {

ApplicationInfo appinfo = StudyApplication.getContext().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();

int index = entryName.lastIndexOf(BuildConfig.CHANNEL_PREFIX);

if (index > 0) {

return entryName.substring(index + BuildConfig.CHANNEL_PREFIX.length());

}

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (zipfile != null) {

try {

zipfile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return "";

}

这样,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。这种打包方式速度非常快,900多个渠道不到一分钟就能打完。