转载自:http://maosidiaoxian.iteye.com/blog/1340390
最近在看如何获取Android应用apk的一些信息,如版本号,使用的最低平台版本,使用的权限等等。无奈在网上看到的一些文章,讲到的基本上都是需要用到Context对象,需要在Android平台上运行。
于是转而看看有没有人写过这样的包并共享,在搜索中意外地在pudn发现一个貌似是我想要的东西。下载下来之后,发现src中的源码打开之后竟然是乱码,用反编译工具一看,果然真够恶心的,不想共享代码就算了,把bin文件夹中的.class文件更名为.java文件就放到src中。不管,继续看反编译后的代码,我只是学习而已。
虽然代码很让我纠结,比如类名首字母小写,某些方法名与类名一样,还有很纠结的try catch的使用就不说了。值得开心和要感谢作者的是,从那里我看到了最初我所想的办法的实现。于是决定自己也动手试试。
思路及过程:
1、百度得知apk也是使用了zip压缩。用ZipFile等相关类,读取apk文件,得到AndroidManifest.xml文件的InputStream。
2、然后使用AXMLPrinter2.jar进行将优化之后的AndroidManifest.xml恢复成原来xml结构的文件。本来是先把AndroidManifest.xml解压并生成解压后的文件,然后再采用命令行调用AXMLPrinter2的方法,后来一想,我只想得到apk信息,为什么还要生成这样的临时文件?看AXMLPrinter2的Manifest文件,知道它是运行里面的test.AXMLPrinter.class。
3、果然对这个工具进行反编译,拿到该文件的源码,看到它输出是调用里面的log()方法,在该方法中调用System.out.printf()及System.out.println()输出。
4、创建一个AXMLPrinter的类,代码与原来的基本相同,编写startXMLPrint(InputStream stream)及log()两个成员方法,代码与原来的main方法及log方法基本一样,调用原来的AXMLPrinter2中的类进行解析。但是直接将输入指定为InputStream,增加一个StringBuffer对象,输出到StringBuffer中。去掉了原来的main()及log()方法。当然,StringBuffer对象是私有的,还需要一个public StringBuffer getBuffer()方法返回输出的结果。
5、将StringBuffer对象转为InputStream对象,并用JDom进行解析。
6、解析得到apk的信息。
以上的代码已经完成。由于后天就要离校,这几天在准备着一些事情,时间匆促心又不定,代码写得很慢很乱,回头整理后再在这里和我的另一个博客msdxblog.sinaapp.com补上。
一开始是想采用这样的暴力方法。但是说实话,这样的方法太笨了。而且目前还没有办法在代码中实现得到apk的程序名及图标,所以一开始是打算用传说中的google android隐藏api来实现的。尝试下载android源码,在windows下不成功,笔记本当时没带到实验室,后来得到了我所需要的由源码编译得到的传说中的classes.jar。但是搞了半天才发现,我没有能力将它移植到不用activity。
对于我上述所实现或还没实现的功能,如果来访的高手有更灵巧的方法,请不吝赐教。
收获:
对java中的ZipFile等相关类有所了解,能够使用其解压文件。
学习了如何利用反射机制得到类里面的私有方法并调用。
知道了AndroidManifest.xml文件中的targetSdkVersion表示什么意思。
分享到:
相关推荐
android 自动获取用户手机上所有apk的包名,可根据需求进行修改。
获取android apk文件的基本信息,使用命令java -jar GetMorePackageInfo.jar qq.apk可以获取到qq.apk文件基本信息。
Android 获取apk声明的权限列表
android获取未安装APK文件的图标 android开发技巧整理
android安卓获取apk签名工具
Android系统信息和Apk应用信息获取
android hdmi 输入 apk 源码 文档 参考,rk3288 平台 硬件支持hdmiin,软件apk 源码参考
android测试键值apk(一个测试键值的apk,将apk安装到系统,操作键盘或者遥控器,会把相应键值打印出来)
获取Android设备上已安装的应用信息,包括图标,应用名称,工程名,安装路径等信息。
android apk获取root权限方法总结
具体使用方法可以参考相关博客:http://blog.csdn.net/i5suoi/article/details/19036975
Android系统信息和Apk应用信息获取.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
获取apk包名类名,将apk安装到手机或者模拟器可以获取当前app的包名类名
主要介绍了Android中获取apk安装包信息的方法,如图标、应用包名、版本、安装路径等,需要的朋友可以参考下
一个android读取apk信息的demo程序
获取apk应用的基本信息。可使用命令行java -jar getPackageInfo.jar qq.apk
通过异步获取手机已安装apk信息demo,整理测试正常运行
获取手机上装的软件信息
android获取MD5apk工具安装包