android批量打包工具-python实现

所谓批量打包实质是:只需动态修改AndroidManifest.xml文件中的channel_value,添加你需要的渠道名称并重新打包成新的渠道包。

思路

1.导出一个未签名的apk包,其中渠道号配置如上图。

2.使用apkTool解压apk包

3.根据渠道号修改channel_value

4.使用apktool重新打包为未签名的apk包

5.给未签名的apk包签名

使用提示步骤:

一、下载python安装包,python 2.7.9下载地址:https://www.python.org/downloads/ 直接运行傻瓜式安装,只要稍稍注意安装的路径就可以了。

比如我是安装在 D:\Python\Python27,那么在我的电脑环境变量path中添加D:\Python\Python27;

打开cmd 并输入python可以正常查看到python的版本信息,则说明python安装成功。

二、在运行终端找到MakeTool.py的路径,并输入命令:python MakeTool.py 就可以成功进行批量打包啦

组织结构如下图:

在前人的基础上多加了aapt.exe和apktool.bat文件,如果没有aapt.exe会报jarsigner是不内部命令的提示哦。

其中channel为渠道号列表:

360

91

aliyun

android

anguanjia

appchina

gfan

goapk

hiapk

nduoa

nearme

tencent

wandoujia

xiaomi

keystore文件夹内放置着测试工程的签名文件ApkTest.keystore

ApkTest.apk是未签名的apk包

下面就是最重要的MakeTool.py文件

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

def readChannelfile(filename):
    f = file(filename)
    while True:
        line = f.readline().strip('\n')
        if len(line) == 0:
            break
        else:
            channelList.append(line);
    f.close()

def backUpManifest():
    if os.path.exists('./AndroidManifest.xml'):
        os.remove('./AndroidManifest.xml')
    manifestPath = './temp/AndroidManifest.xml'
    shutil.copyfile(manifestPath, './AndroidManifest.xml')

def modifyChannel(value):
    tempXML = ''
    f = file('./AndroidManifest.xml')
    for line in f:
        if line.find('channel_value') > 0:
            line = line.replace('channel_value', value)
        tempXML += line
    f.close()

    output = open('./temp/AndroidManifest.xml', 'w')
    output.write(tempXML)
    output.close()

    unsignApk = r'./bin/%s_%s_unsigned.apk'% (easyName, value)
    cmdPack = r'java -jar apktool.jar b temp %s'% (unsignApk)
    os.system(cmdPack)

    signedjar = r'./bin/%s_%s_signed.apk'% (easyName, value)
    unsignedjar = r'./bin/%s_%s_unsigned.apk'% (easyName, value)
    cmd_sign = r'jarsigner -verbose -keystore %s -storepass %s -signedjar %s %s %s'% (keystore, storepass, signedjar, unsignedjar, alianame)
    os.system(cmd_sign)
    os.remove(unsignedjar);

channelList = []
apkName = 'ApkTest.apk'
easyName = apkName.split('.apk')[0]
keystore='./keystore/ApkTest.keystore'
storepass='123456'
alianame='ApkTest.keystore'

output_apk_dir="./bin"
if os.path.exists(output_apk_dir):
    shutil.rmtree(output_apk_dir)

readChannelfile('./channel')
print '-------------------- your channel values --------------------'
print 'channel list: ', channelList
cmdExtract = r'java -jar apktool.jar  d -f -s %s temp'% (apkName)
os.system(cmdExtract)

backUpManifest()
for channel in channelList:
    modifyChannel(channel)

if os.path.exists('./temp'):
    shutil.rmtree('./temp')
if os.path.exists('./AndroidManifest.xml'):
    os.remove('./AndroidManifest.xml')
print '-------------------- Done --------------------'

执行也很简单  运行cmd进入终端,并切换路径到MakeTool.py的文件路径D:\batch_make_tool\batch_make_tool,执行python MakeTool.py就可以

执行后会在文件夹下生成bin文件夹,根据各个市场的签名文件夹就在里面

my_batch_apktool.zip下载:http://download.csdn.net/detail/etmanwenhan/8493739

参考:http://blog.csdn.net/luck_apple/article/details/8634572

时间: 2024-11-10 01:36:26

android批量打包工具-python实现的相关文章

Ant自动化打多渠道包,Android批量打包提速

Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. 在eclipse中引入ant请参考  http://www.cnblogs.com/tt_mc/p/3891546.html ,下面是本人ant打包时遇到的一些问题. ---------------------可爱的分割线------------------------------ 一.按照上面步骤

可扩展的android重打包工具

