python批量打多渠道包

来源:互联网 发布:jsp与php的区别 编辑:程序博客网 时间:2024/04/30 12:29

python批量打多渠道包

安卓市场太多,一个一个手动打包太累而且容易出错。

也有用ant打包的,来看看python的批量打包方式:


举个例子,如友盟(真心不是给他打广告)的多渠道统计


我们只是需要动态的修改这个channel_value,然后打包就可以了。


思路

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

2.使用apkTool解压apk包

3.根据渠道号修改channel_value

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

5.给未签名的apk包签名


这里选择使用python来实现这些功能,感谢金兄让我认识python(吐槽一下,python为什么没有大括号)

组织结构如下图:


其中channel为渠道号列表:


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

ApkTest.apk是未签名的apk包


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

[python] view plaincopy
  1. #!/usr/bin/python  
  2. # coding=utf-8  
  3. import os  
  4. import shutil  
  5.   
  6. def readChannelfile(filename):  
  7.     f = file(filename)  
  8.     while True:  
  9.         line = f.readline().strip('\n')  
  10.         if len(line) == 0:  
  11.             break  
  12.         else:  
  13.             channelList.append(line);  
  14.     f.close()  
  15.   
  16. def backUpManifest():  
  17.     if os.path.exists('./AndroidManifest.xml'):  
  18.         os.remove('./AndroidManifest.xml')  
  19.     manifestPath = './temp/AndroidManifest.xml'  
  20.     shutil.copyfile(manifestPath, './AndroidManifest.xml')  
  21.   
  22. def modifyChannel(value):  
  23.     tempXML = ''  
  24.     f = file('./AndroidManifest.xml')  
  25.     for line in f:  
  26.         if line.find('channel_value') > 0:  
  27.             line = line.replace('channel_value', value)  
  28.         tempXML += line  
  29.     f.close()  
  30.   
  31.     output = open('./temp/AndroidManifest.xml''w')  
  32.     output.write(tempXML)  
  33.     output.close()  
  34.       
  35.     unsignApk = r'./bin/%s_%s_unsigned.apk'% (easyName, value)  
  36.     cmdPack = r'java -jar apktool.jar b temp %s'% (unsignApk)  
  37.     os.system(cmdPack)  
  38.       
  39.     unsignedjar = r'./bin/%s_%s_unsigned.apk'% (easyName, value)  
  40.     signed_unalignedjar = r'./bin/%s_%s_signed_unaligned.apk'% (easyName, value)  
  41.     signed_alignedjar = r'./bin/%s_%s.apk'% (easyName, value)  
  42.     cmd_sign = r'jarsigner -verbose -keystore %s -storepass %s -signedjar %s %s %s'% (keystore, storepass, signed_unalignedjar, unsignedjar, alianame)  
  43.     cmd_align = r'zipalign -v 4 %s %s' % (signed_unalignedjar, signed_alignedjar)  
  44.     os.system(cmd_sign)  
  45.     os.remove(unsignedjar)  
  46.     os.system(cmd_align)  
  47.     os.remove(signed_unalignedjar)  
  48.       
  49.   
  50. channelList = []  
  51. apkName = 'ApkTest.apk'  
  52. easyName = apkName.split('.apk')[0]  
  53. keystore='./keystore/ApkTest.keystore'  
  54. storepass='123456'  
  55. alianame='ApkTest.keystore'  
  56.   
  57. output_apk_dir="./bin"  
  58. if os.path.exists(output_apk_dir):  
  59.     shutil.rmtree(output_apk_dir)  
  60.   
  61. readChannelfile('./channel')  
  62. print '-------------------- your channel values --------------------'  
  63. print 'channel list: ', channelList  
  64. cmdExtract = r'java -jar apktool.jar  d -f -s %s temp'% (apkName)  
  65. os.system(cmdExtract)  
  66.   
  67. backUpManifest()  
  68. for channel in channelList:  
  69.     modifyChannel(channel)  
  70.   
  71. if os.path.exists('./temp'):  
  72.     shutil.rmtree('./temp')  
  73. if os.path.exists('./AndroidManifest.xml'):  
  74.     os.remove('./AndroidManifest.xml')  
  75. print '-------------------- Done --------------------'  



执行也很简单  shell终端进入这个文件夹,执行python MakeTool.py就可以



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



0资源分下载:http://download.csdn.net/detail/luck_apple/5108421

关于python可以参考:http://woodpecker.org.cn/abyteofpython_cn/chinese/

0 0
原创粉丝点击