美文网首页
【安卓】如何实现渠道包

【安卓】如何实现渠道包

作者: 24c41111e47b | 来源:发表于2022-11-01 11:13 被阅读0次

安卓渠道包功能,是指使用一个APK文件快速生成不通商店投放渠道的APK, 方便后期进行广告投放跟踪.
下面我们介绍一种比较优雅的方式,无需重复打包,但是需要重签APP实现多渠道APK

另外一种方案: apk本质是一个zip,zip头部可以自由插入信息,实现


实现原理

直接解压apk,解压后的根目录会有一个META-INF目录,如下图所示:


b25b2615.jpeg

如果在META-INF目录内添加一个空文件,来对不通的APK进行标记, 此方式在v1版本可以不用重新签名应用,但是v2需要重新签名应用。因此,通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道。

实现方式

1.构建出一个APK文件

2.给APK注入空的渠道文件, 渠道名前缀为mtchannel_(举例: mtchannel_meituan), 下面给出一个python代码的示例:

import zipfile
zipped = 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的空文件:


8eaa455e.jpeg

3.APP内实现代码,在APP运行时读取渠道号

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 "";
    }
}

经过上面的方式我们就能快速实现渠道包功能,借助这个思想,我们可以对App内注入任何想要注入的信息

3.App重新签名
jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore your_keystore_path -storepass your_storepass -signedjar your_signed_apk, your_unsigned_apk, your_alias


参考

美团Android自动化之旅—生成渠道包

相关文章

网友评论

      本文标题:【安卓】如何实现渠道包

      本文链接:https://www.haomeiwen.com/subject/aszazrtx.html