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 实现)相关推荐
- Android studio 分渠道打包,引用不同的moudle
转自:https://github.com/itlgl/note/issues/36 如何简单的使用keystore文件为apk签名 在项目根目录下创建文件夹keystore,并将签名文件比如keys ...
- android打包工具多渠道批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案...
今天写一篇文章来总结下android批量打渠道包美团版本.之前项目上一直用的是gradle 批量打包方式,那个速度啊真是令人发指,15个渠道得跑上半个小时,出去吃顿饭回来,还在跑.特别是赶上项目上线的 ...
- android 美团批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案
今天写一篇文章来总结下android批量打渠道包美团版本.之前项目上一直用的是gradle 批量打包方式,那个速度啊真是令人发指,15个渠道得跑上半个小时,出去吃顿饭回来,还在跑.特别是赶上项目上线的 ...
- android 渠道打包工具,Android渠道打包技术小结
导读 本文对比了渠道4种渠道打包方式: 与iOS的单一渠道(AppStore)不同,Android平台在国内的渠道多入牛毛.以我们的App为例,就有27个普通渠道(应用宝,百度,360这种)和更多的推 ...
- Android渠道打包技术小结
导读 本文对比了渠道4种渠道打包方式: 与iOS的单一渠道(AppStore)不同,Android平台在国内的渠道多入牛毛.以我们的App为例,就有27个普通渠道(应用宝,百度,360这种)和更多的推 ...
- android 渠道打包工具,Walle —— Android多渠道打包神器
图片只为致敬斯坦·李 Walle为了android多渠道打包而生的工具,废话不多说直接上用法 配置build.gradle 在项目的build.gradle文件中添加walle插件依赖 depende ...
- Android 渠道打包优化方案
项目迭代比较快,每次打二十多个渠道包,要花将近1个小时. 参考美团的优化方案:http://tech.meituan.com/mt-apk-packaging.html 因为APK其实就是ZIP的格式 ...
- Gradle Android客户端程序打包(基于gradle 2.10版本验证通过)
http://www.cnblogs.com/Freedoms/p/5171201.html 一.前言 目前正在准备从eclipse开发环境向AndroidStudio迁移,提前过去探探路,不出所料, ...
- android ant批量打包
当我们对安卓项目需要分很多渠道打包的时候,批量打包工具无疑是个不二选择,批量打包的方式大概可以分为两种,第一是通过第三方的打包平台,比如360加固宝,这确实是个很好的工具,既提高了源代码的安全性能,又 ...
最新文章
- html重绘text,使用DrawText重绘C++
- 一些服务器编程的概念
- [Android] Android统计Apk , jar包方法数
- seo 伪原创_seo伪原创工具(解析新云查新型伪原创模式工具)
- opencv-api getStructuringElement
- sql azure 语法_Azure Kubernetes服务(AKS)中SQL Server
- 简述 Linux 文件系统的目录结构
- .axf文件_ELF文件格式与readelf命令使用
- ubuntu 虚拟显示器制作
- 电脑wifi距离测试软件,wifi测速工具
- 小组作业:学生信息管理系统需求分析
- 为真实硬件安装WDM驱动
- 判断微信小程序转发是否成功
- matlab模糊控制侧方位泊车
- 百度指数邀请序列号_微信指数如何收录关键词
- 神器 | 百度云资源搜索
- 【算法杂谈】LJX的迪杰斯特拉算法报告
- Unity 显示FPS
- 从零开始画自己的DAG作业依赖图(三)--节点连线简单版
- 如果你有一台超级计算机_你会用它来做什么?