免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3266 | 回复: 1
打印 上一主题 下一主题

非android平台获取Apk的信息 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-11 16:11 |只看该作者 |倒序浏览
非android平台获取Apk的信息







最近在看如何获取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解压并生成解压后的文件,然后再采用命令行调用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表示什么意思。

反省:
JUnit4要好好看看了。上次的视频只看了一集,这次有所需要而写测试,结果果然很糟糕。
Java的反射机制应该要更深入去了解。

论坛徽章:
0
2 [报告]
发表于 2012-01-11 22:34 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP