本文原创,转载请注明博文地址: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的反射机制应该要更深入去了解。
分享到:
相关推荐
在Android平台上,获取手机上所有APK包名的需求通常是用于分析设备上安装的应用程序信息,例如统计应用数量、分析特定应用是否存在或者进行批量操作。这个过程涉及到对Android系统的权限访问以及对文件系统的操作。...
获取APK权限列表的方法主要有以下几种: 1. **使用Android SDK工具**: - `aapt`(Android Asset Packaging Tool)是Android SDK的一部分,可以用来解析APK文件。通过运行命令`aapt dump permissions <apk_path>`...
android获取未安装APK文件的图标 android开发技巧整理
而`GetApkInfo.jar`可能是一个已经封装好的工具类库,专门用于获取APK信息。 获取APK信息的具体步骤如下: 1. 使用`File`类创建一个指向APK文件的实例。 2. 创建`ZipFile`对象,将APK文件作为参数传入,这将允许...
在Android开发中,有时我们需要获取APK安装包的详细信息,比如应用的元数据、依赖库等。这个任务可以通过Java编程实现,不依赖于Android SDK的特定工具。本篇文章将详细讲解如何使用纯Java来读取Android APK的信息,...
而当涉及到与Android平台的交互时,C#也能通过各种手段实现,例如使用Unity3D进行跨平台开发或利用特定的库来获取APK(Android应用程序包)的信息。本篇文章将深入探讨如何使用C#获取安卓APK的各类信息,如版本号、...
本主题聚焦于"android安卓获取apk签名工具",这通常涉及到APK签名的概念、过程以及如何使用特定工具来完成这一任务。 **APK签名的重要性** 1. **验证开发者身份**:签名提供了一种方式,让用户知道应用的来源,...
在Android开发和软件测试中,了解如何获取APK的包名和主类名是一项重要的技能。这有助于测试人员定位应用程序的标识以及启动它的主要入口点。以下是对这一主题的详细阐述: 首先,APK包名是Android应用的唯一标识符...
在PHP环境中,我们可能需要获取APK文件的一些元数据信息,例如包名、应用名称、版本名称、支持的屏幕尺寸和语言等。这在自动化部署、应用分析或者构建与APK相关的服务时非常有用。以下是如何使用PHP来实现这些功能的...
总的来说,获取APK的元信息涉及Android的系统服务、`PackageManager`接口以及可能的资源解析。在实际开发中,这可能用于应用管理、市场分析、安全检查等多种场景。通过深入理解这些信息,开发者可以更好地控制和理解...
在Android平台上,一个APK应用启动另一个APK应用是一个常见的需求,这可能涉及到应用之间的交互、服务调用或者用户引导到不同的应用体验。这个过程主要依赖于Android的Intent机制,Intent是Android系统中用于组件间...
本文将详细讲解如何通过编程方式获取Android设备上已安装的apk信息,包括应用图标、应用名称、工程名(包名)以及安装路径。 首先,我们需要了解在Android SDK中提供了一个名为`PackageManager`的类,它是获取应用...
在Android平台上,开发和调试应用时,理解和检测设备接收到的键值事件是至关重要的。键值测试APK,如标题和描述中提到的"android测试键值apk",是专为这一目的设计的工具。它允许开发者查看并分析用户在物理键盘、...
Android APK 获取 Root 权限方法总结 Android APK 获取 Root 权限是一个复杂的技术难题,许多开发者和用户都遇到过这个问题。那么,如何使 Android APK 获取 Root 权限呢?今天,我们将总结一些常见的方法来获取 ...
其次,获取Apk应用信息主要包括应用的元数据、权限、签名信息以及资源信息等。以下是一些常用的方法: 1. **应用元数据**:`PackageManager`类提供了获取应用信息的方法,如`getPackageInfo(packageName, 0)`可以...
android hdmi 输入 apk 源码 文档 参考,rk3288 平台 硬件支持hdmiin,软件apk 源码参考
2. **调用API**:使用提供的API,例如`ApkInfo`类,来获取APK信息。一般情况下,这些API会提供一个方法,接受APK文件的路径作为参数,然后返回一个包含包名、版本代码和版本名称的对象。 ```java ApkInfo apkInfo...
获取APK信息是一项重要的任务,对于开发者来说,这有助于理解应用的构成、版本控制以及安全分析。本工具名为"获取APK信息工具",旨在智能地提取APK文件的各种元数据,帮助用户快速了解APK的相关属性。 首先,我们要...
在Android开发中,有时我们需要获取APK文件的详细信息,如应用名、版本号、权限等,这通常涉及对APK文件内部的AndroidManifest.xml文件进行解析。本篇将详细介绍如何仅使用Java代码,不依赖任何外部工具(如aapt)来...
综上所述,Android系统签名APK是Android平台上的一种高级权限获取方式,涉及到密钥管理、签名过程、权限验证等多个环节,对于系统开发者和维护者来说是至关重要的。同时,系统签名也需要遵循严格的流程和安全规范,...