My Python Work 2
其实这算是我用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.xml AndroidManifest = open('C:\\weixin\\weixin2\\AndroidManifest.xml' , 'r+') list = AndroidManifest.readlines() list[2]='<permission android:name="com.tencen1.mm.plugin.permission.WRITE'+str(parameter)+'" android:protectionLevel="signature"/>\n' list[3]='<permission android:name="com.tencen1.mm.plugin.permission.READ'+str(parameter)+'" android:protectionLevel="signature"/>\n' list[4]='<permission android:name="com.tencen1.mm.permission.MM_MESSAGE'+str(parameter)+'" android:protectionLevel="signature"/>\n' list[5]='<uses-permission android:name="com.tencen1.mm.plugin.permission.READ'+str(parameter)+'"/>\n' list[6]='<uses-permission android:name="com.tencen1.mm.plugin.permission.WRITE'+str(parameter)+'"/>\n' list[8]='<uses-permission android:name="com.tencen1.mm.permission.MM_MESSAGE'+str(parameter)+'"/>\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----------'
- 本文为博主学习笔记,未经博主允许不得转载
- 本文仅供交流学习,请勿用于非法途径
- 本文仅是个人意见,如有想法,欢迎交流