Android自動生成渠道包

承接上文Android應(yīng)用的自動化構(gòu)建,我們已經(jīng)通過ANT自動構(gòu)建了應(yīng)用,那接下來的問題是,如何自動構(gòu)建渠道包,這里強(qiáng)烈推薦一篇文章美團(tuán)Android自動化之旅—生成渠道包。

美團(tuán)提到的第三種方式,截圖如下:


本文主要以這種方式,來實(shí)現(xiàn)Android渠道包的自動生成。
Demo文件結(jié)構(gòu)如下:



其中,empty是需要寫入apk的空文件,channel文件為渠道列表,內(nèi)容如下:

    wandoujia
    meituan
    yingyongbao

最重要的是python腳本文件,實(shí)現(xiàn)如下:


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,重命名復(fù)制一份到指定的channelApk目錄下,然后再向重命名后的apk里面寫入空文件,生成渠道包。
執(zhí)行腳本后文件目錄如下:



可以看到,已經(jīng)生成了渠道包:



我們解壓其中一個渠道包可以看到,確實(shí)寫入了該渠道路徑的空文件:

通過簡單的腳本文件,我們已經(jīng)實(shí)現(xiàn)了渠道包的自動生成,最后附上識別渠道包的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 "";
        }
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評論 25 709
  • 這一章主要針對項(xiàng)目中可以用到的一些實(shí)用功能來介紹Android Gradle,比如如何隱藏我們的證書文件,降低風(fēng)險(xiǎn)...
    acc8226閱讀 7,969評論 3 25
  • 各閱讀層次的閱讀規(guī)則只是閱讀規(guī)則的最大抽象,并無法完全契合地放到各種文體上。 結(jié)合各個文體的特性,對規(guī)則進(jìn)行細(xì)微的...
    天邊那一抹閱讀 919評論 0 1
  • 心里有山才能看到山,這句話不是唯心論,當(dāng)然是先明白山是什么,看到山時才知道山的樣子,今天不討論哲學(xué)問題,說說很多人...
    蘇步哲閱讀 528評論 0 0
  • 最近又開始看《三生三世十里桃花》,我個人覺得非常值得一看的一部小說,結(jié)局很美好。夜華和白淺之間的感情是劫也是緣,三...
    微光222閱讀 336評論 3 2

友情鏈接更多精彩內(nèi)容