一.什么是aapt:
aapt Android Asset Packaging Tool android的一个资源打包工具
二.配置aapt路径:
aapt这个工具,在sdk的build-tools下,所以一般配置好sdk就可以使用该工具。
或者单独下载aapt这个工具,在环境变量path中添加aapt的路径。
aapt v查看aapt版本号,确认aapt是否配置好
三.aapt的使用
学习过程中没有涉及到很深的aapt的具体使用
主要应用:
aapt l
简单的罗列压缩文件中每一项的内容
aapt l -v XXX.apk
列表方式详细标识出压缩文件中的每一项和很多参数
Length 原始文件参数
Date 日期
Time 时间
Name 名称
Method压缩方法,Deflate及Stored两种,即该Zip目录采用的算法是压缩模式还是存储模式
Ratio 压缩率
Size 压缩省掉的大小
CRC-32 循环冗余校验 这个计算是特定的算法的
offset:zipfile中偏移量的意思
aapt l -a
详细输出压缩文件中所有目录的内容
aapt dump strings
打印apk中所有string资源表
aapt dump badging
查看apk中的配置信息
四.具体实现
通过aapt来完成对上传的apk进行二次验证,并提取对应的包名,版本号、版本名,icon图标在apk中的地址等信息
1 def apkParseMessage(apkFilePath,apptResultPath): 2 apkMessage = {} 3 cmd = "D:/aapt d badging %s > %s"%(apkFilePath,apptResultPath) 4 os.popen(cmd) 5 time.sleep(1) 6 f = open(apptResultPath,"r",encoding = 'utf-8') 7 result =f.read() 8 #匹配packagename 9 parrenPackageName = re.compile("package: name='(.*?)'") 10 packageName = re.findall(parrenPackageName,result) 11 print(packageName) 12 apkMessage.setdefault("packageName",packageName[0]) 13 #匹配当前apk版本号 14 parrenVersionCode = re.compile("versionCode='(.*?)'") 15 versionCode = re.findall(parrenVersionCode,result) 16 apkMessage.setdefault("versionCode",versionCode[0]) 17 #匹配当前apk版本名 18 parrenVersionName = re.compile("versionName='(.*?)'") 19 versionName = re.findall(parrenVersionName,result) 20 apkMessage.setdefault("versionName",versionName[0]) 21 parrenName = re.compile("application-label:'(.*?)'") 22 apkName = re.findall(parrenName,result) 23 apkMessage.setdefault("Name",apkName[0]) 24 #parrenIcon = re.compile("application-icon-480:'(.*?)'") 25 #匹配当前apk的icon图标存储位置 26 parrenIcon = re.compile("icon='(.*?)'") 27 apkIcon = re.findall(parrenIcon,result) 28 apkMessage.setdefault("Icon",apkIcon[0]) 29 print(apkMessage) 30 f.close() 31 32 return apkMessage
再通过python的zipfile库中的方法将icon图标读取出来,已被前台显示。
1 def downLoadIcon(apkFilePath,saveIconPath,apkMessage): 2 IconPath = apkMessage['Icon'] 3 print(apkMessage['Icon']) 4 zip = zipfile.ZipFile(apkFilePath) 5 6 iconData = zip.read(IconPath) 7 with open(saveIconPath,'wb') as IconFile: 8 IconFile.write(iconData) 9 zip.close() 10 return IconFile