纯Java环境解析apk文件信息

在纯Java的环境下解析apk文件的内容,这篇博客只说明一下解决这个问题需要注意的地方:

1、工具选择:

     熟悉android的同学都知道,sdk中有一个软件叫aapt.exe,我所选择的解析工具就是它,之前我也从网上找过用AXMLPrinter2.jar+jdom.jar的方式来反编译XML文件,并解析它;具体可去网上搜查一下,但是这种方法只能满足我的一部分需求,在获取图标Icon文件的时候不行了,我不知道是我代码的问题还是什么,反正纠结了好久,最后只好寻求另外的方法;

     所以,我使用了android自带的aapt工具来解析

2、注意事项:

     (1)aapt工具在windows环境是aapt.exe文件,在linux环境是aapt文件,具体可去官网下载

     (2)linux和windows环境使用的命令是不同的,这里我只简单贴一下代码,并没有封装

        private Process mBuilder;
	Runtime rt = Runtime.getRuntime();
	private static final String SPLIT_REGEX = "(: )|(=')|(' )|'";
	private static final String FEATURE_SPLIT_REGEX = "(:')|(',')|'";
	/**
	 * aapt所在的目录。
	 */
	private String mAaptPath = "D:\\App\\";//winOS
	//private String mAaptPath = "/app/upa/tools/";//linux
	/***
	 * apkPath
	 */
	static String apkPath = "D:/laiwang_4.5.2.apk";
	//static String apkPath = "";

	/**
	 * 返回一个apk程序的信息。
	 * 
	 * @param apkPath
	 *            apk的路径。
	 * @return apkInfo 一个Apk的信息。
	 */
	public ApkInfo getApkInfo(String apkPath) throws Exception {
		String order = mAaptPath + "aapt.exe" + " d badging \"" + apkPath
				+ "\"";
		/*String order = mAaptPath + "aapt" + " d badging \"" + apkPath
				+ "\"";
		String[] cmds = new String[]{"sh","-c",order};
		System.out.println(order);*/
		Process proc = rt.exec(order);
		//Process proc = rt.exec(cmds);
		InputStream is = null;
		is = proc.getInputStream();
		BufferedReader br = new BufferedReader(
				new InputStreamReader(is, "utf8"));
		String tmp = br.readLine();
		try {
			if (tmp == null || !tmp.startsWith("package")) {
				throw new Exception("参数不正确,无法正常解析APK包。输出结果为:\n" + tmp + "...");
			}
			ApkInfo apkInfo = new ApkInfo();
			do {
				setApkInfoProperty(apkInfo, tmp);
			} while ((tmp = br.readLine()) != null);
			return apkInfo;
		} catch (Exception e) {
			throw e;
		} finally {
			proc.destroy();
			closeIO(is);
			closeIO(br);
		}
	}


     (3) 对于获取apk文件的icon图标,这里使用io流,写入文件

      IconUtil.extractFileFromApk(apkPath, apkInfo.getApplicationIcon(),
"D:\\icon.png");

下面贴上信息摘要,而且在D盘根目录下会有icon.png图标生成


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值