aapt的具体使用

一.什么是aapt:

  aapt Android Asset Packaging Tool android的一个资源打包工具

二.配置aapt路径:

  aapt这个工具,在sdk的build-tools下,所以一般配置好sdk就可以使用该工具。

  或者单独下载aapt这个工具,在环境变量path中添加aapt的路径。

  aapt v查看aapt版本号,确认aapt是否配置好

三.aapt的使用

  学习过程中没有涉及到很深的aapt的具体使用

  主要应用:

  aapt l

    简单的罗列压缩文件中每一项的内容

扫描二维码关注公众号,回复: 426346 查看本文章

  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

猜你喜欢

转载自www.cnblogs.com/newliu/p/9019378.html