如何用python快速多渠道打包

在講解python多渠道打包之前,回顧一下之前,我們是怎麼打包的

方案一:完全的重新編譯,即在代碼重新編譯打包之前,在AndroidManifest中修改渠道標識;
問題:如果就一二個渠道包,那還好,如果有幾十個,那打包得打的天昏地暗了.效率太低

方案二:通過ApkTool進行解包,然後修改AndroidManifest中修改渠道標示,最後再通過ApkTool進行打包、簽名。
問題:這樣速度比方案一稍微快一點,但是我遇到一個問題,解壓後插入文件,重新打包,運行起來雖然沒有問題,但是時間久一點就會提示"應用無響應",在android市場越來越完善,想直接修改apk裏面內容結構還是不靠譜

方案三:通過360加固工具和樂固等第三方工具是可以實現,但是渠道打包”後生成的 APK 包須重新簽名後,纔可以安裝使用 ,這樣效率也不高,當然第三方會不會往裏面添加"代碼"

接下來就是要講解如果使用python一鍵打包,1000個馬甲包只需要2分鐘

第一步:配置python環境
我們既然需要使用腳本打包,那麼相應的電腦上必須有可以運行python腳本的運行環境。所以我們第一步是要配置python運行環境。 自己去官網下載安裝即可,非常簡單。官網地址:www.python.org/
可以通過終端查看是否安裝成功

第二步:設置python腳本並把封裝好的類放到新建文件夾中
新建文件夾PythonTool
裏面分別創建czt.txt,MultiChannel.py,channel.txt文件
czt.txt爲null即可,
channel.txt中編輯渠道列表,每寫一個渠道名,換行即可
文件爲 MultiChannel.py 裏面代碼如下

#!/usr/bin/python
# coding=utf-8
import zipfile
import shutil
import os

# 空文件 便於寫入此空文件到apk包中作爲channel文件
src_empty_file = '/Users/lucas/python/PythonTool/czt.txt'
# 創建一個空文件(不存在則創建)
f = open(src_empty_file, 'w') 
f.close()

# 獲取當前目錄中所有的apk源包
src_apks = []
# python3 : os.listdir()即可,這裏使用兼容Python2的os.listdir('.')
for file in os.listdir('.'):
    if os.path.isfile(file):
        extension = os.path.splitext(file)[1][1:]
        if extension in 'apk':
            src_apks.append(file)

# 獲取渠道列表
channel_file = '/Users/lucas/python/PythonTool/channel.txt'
f = open(channel_file)
lines = f.readlines()
f.close()

for src_apk in src_apks:
    # file name (with extension)
    src_apk_file_name = os.path.basename(src_apk)
    # 分割文件名與後綴
    temp_list = os.path.splitext(src_apk_file_name)
    # name without extension
    src_apk_name = temp_list[0]
    # 後綴名,包含.   例如: ".apk "
    src_apk_extension = temp_list[1]
    
    # 創建生成目錄,與文件名相關
    output_dir = 'output_' + src_apk_name + '/'
    # 目錄不存在則創建
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)
        
    # 遍歷渠道號並創建對應渠道號的apk文件
    for line in lines:
        # 獲取當前渠道號,因爲從渠道文件中獲得帶有\n,所有strip一下
        target_channel = line.strip()
        # 拼接對應渠道號的apk
        target_apk = output_dir + src_apk_name + "-" + target_channel + src_apk_extension  
        # 拷貝建立新apk
        shutil.copy(src_apk,  target_apk)
        # zip獲取新建立的apk文件
        zipped = zipfile.ZipFile(target_apk, 'a', zipfile.ZIP_DEFLATED)
        # 初始化渠道信息
        empty_channel_file = "META-INF/cztchannel_{channel}".format(channel = target_channel)
        # 寫入渠道信息
        zipped.write(src_empty_file, empty_channel_file)
        # 關閉zip流
        zipped.close()

第三步:配置渠道列表

你把你已經簽名打包好的apk文件,複製到PythonTool目錄下和MultiChannel.py這個腳本同級,直接雙擊點擊MultiChannel.py即可完成打包。或者使用命令 先cd到PythonTool目錄下,再執行 python MultiChannel.py 結果就會在同目錄下面生成,

注意:文件目錄的路徑一定要寫對,不然會報找不到文件,而且apk需要是v1簽名,如果是v2簽名,打包後還是需要重新簽名,V2簽名不僅僅簽名了apk而且簽名了整個項目結構,防止篡改項目結構.這也就是爲什麼targetsdk>=30之後,必須要使用v2簽名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章