`
貌似掉线
  • 浏览: 261876 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

非android平台获取Apk的信息

阅读更多
本文原创,转载请注明博文地址:http://maosidiaoxian.iteye.com/blog/1340390或我的另一个博客:http://msdxblog.sinaapp.com/?p=266

最近在看如何获取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表示什么意思。

反省:
JUnit4要好好看看了。上次的视频只看了一集,这次有所需要而写测试,结果果然很糟糕。
Java的反射机制应该要更深入去了解。
0
0
分享到:
评论
2 楼 貌似掉线 2013-05-23  
xiaozhi6156 写道
又看到你的文章,真是无处不入啊..

你的评论确实在我的文章无处不入 ==!
1 楼 xiaozhi6156 2013-05-15  
又看到你的文章,真是无处不入啊..

相关推荐

    Android 获取手机所有apk包名

    在Android平台上,获取手机上所有APK包名的需求通常是用于分析设备上安装的应用程序信息,例如统计应用数量、分析特定应用是否存在或者进行批量操作。这个过程涉及到对Android系统的权限访问以及对文件系统的操作。...

    Android 获取apk声明的权限列表

    获取APK权限列表的方法主要有以下几种: 1. **使用Android SDK工具**: - `aapt`(Android Asset Packaging Tool)是Android SDK的一部分,可以用来解析APK文件。通过运行命令`aapt dump permissions <apk_path>`...

    android获取未安装APK文件的图标

    android获取未安装APK文件的图标 android开发技巧整理

    java获取apk的包名版本信息

    而`GetApkInfo.jar`可能是一个已经封装好的工具类库,专门用于获取APK信息。 获取APK信息的具体步骤如下: 1. 使用`File`类创建一个指向APK文件的实例。 2. 创建`ZipFile`对象,将APK文件作为参数传入,这将允许...

    C#获取安卓APK各类信息

    而当涉及到与Android平台的交互时,C#也能通过各种手段实现,例如使用Unity3D进行跨平台开发或利用特定的库来获取APK(Android应用程序包)的信息。本篇文章将深入探讨如何使用C#获取安卓APK的各类信息,如版本号、...

    java获取apk包名、版本、权限、图标、启动图等信息

    总的来说,获取APK的元信息涉及Android的系统服务、`PackageManager`接口以及可能的资源解析。在实际开发中,这可能用于应用管理、市场分析、安全检查等多种场景。通过深入理解这些信息,开发者可以更好地控制和理解...

    Java读取android apk信息

    在Android开发中,有时我们需要获取APK安装包的详细信息,比如应用的元数据、依赖库等。这个任务可以通过Java编程实现,不依赖于Android SDK的特定工具。本篇文章将详细讲解如何使用纯Java来读取Android APK的信息,...

    android安卓获取apk签名工具

    本主题聚焦于"android安卓获取apk签名工具",这通常涉及到APK签名的概念、过程以及如何使用特定工具来完成这一任务。 **APK签名的重要性** 1. **验证开发者身份**:签名提供了一种方式,让用户知道应用的来源,...

    安卓获取apk包名类名

    在Android开发和软件测试中,了解如何获取APK的包名和主类名是一项重要的技能。这有助于测试人员定位应用程序的标识以及启动它的主要入口点。以下是对这一主题的详细阐述: 首先,APK包名是Android应用的唯一标识符...

    php获取apk信息包名应用名版本

    在PHP环境中,我们可能需要获取APK文件的一些元数据信息,例如包名、应用名称、版本名称、支持的屏幕尺寸和语言等。这在自动化部署、应用分析或者构建与APK相关的服务时非常有用。以下是如何使用PHP来实现这些功能的...

    Android一个apk启动另外一个apk

    在Android平台上,一个APK应用启动另一个APK应用是一个常见的需求,这可能涉及到应用之间的交互、服务调用或者用户引导到不同的应用体验。这个过程主要依赖于Android的Intent机制,Intent是Android系统中用于组件间...

    Android获取已安装的apk信息

    本文将详细讲解如何通过编程方式获取Android设备上已安装的apk信息,包括应用图标、应用名称、工程名(包名)以及安装路径。 首先,我们需要了解在Android SDK中提供了一个名为`PackageManager`的类,它是获取应用...

    android测试键值apk(一个测试键值的apk,将apk安装到系统,操作键盘或者遥控器,会把相应键值打印出来).zip

    在Android平台上,开发和调试应用时,理解和检测设备接收到的键值事件是至关重要的。键值测试APK,如标题和描述中提到的"android测试键值apk",是专为这一目的设计的工具。它允许开发者查看并分析用户在物理键盘、...

    android apk获取root权限方法总结

    Android APK 获取 Root 权限方法总结 Android APK 获取 Root 权限是一个复杂的技术难题,许多开发者和用户都遇到过这个问题。那么,如何使 Android APK 获取 Root 权限呢?今天,我们将总结一些常见的方法来获取 ...

    android hdmi 输入 apk 源码 文档

    android hdmi 输入 apk 源码 文档 参考,rk3288 平台 硬件支持hdmiin,软件apk 源码参考

    Android系统信息和Apk应用信息获取

    其次,获取Apk应用信息主要包括应用的元数据、权限、签名信息以及资源信息等。以下是一些常用的方法: 1. **应用元数据**:`PackageManager`类提供了获取应用信息的方法,如`getPackageInfo(packageName, 0)`可以...

    获取APK信息工具

    获取APK信息是一项重要的任务,对于开发者来说,这有助于理解应用的构成、版本控制以及安全分析。本工具名为"获取APK信息工具",旨在智能地提取APK文件的各种元数据,帮助用户快速了解APK的相关属性。 首先,我们要...

    获取apk包名,版本号等信息的jar包

    2. **调用API**:使用提供的API,例如`ApkInfo`类,来获取APK信息。一般情况下,这些API会提供一个方法,接受APK文件的路径作为参数,然后返回一个包含包名、版本代码和版本名称的对象。 ```java ApkInfo apkInfo...

    纯java读取Apk信息,贡献全源码,可读取程序.apk中的AndroidManifest.xml所有信息

    在Android开发中,有时我们需要获取APK文件的详细信息,如应用名、版本号、权限等,这通常涉及对APK文件内部的AndroidManifest.xml文件进行解析。本篇将详细介绍如何仅使用Java代码,不依赖任何外部工具(如aapt)来...

    Android系统签名APK

    综上所述,Android系统签名APK是Android平台上的一种高级权限获取方式,涉及到密钥管理、签名过程、权限验证等多个环节,对于系统开发者和维护者来说是至关重要的。同时,系统签名也需要遵循严格的流程和安全规范,...

Global site tag (gtag.js) - Google Analytics