其实这算是我用python写的第一个python脚本。技术含量并不高,写的比较low,高手就不要看了,但是确实我迈向python的第一步。由于部分原因,此次的文章中并不会把所有代码都贴出来,只是纪录一个简单的方法。还请见谅。
------------------------------------------------------------------------------------------------
需求说明:
1.这是一个批量出包工具
2.对一个微信已经被破解过的包进行修改,实现一台设备可以同时安装多个客户端
3.使用者可以通过往指定目录存放icon的方式实现更换原微信icon,相当于是美化作用
------------------------------------------------------------------------------------------------
一、实现icon替换
第一部分代码是我设置的文件夹路径,我通过os.path.exists(path)来判断用户存放icon的目录和微信客户端的icon目录是否有icon存在,如果有才使用os.system(cmd)来调用dos命令实现icon的替换
IconPath1 = 'C:\\weixin\\weixin2\\unknown\\r\h\\'IconPath2 = 'C:\\weixin\\weixin2\\unknown\\r\k\\'IconPath3 = 'C:\\weixin\\weixin2\\unknown\\r\p\\'IconPath4 = 'C:\\weixin\\weixin2\\unknown\\r\\v\\'IconName='icon.png'NewIcon1='C:\\weixin\\96\\'NewIcon2='C:\\weixin\\72\\'CmdDel = 'del 'CmdCopy='copy '#删除原目录icon文件if os.path.exists(IconPath1+IconName): os.remove(IconPath1+IconName)if os.path.exists(IconPath2+IconName): os.remove(IconPath2+IconName)if os.path.exists(IconPath3+IconName): os.remove(IconPath3+IconName)if os.path.exists(IconPath4+IconName): os.remove(IconPath4+IconName)print 'delete old icon'#导入新的icon资源if os.path.exists(NewIcon1+IconName): os.system(CmdCopy+NewIcon1+IconName+' '+IconPath1)if os.path.exists(NewIcon1+IconName): os.system(CmdCopy+NewIcon1+IconName+' '+IconPath2)if os.path.exists(NewIcon1+IconName): os.system(CmdCopy+NewIcon1+IconName+' '+IconPath3)if os.path.exists(NewIcon2+IconName): os.system(CmdCopy+NewIcon2+IconName+' '+IconPath4)print "use new icon successed"
二、修改可以使客户端多开的相应文件
因为部分原因,这里就不多做介绍了,这里可以看到,我对文件内容进行了逐行读取,并且使用了切片的方式,对每一行进行了相应修改(修改内容并不全在下面的代码中,部分代码未贴出,只是纪录一下修改文件的方法)。
#修改AndroidManifest.xmlAndroidManifest = open('C:\\weixin\\weixin2\\AndroidManifest.xml' , 'r+')list = AndroidManifest.readlines()list[2]='\n'list[3]=' \n'list[4]=' \n'list[5]=' \n'list[6]=' \n'list[8]=' \n'AndroidManifest=open("C:\\weixin\\weixin2\\AndroidManifest.xml", "w+")AndroidManifest.writelines(list)AndroidManifest.close()print 'AndroidManiFest.xml changed'#修改apktool.yml文件apktool=open('C:\\weixin\\weixin2\\apktool.yml' , 'r+')list1=apktool.readlines()list1[1]='apkFileName: weixin'+str(parameter)+'.apk\n'list1[11]='rename-manifest-package: com.tencen1.mm'+str(parameter)+'\n'apktool = open("C:\\weixin\\weixin2\\apktool.yml", "w+")apktool.writelines(list1)apktool.close()print 'apktool.yml changed'print 'back to package,wait...'
三、回包
回包的意思就是我已经修改好了,我需要调用一些命令去将修改好的文件变成.apk这样的可安装应用。依然是调用了系统命令,不过这次我使用的是os.open(cmd),这个函数和os.system(cmd)的作用其实是一样的,都是调用dos命令,不过既然函数长的不一样,还是有一定区别的,os.open(cmd)可以将命令执行并返回结果,可以看到我逐行读取了命令返回的结果,并使用for循环来逐行对返回的结果进行输出展示,可以让用户实时查看回包进度。
cmd='apktool b C:\\weixin\\weixin2'end =(os.popen(cmd).readlines())for result in end: print (result)
四、回包结束后将包转移目录
这里其实不需要多做解释,还是调用dos命令,因为我比较笨,能调用命令解决的问题绝对不会不调用命令。转移一下目录是为了让使用者更容易的找到安装包,而不是需要记住很多根目录一层一层往下找
moveApk='move C:\\weixin\\weixin2\\dist\\weixin'+str(parameter)+'.apk C:\\weixin\\ApkPackage'os.system(moveApk)print 'back to package successed,wait for signApk...'
五、签名,删除旧包,脚本结束
这里在脚本的编写方式上还是没有什么技术含量,但是对于签名命令的调用却是很重要的一个环节,这里调用了一个签名工具,这里不得不重点纪录一下,不然怕我这个笨脑子给忘掉了
原始命令应该为”java -jar signapk.jar testkey.x509.pem testkey.pk8 demo.apk demo(sign).apk”
signapk工具可以实现对安卓ROM和安卓应用进行签名,需要注意的是在使用signapk工具前需要安装java环境.
#签名signApk='java -jar C:\\weixin\\APKSign\\signapk.jar C:\\weixin\APKSign\\testkey.x509.pem C:\weixin\APKSign\\testkey.pk8 C:\\weixin\\ApkPackage\\weixin'+str(parameter)+'.apk C:\\weixin\\ApkPackage\\weixin'+str(parameter)+'(sign).apk'os.system(signApk)#删除ApkPacjage目录下未签名的安装包delOldApk='del C:\\weixin\\ApkPackage\\weixin'+str(parameter)+'.apk'os.system(delOldApk)print'----------signApk OK----------'