日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android分渠道打包(Python 3.4 实现)

發布時間:2024/1/17 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android分渠道打包(Python 3.4 实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android批量打包實現有很多方式你可以用Ant,Maven或者Gradle。在處理多個Library和NDK編譯的時候配置有些麻煩,且每個渠道都編譯一次效率較低。如果沒有復雜的分渠道編譯需求,我們可以換種簡單的方式。因為apk中的assets是不會編譯的,我們可以修改assets文件的值實現渠道修改,這樣你的apk就可以通過讀取修改過的文件區分各個渠道,用于數據統計。下面是我寫的一個python腳本:

?使用說明(Python 3.4):

1. 使用IDE工具導出未簽名Apk,apk文件為WMShua.apk 2. 將APK放到腳本同級目錄 3. 將簽名文件放到同級目錄下 4. 執行該腳本進行簽名,可指定參數修改默認值
5. -h 查看幫助 #!/usr/bin/env python # encoding: utf-8import zipfile import os import shutil import subprocess import sys keystore = <默認簽名文件名 例如 "example.keystore"> storepass = <默認簽名文件秘鑰 例如 "example"> keypass = <默認秘鑰 例如 "example"> alias = <默認簽名文件別名 alias 例如 "www.example.com"> unsigned_apk_file = <默認未簽名APK 例如 "example.apk"> apk_prefix = <默認簽名APK名稱前綴 例如 "_prefix"> apk_postfix = <默認簽名APK名稱后綴 例如 "_post"> base_extractPath = <默認臨時導出目錄 例如 "_output"> version_flag = <默認版本全稱 例如 "_beta_1.0.1"> channel_file = <默認渠道文件相對路徑 例如 "assets/channel_id"> channels = { '1000': "官網", '1001': "91", '1002': "百度", '1003': "安卓", '1004': "豌豆莢", '1005': "應用寶", '1006': "360", '1007': "應用匯", '1008': "魅族", '1009': "N多網", '1010': "PP助手", '1011': "淘寶", '1012': "機鋒網", '1013': "金立", '1014': "小米", '1015': "華為", '1016': "搜狗", '1017': "安智", '1018': "沃商店", '1019': "itools", '1020': "電信愛游戲", '1021': "優億市場", '1022': "應用貝", '1023': "googleplay", '1024': "安粉網" }def extract(zfile, path):z = zipfile.ZipFile(zfile,'r')for filename in z.namelist():if not filename.endswith('/'):f = os.path.join(path, filename)dir = os.path.dirname(f)if not os.path.exists(dir):os.makedirs(dir)singleFile = open(f, "wb")singleFile.write(z.read(filename))z.close()def modifyChannel(path, channel_id):m_file = open(os.path.join(path, channel_file), "w")m_file.write(channel_id)m_file.flush()m_file.close()print("---------modifyChannel-----------")def obtainFileListInfolder(path):filelist = []if os.path.isfile(path):filelist.append(path)else :for root, dirs, files in os.walk(path):for name in files:filelist.append(os.path.join(root, name))return filelistdef reArchive(path, zipfilename):filelist = obtainFileListInfolder(path)zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)for tar in filelist:arcname = tar[len(path):]#print arcname zf.write(tar, arcname)zf.close()def signApk(src, target):signedCmd = "jarsigner -verbose -keystore " + keystore + " -storepass " + storepass +" -keypass "+ keypass +" -signedjar " + target + " " + src + " " + aliasprint("---------signApk-----------" + signedCmd)subprocess.call(signedCmd)print("--------------------signedApk:" + target)def clearTmpFiles(paths):for path in paths:if os.path.exists(path):if os.path.isfile(path):os.remove(path)else:shutil.rmtree(path)def handleArgv(argv):for i in range(1, len(argv)):if len(argv) > i + 1 and '-h' != argv[i]:if '-v' == argv[i] :version_flag = argv[i + 1]elif '-u' == argv[i] :unsigned_apk_file = argv[i + 1]elif '-K' == argv[i] :keystore = argv[i + 1]elif '-s' == argv[i] :storepass = argv[i + 1]elif '-k' == argv[i]:keypass = argv[i + 1]elif '-b' == argv[i]:apk_prefix = argv[i + 1]elif '-e' == argv[i]:apk_postfix = argv[i + 1]elif '-c' == argv[i]:channel_file = argv[i + 1]return Falseelif '-h' == argv[i]:helpstr = '''\n使用說明(Python 3.4):\n 1. 使用IDE工具導出未簽名Apk,apk文件為WMShua.apk\n 2. 將APK放到腳本同級目錄\n 3. 將簽名文件放到同級目錄下\n 4. 執行該腳本進行簽名,可指定參數修改默認值,參數如下:\n'''helpstr += '''-v version_flag 版本全稱-u unsigned_apk_file 未簽名Apk -K keystore 秘鑰文件-k keypass 秘鑰-s storepass 文件秘鑰-b apk_prefix 簽名文件前綴-e apk_postfix 簽名文件后綴-c channel_file 需要修改的渠道文件相對路徑-h help'''print(helpstr)return Trueelse:print("參數未指定,使用默認參數!")return Falseif __name__ == "__main__":isJusthelp = Falseif sys.argv and len(sys.argv) >= 2:isJusthelp = handleArgv(sys.argv)if not isJusthelp:for channel_id in channels:print('--------------------------------'+ channels[channel_id] + '('+ channel_id + ')'+'-----------------------------------')channel_apk = channel_id +"_"+ channels[channel_id] + apk_prefix + ".apk"signed_channel_apk = channel_id +"_"+ channels[channel_id] + apk_prefix + version_flag + apk_postfixtotalExtractPath = base_extractPath + channel_idprint("---------------開始解壓縮:" + totalExtractPath)extract(unsigned_apk_file, totalExtractPath)print("---------------修改渠道:" + channel_id)modifyChannel(totalExtractPath, channel_id)print("---------------重新打包:" + channel_apk)reArchive(totalExtractPath, channel_apk)print("---------------簽名:" + signed_channel_apk)signApk(channel_apk, signed_channel_apk)print("---------------清除臨時文件...")paths = [totalExtractPath, channel_apk]### 清除臨時文件 clearTmpFiles(paths)print('------------------------分渠道打包完成-------------------------')

?

轉載于:https://www.cnblogs.com/inbase/p/5181613.html

總結

以上是生活随笔為你收集整理的Android分渠道打包(Python 3.4 实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。