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 实现)相关推荐

  1. Android studio 分渠道打包,引用不同的moudle

    转自:https://github.com/itlgl/note/issues/36 如何简单的使用keystore文件为apk签名 在项目根目录下创建文件夹keystore,并将签名文件比如keys ...

  2. android打包工具多渠道批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案...

    今天写一篇文章来总结下android批量打渠道包美团版本.之前项目上一直用的是gradle 批量打包方式,那个速度啊真是令人发指,15个渠道得跑上半个小时,出去吃顿饭回来,还在跑.特别是赶上项目上线的 ...

  3. android 美团批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案

    今天写一篇文章来总结下android批量打渠道包美团版本.之前项目上一直用的是gradle 批量打包方式,那个速度啊真是令人发指,15个渠道得跑上半个小时,出去吃顿饭回来,还在跑.特别是赶上项目上线的 ...

  4. android 渠道打包工具,Android渠道打包技术小结

    导读 本文对比了渠道4种渠道打包方式: 与iOS的单一渠道(AppStore)不同,Android平台在国内的渠道多入牛毛.以我们的App为例,就有27个普通渠道(应用宝,百度,360这种)和更多的推 ...

  5. Android渠道打包技术小结

    导读 本文对比了渠道4种渠道打包方式: 与iOS的单一渠道(AppStore)不同,Android平台在国内的渠道多入牛毛.以我们的App为例,就有27个普通渠道(应用宝,百度,360这种)和更多的推 ...

  6. android 渠道打包工具,Walle —— Android多渠道打包神器

    图片只为致敬斯坦·李 Walle为了android多渠道打包而生的工具,废话不多说直接上用法 配置build.gradle 在项目的build.gradle文件中添加walle插件依赖 depende ...

  7. Android 渠道打包优化方案

    项目迭代比较快,每次打二十多个渠道包,要花将近1个小时. 参考美团的优化方案:http://tech.meituan.com/mt-apk-packaging.html 因为APK其实就是ZIP的格式 ...

  8. Gradle Android客户端程序打包(基于gradle 2.10版本验证通过)

    http://www.cnblogs.com/Freedoms/p/5171201.html 一.前言 目前正在准备从eclipse开发环境向AndroidStudio迁移,提前过去探探路,不出所料, ...

  9. android ant批量打包

    当我们对安卓项目需要分很多渠道打包的时候,批量打包工具无疑是个不二选择,批量打包的方式大概可以分为两种,第一是通过第三方的打包平台,比如360加固宝,这确实是个很好的工具,既提高了源代码的安全性能,又 ...

最新文章

  1. html重绘text,使用DrawText重绘C++
  2. 一些服务器编程的概念
  3. [Android] Android统计Apk , jar包方法数
  4. seo 伪原创_seo伪原创工具(解析新云查新型伪原创模式工具)
  5. opencv-api getStructuringElement
  6. sql azure 语法_Azure Kubernetes服务(AKS)中SQL Server
  7. 简述 Linux 文件系统的目录结构
  8. .axf文件_ELF文件格式与readelf命令使用
  9. ubuntu 虚拟显示器制作
  10. 电脑wifi距离测试软件,wifi测速工具
  11. 小组作业:学生信息管理系统需求分析
  12. 为真实硬件安装WDM驱动
  13. 判断微信小程序转发是否成功
  14. matlab模糊控制侧方位泊车
  15. 百度指数邀请序列号_微信指数如何收录关键词
  16. 神器 | 百度云资源搜索
  17. 【算法杂谈】LJX的迪杰斯特拉算法报告
  18. Unity 显示FPS
  19. 从零开始画自己的DAG作业依赖图(三)--节点连线简单版
  20. 如果你有一台超级计算机_你会用它来做什么?

热门文章

  1. VUE data传值
  2. 查看当前系统的glibc版本
  3. Python3网络爬虫(四): 登录
  4. 使用Socket及ServerSocket创建简单的服务器
  5. 5种网络IO模型:阻塞IO、非阻塞IO、异步IO、多路复用IO、信号驱动IO
  6. Spark RDD创建操作
  7. Spark笔记:RDD基本操作(下)
  8. ElasticSearch插件demo
  9. Hbase总结(十)Hhase性能调优
  10. Django - ORM - 事务, 乐观锁, 悲观锁