android 二次打包完成apk多渠道打包

本文介紹將渠道號(hào)寫入assets文件里面,通過解壓apk修改assets里的文件,用Java代碼生成jarsigner腳本并運(yùn)行腳本二次打包的方式來獲取新的渠道包

此打包方式一個(gè)渠道包只需要5秒左右,可實(shí)現(xiàn)快速打渠道包

對(duì)于為了在assets獲取渠道號(hào)來打渠道包的方法,其實(shí)很簡單,你只要知道apk里面裝的什么東西,就會(huì)了

將apk用壓縮方式解壓,你會(huì)得到像

$3G0`R0_{KZ0J{S}48TB098.png

這樣的文件列表,其中就有assets文件夾;當(dāng)然前提條件是你在項(xiàng)目中必須創(chuàng)建assets文件夾。既然有了這個(gè)文件夾,安卓里面又能通過代碼獲取這個(gè)文件夾里面的文件,并讀取文件:

    private static String getChannel(Context context){
        try {
            InputStream in = context.getAssets().open("qudao.txt");
            int size = in.available();
            byte[] buffer = new byte[size];
            in.read(buffer);
            in.close();
            String txt = new String(buffer, "utf-8");
            Log.d("qudaobiaoji:",txt);
            return txt;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "未知";
    }

那么接下來就只需要通過修改里面的文件,并重新打包,簽名來打渠道包了。

如何修改里面的文件,并打包簽名,我特地寫了一個(gè)打包工具,通過java工程生成jar,通過命令行運(yùn)行jar讀取配置文件然后生成打包腳本,自動(dòng)運(yùn)行腳本進(jìn)行打包

介紹

在java工程中的入口是
main函數(shù),

 public static void main(String[] args) {}

以前一直不知道args是干嘛的,后來通過命令行傳入?yún)?shù),才知道args可以帶入命令行的參數(shù)

1.讀取配置文件:

通過文件的方式傳入要打的渠道包,及渠道包的名字,渠道號(hào)
讀文件操作很簡單,就是通過流的形式,不多介紹,可以自行閱讀源碼
文件配置:

app_path=app-release_aligned_signed.apk;
keystore=ej_v3.jks;
keyAlias=ej_v3;
keyPassword=123456;
storePassword=123456;
contents=優(yōu)億,魅族;
apkname=youyi,meizu;
2.解壓apk文件

通過java代碼將apk解壓出來、
通過ZipFile來解壓文件
解壓完后刪除簽名文件

3.替換渠道號(hào)文件

獲取解壓后的assets路徑,并修改里面的渠道文件內(nèi)容,

                //------修改內(nèi)容
                String content = contents[i];
                String apkn = apkNames[i];
                buffer.setLength(0);
                String path = buffer
                        .append(prefixName).append(ZipUtil.UPDATE_PATH_NAME).toString();
                System.out.println("path:"+path);
                br = new BufferedReader(new InputStreamReader(new FileInputStream(path),"UTF-8"));
                while ((br.readLine()) != null) {
                    osw = new OutputStreamWriter(new FileOutputStream(path),"UTF-8");
                    osw.write(content, 0, content.length());
                    osw.flush();
                }
4.重新壓縮生成.apk文件,此文件是未簽名文件
ZipUtil.compress(prefixName,targetPath+"\\"+unsing+"\\"+apkn+"_unsin.apk");
5.生成簽名腳本內(nèi)容
batStr+="jarsigner -verbose -keystore "+keystore+" -signedjar "+targetPath+"\\"+sing+"\\"+apkn+"_sin.apk "+targetPath+"\\"+unsing+"\\"+apkn+"_unsin.apk"+" "+keyAlias+"\n";
6.運(yùn)行簽名腳本
    public static void runbat(String batName) {
        String cmd = "cmd /c start "+ batName;// pass
        try {
            Process ps = Runtime.getRuntime().exec(cmd);
            ps.waitFor();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("child thread donn");
    }

有興趣的同學(xué)可以看下源碼,在增加別的渠道的情況下不需要另外配置gradle參數(shù),直接修改配置文件,運(yùn)行腳本就行了

今天網(wǎng)上查了下jarsigner打包命令,發(fā)現(xiàn)可以直接在腳本中輸入密碼,可直接打包,不用反復(fù)輸入密碼
腳本:
jarsigner -verbose -keystore test.jks -storepass 123456 -keypass 123
456 -signedjar target\sing\youyi_sin.apk target\unsing\youyi_unsin.apk test

源碼地址:https://github.com/dengzhi00/ApkQuDao

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

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

  • Android插件化基礎(chǔ)的主要內(nèi)容包括 Android插件化基礎(chǔ)1-----加載SD上APKAndroid插件化基...
    隔壁老李頭閱讀 7,392評(píng)論 13 48
  • Android多渠道打包 概述 每當(dāng)發(fā)新版本時(shí),Android客戶端會(huì)被分發(fā)到各個(gè)應(yīng)用市場(chǎng),比如豌豆莢,360手機(jī)...
    礪雪凝霜閱讀 2,237評(píng)論 2 11
  • Android市場(chǎng)的渠道分散已不是什么新鮮事,但如何高效打包仍是令許多開發(fā)者頭疼的問題。本篇文章著重介紹了目前最新...
    _曾胖子閱讀 2,011評(píng)論 1 10
  • [TOC] 打包流程 前言 我們每一個(gè)產(chǎn)品中一般都是由一位同事來負(fù)責(zé)打包工作的,其他同學(xué)一般是不需要關(guān)心具體的流程...
    鐘金寶閱讀 1,720評(píng)論 0 5
  • 目錄一、Python打包及優(yōu)化(美團(tuán)多渠道打包)二、Gradle打包三、其他打包方案:修改Zip文件的commen...
    守望君閱讀 5,935評(píng)論 4 17

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