aapt 获取Android版本信息和图标
aapt android开发工具的一个命令行工具。
apk android的安装文件
下面是用python脚本获取版本 图标信息。O(∩_∩)O 有个问题呢,但是 ,先记录下。
#!/usr/bin/env python
#coding:utf-8import os,re,sys
import zipfile#检查apk版本号等信息
def getAppBaseInfo(apkFile, dstPath): get_info_command = "aapt dump badging %s" % ( apkFile ) output = os.popen(get_info_command).read() match = re.compile("package: name='(\S+)' versionCode='(\d+)' versionName='(\S+)'").match(output) if not match:print(output)raise Exception("can't get packageinfo")packagename = match.group(1)versionCode = match.group(2)versionName = match.group(3)launchableActivity =""appCnName =""appEnName = ""lines = output.splitlines()for l in lines:l = l.strip()if l.startswith("application-icon"):# print(l)iconInfo = l.split(":")if os.path.splitext(iconInfo[1])[1].startswith('.xml'):getIconFromXml(apkFile,dstPath,iconInfo)if os.path.splitext(iconInfo[1])[1].startswith('.png'):pngPath = iconInfo[1]pngPath = pngPath.replace("\'","")iconInfo[1] = pngPathgetIconFromPng(apkFile,dstPath,iconInfo)if l.startswith("launchable-activity"):launchableActivity = l.split("'")[1]lableName = l.split("'")[3]if appCnName == "":appCnName = lableNameif appEnName == "":appEnName = lableNameif l.startswith("application-label-zh-CN:") or l.startswith("application-label-zh:"):appCnName = l.split("'")[1]# print(l)if l.startswith("application-label-en"):appEnName = l.split("'")[1]apkInfo = u" 中文名:%s \n 英文名:%s \n 包名:%s \n 版本号:%s \n 版本名称:%s \n 启动类:%s " % (appCnName,appEnName,packagename, versionCode, versionName,launchableActivity)print(apkInfo)writeInfo(dstPath,apkInfo)
# 将apk的信息写入文本文件中
def writeInfo(dstPath,apkInfo):with open(dstPath+"/info.txt",'w') as f:f.write(apkInfo)# 从apk中提取出PNG图片
def getIconFromPng(apkFile,dstPath,iconInfo):z = zipfile.ZipFile(apkFile,'r')icon = z.read(iconInfo[1]) with open('%s/%s.png'%(dstPath,iconInfo[0]),'wb') as f:f.write(icon)
#通过aapt查询图片
def getIconFromXml(apkFile,dstPath,iconInfo):query_xml_command = "aapt dump xmltree %s %s" % ( apkFile ,iconInfo[1])print(query_xml_command)output = os.popen(query_xml_command).read()lines = output.splitlines()pngResId = ''for l in lines:l = l.strip()if(l.startswith('A: android:drawable')):pngResId = l.split("@0x")[1]print(pngResId)query_png_command = "aapt dump --values resources %s | grep -iC10 %s" % ( apkFile ,pngResId)print(query_png_command)output = os.popen(query_png_command).read()lines = output.splitlines()pngPath = ""for l in lines:l = l.strip()if(l.startswith("(string8) ")):pngPath = lprint("png l "+ l)pngPath = pngPath.replace("(string8) ","")pngPath = pngPath.replace("\"","")print("png path "+ pngPath)if os.path.splitext(pngPath)[1].startswith('.png'):breakiconInfo[1]=pngPathgetIconFromPng(apkFile,dstPath,iconInfo)if __name__=='__main__':if len(sys.argv)<3:print('format is python3 abc.py xxx.apk /extrat/to/dir ')exit(0)apkFile = sys.argv[1]dstPath = sys.argv[2]if not os.path.splitext(apkFile)[1] == '.apk':print('please input a xxx.apk')exit(0)if not os.path.isfile(apkFile):print(apkFile+' not found')exit(0)if not os.path.exists(dstPath):os.makedirs(dstPath)getAppBaseInfo(apkFile, dstPath)
aapt 获取Android版本信息和图标相关推荐
- 获取Android版本信息和电话信息
Android的版本信息可以通过android.os.Build获得,电话信息可以通过TelephonyManager获得,代码如下: private void get_infor(){ sdk = ...
- android开发获取手机,通过ADB获取Android手机信息,获取手机信息
通过ADB获取Android手机信息,获取手机信息 原文:https://blog.csdn.net/fasfaf454/article/details/51438743 1.获取手机系统信息( CP ...
- GetVersionEx 获取系统版本信息
转自:http://blog.csdn.net/yyingwei/article/details/8286658 最近在windows 8上获取系统版本信息需要调用系统API,于是用到了GetVers ...
- ansible playbook脚本获取系统版本信息
ansible playbook脚本获取系统版本信息 执行环境说明 脚本执行过程中实测系统为 redhat6.redhat7 suse11 suse12: [root@ansible_host ~]# ...
- linux获取bios版本号,在Windows中获取BIOS版本信息的4种方法 | MOS86
BIOS,或技术上称为基本输入和输出系统,是计算机中最重要的软件之一.它位于主板上,并管理硬件设备(如处理器,硬盘,图形卡等)之间的所有连接.主板制造商不时会发布BIOS或UEFI(统一可扩展固件接口 ...
- (1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe添加检查版本更新功能
笔者总结不容易点个关注吧 一键三联哦! 感谢您! python pyinstaller打包exe添加版本信息 打包并添加版本信息 注意!这里有个坑 如果第二次要修改版权信息 要将fi ...
- js 获取浏览器版本信息(全)
原文地址 js 获取浏览器版本信息(全) 觉得挺不错的,所以就收藏起来 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- 【转载】JS获取浏览器版本信息
document.write("js获取到的浏览器版本信息:");document.write("<br />");document.write(& ...
- iphone adb android,通过ADB获取Android手机信息
1.获取手机体系信息(CPU,厂商名称等) adbshell"cat/system/build.prop|grep"product"" 2.获取手机体系版别 a ...
最新文章
- PullToRefreshListView中嵌套ViewPager滑动冲突的解决
- leetcode面试题 08.08. 有重复字符串的排列组合(回溯)
- CSV 导入mysql 数据库
- 生产中k8s适合mysql_在K8S集群中构建复杂的MySQL单实例数据库
- python中的copy模块(浅复制和深复制)
- get和post方式提交中文乱码问题解决方案
- Bootstrap Table插件 页面跳转后再回来保存搜索的值
- python入门经典-入门python有什么好的书籍推荐?
- 使用分区表fstab永久挂载磁盘分区
- DISCUZ编辑器工具栏图标不显示
- 比起高性能计算,高端存储才更亟待国产化
- u盘有声音但是不显示怎么办?u盘不显示解决方案
- 计算体脂率,并给出评价
- QCA988x Windows7驱动安装方法
- Elasticsearch cardinality存在误差
- LNMP编译安装及应用(理论+实验)——详细步骤说明,看完可以尝试操作
- 短视频小程序,互联网新风口
- flutter底层原理和embedder的隐忧
- 为什么说“分布式架构”才是AR眼镜的未来
- 混合整数线性规划问题 Matlab