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
简单的罗列压缩文件中每一项的内容
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中的地址等信息
def apkParseMessage(apkFilePath,apptResultPath):
apkMessage = {}
cmd = "D:/aapt d badging %s > %s"%(apkFilePath,apptResultPath)
os.popen(cmd)
time.sleep(1)
f = open(apptResultPath,"r",encoding = 'utf-8')
result =f.read()
#匹配packagename
parrenPackageName = re.compile("package: name='(.*?)'")
packageName = re.findall(parrenPackageName,result)
print(packageName)
apkMessage.setdefault("packageName",packageName[0])
#匹配当前apk版本号
parrenVersionCode = re.compile("versionCode='(.*?)'")
versionCode = re.findall(parrenVersionCode,result)
apkMessage.setdefault("versionCode",versionCode[0])
#匹配当前apk版本名
parrenVersionName = re.compile("versionName='(.*?)'")
versionName = re.findall(parrenVersionName,result)
apkMessage.setdefault("versionName",versionName[0])
parrenName = re.compile("application-label:'(.*?)'")
apkName = re.findall(parrenName,result)
apkMessage.setdefault("Name",apkName[0])
#parrenIcon = re.compile("application-icon-480:'(.*?)'")
#匹配当前apk的icon图标存储位置
parrenIcon = re.compile("icon='(.*?)'")
apkIcon = re.findall(parrenIcon,result)
apkMessage.setdefault("Icon",apkIcon[0])
print(apkMessage)
f.close() return apkMessage
再通过python的zipfile库中的方法将icon图标读取出来,已被前台显示。
def downLoadIcon(apkFilePath,saveIconPath,apkMessage):
IconPath = apkMessage['Icon']
print(apkMessage['Icon'])
zip = zipfile.ZipFile(apkFilePath) iconData = zip.read(IconPath)
with open(saveIconPath,'wb') as IconFile:
IconFile.write(iconData)
zip.close()
return IconFile
aapt的具体使用的更多相关文章
- Description Resource Path Location Type Error executing aapt: Return code -1073741819 Client line 1
Logcat报错:Description Resource Path Location Type Error executing aapt: Return code -1073741 ...
- Xamarin Error cannot find ‘aapt.exe’
Problem: solution: A workaround is to copy your files to the old directory. Just copy the aapt ...
- Cannot find `aapt.exe`. Please install the Android SDK Build-tools package
Google has updated their SDK tools ("Android SDK Tools" Rev. 23) in a way that also requir ...
- aapt命令介绍及常用命令实践
D:\>aapt -h ERROR: Unknown command '-h' Android Asset Packaging Tool Usage: aapt l[ist] [-v] [-a] ...
- Monkey 使用aapt查看apk包名
使用aapt //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下1.以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging ...
- 快速分析apk工具aapt的使用
前面walfred已经介绍了使用apktool对apk进行逆向编译,通过apktool我们的确可以反编译已经序列化后的AndroidManifest.xml和资源文件等等,但是有没有一种快速有效的工具 ...
- Unparsed aapt error(s)! Check the console for output解决方法
在Eclipse平台进行Android 应用开发时,编辑,修改或增删 res/下资源文件时有时会遇到如下错误提示:“Unparsed aapt error(s)! Check the console ...
- aapt aidl
AIDL:Android Interface Definition Language,即Android接口定义语言 aapt即Android Asset Packaging Tool,在SDK的bui ...
- Xamarin.Android提示aapt退出,代码为255
Xamarin.Android提示aapt退出,代码为255 错误信息:”aapt.exe”已退出,代码为255.出现这种问题,通常是由于该项目所使用Android SDK不完整.通过SDK Mana ...
- Error executing aapt: Return code -1073741819
在做andrid项目的时候,本来想把a项目中的a功能模块复制到b项目中,但是复制过程中出现xml文件id的问题, Error executing aapt: Return code -10737418 ...
随机推荐
- 【原创】为什么Redis集群有16384个槽
引言 我在<那些年用过的Redis集群架构(含面试解析)>一文里提到过,现在redis集群架构,redis cluster用的会比较多. 如下图所示 对于客户端请求的key,根据公式HAS ...
- Unity Editor已停止工作
在更换系统之后,可能会出现打开刚安装好的Unity,显示Unity Editor已停止工作,这时候我们考虑是系统win7的问题.可以在原系统上升级,也可以重新安装,升级.文中所涉及到的软件,可在右侧加 ...
- HDU 5135
题意略. 思路: 本题开始我先写了一发dfs暴力,然而递归程度太深,导致爆栈.仔细回想一下dfs的过程,发现最不好处理的就是每收集到3个木棍,才能构成一个三角形. 并且,还有一个隐患就是不能完全枚举出 ...
- Lock同步锁
Lock同步锁 一.前言 在Java 5.0 之前,协调共享对象的访问时可以使用的机制只有synchronized 和volatile .Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁 ...
- 使用wait/notify/notifyAll实现线程间通信的几点重要说明
在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信.在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调 ...
- GCN和GCN在文本分类中应用
1.GCN的概念 传统CNN卷积可以处理图片等欧式结构的数据,却很难处理社交网络.信息网络等非欧式结构的数据.一般图片是由c个通道h行w列的矩阵组成的,结构非常规整.而社交网络.信息网络 ...
- vmware中设置ubuntu静态ip
概括一下过程中遇到的三个问题: 1.如何修改虚拟机为静态ip并且生效 2.设置完静态ip后,无法上网 3.设置完静态ip且能上网后,宿主机无法ping通虚拟机 问题1:参考https://www.ji ...
- 手把手教你用深度学习做物体检测(七):YOLOv3介绍
YOLOv3 论文:< YOLOv3: An Incremental Improvement > 地址: https://arxiv.org/pdf/1804.02767.pdfyolov ...
- XML序列化CDATA
不可避免的遇到对接需要使用XML文档的第三方系统,某些节点内容特殊,序列化时需特殊处理,解决方案是实现IXmlSerializable接口. /// <summary> /// Perso ...
- Day003_Linux基础——系统目录结构
Linux系统的目录结构: 圆型节点代指目录,方型节点代指文件. 图中省去了很多不常用的目录与文件. 稍后单独讲/proc目录与/var目录. /usr 目录. /usr/local 用户个人安装的软 ...