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----------'
posted @ 2016-03-15 00:16  许忠慧  阅读(237)  评论(0编辑  收藏  举报