今天看了一下当初的打包工具.学习了点技术.然后git上找了个相似的工程代码研究了一下.觉得制作一个脚本语言的工具会快很多.而程序员很多时候是不需要一个接着一个打包的.对于程序员来说只需要使用几句代码就能描述自己做的一些事情.因此应该讲这些重复劳动的东西写出来. 简单学习了一下打包工具的原理.是使用一个apkTool的工具来对apk进行解压缩和重签名的.在github上许多是使用ant的打包工具打包.而我看到了一个demo是使用此工具解压缩文件并重签名的.作者将一些东西写出了配置文件.不过网上许多

Android几种常见的多渠道(批量)打包方式介绍

多渠道打包,主要是为了统计不同的渠道上包的下载数量,渠道越多,我们需要打的包数量越多,这个时候,我们没法去使用单纯的手动打包去一个一个的生成不同的渠道包,我们需要更高效的打包方式. 声明渠道方式一: 通常我们区分渠道都是在我们manifest 文件的 application 用这样来定义渠道信息: <meta-data android:name="UMENG_CHANNEL" android:value="360"/> 然后在我们的Java 代码中,我们

Android Studio多渠道批量打包及代码混淆

一.批量打包 1.集成了友盟统计,并在AndroidManifest.xml中添加了如下代码 <meta-data android:name="UMENG_CHANNEL" android:value="${CHANNEL_VALUE}"/> 2.在app的build.gradle的android标签下添加如下代码: productFlavors { myapp {} _360 {} appchina {} hiapk {} } productFlavo

Android apk打包过程

概述 android打包过程,下面这张图取自Android开发权威指南,非常清晰. 整个过程使用的工具有 名称 功能介绍 在操作系统中的路径 aapt Android资源打包工具 ${ANDROID_SDK_HOME}/platform-tools/appt aidl Android接口描述语言转化为.java文件的工具 ${ANDROID_SDK_HOME}/platform-tools/aidl javac Java Compiler ${JDK_HOME}/javac或/usr/bin/j

android Apk打包过程概述_android是如何打包apk的

最近看了老罗分析android资源管理和apk打包流程的博客,参考其他一些资料,做了一下整理,脱离繁琐的打包细节和数据结构,从整体上概述了apk打包的整个流程. 流程概述: 1.打包资源文件,生成R.java文件 2.处理aidl文件,生成相应java 文件 3.编译工程源代码,生成相应class 文件 4.转换所有class文件,生成classes.dex文件 5.打包生成apk 6.对apk文件进行签名 7.对签名后的apk文件进行对其处理 打包过程使用的工具 名称 功能介绍 在操作系统中的

使用Ant批量打包Android应用完全指南

本文章由Socks完成,博客地址:http://blog.csdn.net/zhaokaiqiang1992 转载请说明! 折腾了一下午,百度了一下午,终于实现了使用Ant对Android应用的批量打包,也算是了却了我的一桩心事.虽然网上的这部分教程也有,但是感觉写的不是详细.更为重要的是,各种方法之间的差异比较大,对于新手来说,各种方法之间的选择是极为痛苦的,一个方法一个方法的去实验,是很浪费时间的.因此,我想给大家提供一套完整的,详细的Ant打包Android应用的教程,方便大家的学习和以后

Android多渠道批量打包

如若感觉排版不舒服,请移步Android多渠道批量打包 1.为什么要进行多渠道打包? 安卓应用商店(一个商店也叫做一个渠道,如豌豆荚,360手机助手,应用宝)众多,大大小小几百个,每当我们发新版本时,需要将Android客户端分发到各个应用市场,为了统计这些市场的效果(下载量.活跃数等),需要有一种方法来唯一标识它们,所以才有了多渠道打包. 2.如何统计各个渠道的下载量.活跃数? 现在有比较成熟的第三方应用帮我们实现统计功能(比如友盟),统计的本质就是收集用户信息传输到后台,后台生成报表,帮助我

【Android开发经验】使用Ant批量打包Android应用全然指南

本文章由Socks完毕.博客地址:http://blog.csdn.net/zhaokaiqiang1992 转载请说明. 折腾了一下午.百度了一下午,最终实现了使用Ant对Android应用的批量打包,也算是了却了我的一桩心事.尽管网上的这部分教程也有,可是感觉写的不是具体. 更为重要的是.各种方法之间的差异比較大.对于新手来说.各种方法之间的选择是极为痛苦的,一个方法一个方法的去实验,是非常浪费时间的. 因此,我想给大家提供一套完整的,具体的Ant打包Android应用的教程,方便大家的学习