Java——ProcessBuilder类的使用及获取APK信息 素颜马尾好姑娘i 2022-08-05 12:18 143阅读 0赞 这次是想获取APK包的版本号,包名,大小等信息。其实有两种方法: 一种是: [纯JAVA环境获取APK信息(包名,版本,版本号,大小,权限...),纯JAVA语言编写PC端获取APK信息 。][JAVA_APK_..._JAVA_PC_APK_] 这篇文章是通过解析APK中的xml获取信息的。 其实还有另外一种方法是使用android开发工具里面的aapt.exe文件, C:/getapkinfo/aapt.exe d badging D:/new/test.apk 指定好aapt文件的路径 后面两个为参数 后面为apk包的位置。 这是在Dos窗口直接显示结果,如果想将结果导入到txt文件,可使用: C:/getapkinfo/aapt.exe d badging D:/new/test.apk>c:/test.txt 回到ProssBuilder类,我们需要通过ProssBuilder获取Process实例,API是这样描述的: The ProcessBuilder.start() and Runtime.exec methods create a native process and return an instance of a subclass of Process that can be used to control the process and obtain information about it. The class Process provides methods for performing input from the process, performing output to the process, waiting for the process to complete, checking the exit status of the process, and destroying (killing) the process. ProcessBuilder.start() 和Runtime.exec方法创建一个本地进程并且返回Process子类的实例,它能够用于控制进程和获取进程信息。Process类能够执行从进程输入,执行输出到进程,等待进程完成,检查进程退出状态和终结进程。 在之前写定时器的时候,其实就是用Runtime.exec这个方法直接进行命令操作。但是如果操作命令之后我们还要读取这个进程执行的信息怎么办呢,就需要用Process这个类获取了。 ProcessBuilder类的创建: ProcessBuilder pb = new ProcessBuilder(); Process实例的获取: Process p = pb.command("C:/getapkinfo/aapt.exe","d","badging","D:/new/test.apk").start(); 为什么要这样写:可以查看这篇:[ProcessBuilder异常CreateProcess error=2, ϵͳÕҲ»µ½ָ¶][ProcessBuilder_CreateProcess error_2_] 然后使用getInputStream连接子进程的输出: 但最终我们是需要读取整个输出信息,可以使用BufferedReader进行封装读取,但是BufferedReader的构造方法的参数为Reader,现在拿到的InputStream,思路在这里可能会断掉,因为流封装的关系经常忘,然后现在通过API又有了新思路,既然传递的参数类型为Reader类,那么根据多态性,Reader的子类也是可以进行传递的。 所以查找Reader并观察它下面有哪些子类,看着看着你会看到一个很眼熟的类——InputStreamReader,查看你构造方法,发现它刚好就是InputStreamReader(InputStream in)。 所以,一口气写出来: BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String s = ""; while((s=br.readLine())!= null){ System.out.println(s); } 中文乱码怎么办? 还有另外传入编码的构造方法:InputStreamReader(InputStream in, Charset cs)。 BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"UTF-8")); 整个源码实现: public class TestProcess { public static void main(String[] args) { ProcessBuilder pb = new ProcessBuilder(); try { Process p = pb.command("C:/getapkinfo/aapt.exe","d","badging","D:/new/test.apk").start(); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"UTF-8")); String s = ""; while((s=br.readLine())!= null){ System.out.println(s); } } catch (IOException e) { e.printStackTrace(); } } } 最后的结果: ![Center][] [JAVA_APK_..._JAVA_PC_APK_]: http://blog.csdn.net/chillax_li/article/details/41850863?utm_source=tuicool [ProcessBuilder_CreateProcess error_2_]: http://blog.csdn.net/iaiti/article/details/45268991 [Center]: /images/20220805/09046700e21c4df2bbe7c5079a6783fb.png
相关 使用Java反射API获取类信息示例 在Java中,Reflection API允许我们通过对象来查看和操作其内部属性。以下是一个简单的示例,演示如何使用 Reflection API 获取类的信息: ```ja 电玩女神/ 2024年09月15日 23:24/ 0 赞/ 3 阅读
相关 Java反射机制:如何动态获取类及方法信息 Java的反射机制允许我们在运行时检查类、接口和对象,以及它们的方法。以下是动态获取类及方法信息的基本步骤: 1. 获取类对象: ```java Class<?> 柔光的暖阳◎/ 2024年09月05日 17:06/ 0 赞/ 15 阅读
相关 获取.apk文件版本号、包名等信息 获取.apk文件信息 在日常开发版本迭代时,难免会出现一些情况,需要获取.apk文件的信息。 如: 在安装新版本的apk文件时,提示:系统已存在较高版本,此安装包 怼烎@/ 2022年10月29日 00:46/ 0 赞/ 512 阅读
相关 android获取APK签名信息及MD5指纹 http://www.g78.net/android-apk-signatures 1.获取APK的签名信息 <table> <tbody> <tr> 末蓝、/ 2022年08月27日 01:11/ 0 赞/ 326 阅读
相关 java 获取apk包 的版本信息 原理:解析AndroidManifest.xml文件 需要GetApkInifo.jar 和 ant.jar 两个包 ArrayList<ApkInfo 左手的ㄟ右手/ 2022年08月25日 01:53/ 0 赞/ 336 阅读
相关 Java——ProcessBuilder类的使用及获取APK信息 这次是想获取APK包的版本号,包名,大小等信息。其实有两种方法: 一种是: [纯JAVA环境获取APK信息(包名,版本,版本号,大小,权限...),纯JAV 素颜马尾好姑娘i/ 2022年08月05日 12:18/ 0 赞/ 144 阅读
相关 反射获取其他apk中类的变量和方法 TestErrorInfo.printClass(this, "com.android.bluetooth.opp.Constants"); pub 忘是亡心i/ 2022年06月14日 06:37/ 0 赞/ 176 阅读
相关 android从未安装的apk文件里获取信息(包信息,资源信息) 原文:[http://www.cnblogs.com/jayceli/archive/2012/04/12/2444255.html][http_www.cnblogs.com 今天药忘吃喽~/ 2022年05月20日 03:00/ 0 赞/ 186 阅读
相关 查看apk签名信息 查看apk 的签名信息 直接运行keytool命令时不可行的 需要配置keytool环境,将keytool.exe所在的目录配置到环境变量中,直接进入jdk的安装配置,也可以 川长思鸟来/ 2022年04月15日 02:11/ 0 赞/ 292 阅读
还没有评论,来说两句吧...