博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解析apk、ipa应用程序包,获得包名、应用程序名、版本号等信息。
阅读量:5901 次
发布时间:2019-06-19

本文共 3495 字,大约阅读时间需要 11 分钟。

hot3.png

package com.shark.apptool.server.utils;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.InputStream;

import java.util.HashMap;

import java.util.Map;

import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;

import java.util.zip.ZipInputStream;

import org.apkinfo.api.util.AXmlResourceParser;

import org.apkinfo.api.util.XmlPullParser;

import com.dd.plist.NSDictionary;

import com.dd.plist.NSNumber;

import com.dd.plist.NSObject;

import com.dd.plist.NSString;

import com.dd.plist.PropertyListParser;

/**

 * 解析apk、ipa应用程序包,获得包名、应用程序名、版本号等信息。

 * 2015.2.10

 * 

 */

public class PackageUtil {

/**

* 解析IPA文件

* 2015.2.10

*/

public static Map<String, Object> analysiIpa(InputStream is) {

// result map

Map<String, Object> resultMap = new HashMap<String, Object>();

try {

ZipInputStream zipIns = new ZipInputStream(is);

ZipEntry ze;

InputStream infoIs = null;

while ((ze = zipIns.getNextEntry()) != null) {

if (!ze.isDirectory()) {

String name = ze.getName();

if (name.endsWith(".app/Info.plist")) {

ByteArrayOutputStream _copy = new ByteArrayOutputStream();

// int read = 0;

int chunk = 0;

byte[] data = new byte[256];

while (-1 != (chunk = zipIns.read(data))) {

// read += data.length;

_copy.write(data, 0, chunk);

}

infoIs = new ByteArrayInputStream(_copy.toByteArray());

break;

}

}

}

NSDictionary rootDict = (NSDictionary) PropertyListParser

.parse(infoIs);

String[] keyArray = rootDict.allKeys();

for (String key : keyArray) {

NSObject value = rootDict.objectForKey(key);

if (key.equals("CFBundleSignature")) {

continue;

}

if (value.getClass().equals(NSString.class)

|| value.getClass().equals(NSNumber.class)) {

resultMap.put(key, value.toString());

}

}

zipIns.close();

} catch (FileNotFoundException e) {

resultMap.put("error", e.getStackTrace());

} catch (Exception e) {

resultMap.put("error", e.getStackTrace());

}

return resultMap;

}

/***

* apkFile

*            apk文件

*

*/

@SuppressWarnings({ "resource", "unchecked" })

public static Map<String, Object> analysiApk(File apkFile) {

ZipFile zipFile;

Map<String, Object> resultMap = new HashMap<String, Object>();

try {

zipFile = new ZipFile(apkFile);

ZipEntry zipEntry = zipFile.getEntry(("AndroidManifest.xml"));

AXmlResourceParser parser = new AXmlResourceParser();

parser.open(zipFile.getInputStream(zipEntry));

boolean flag = true;

while (flag) {

int type = parser.next();

if (type == XmlPullParser.START_TAG) {

int count = parser.getAttributeCount();

String action = parser.getName().toUpperCase();

if (action.equals("MANIFEST")

|| action.equals("APPLICATION")) {

Map<String, Object> tempMap = new HashMap<String, Object>();

for (int i = 0; i < count; i++) {

String name = parser.getAttributeName(i);

String value = parser.getAttributeValue(i);

value = value == null ? "" : value;

tempMap.put(name, value);

}

resultMap.put(action, tempMap);

} else {

Map<String, Object> application = (Map<String, Object>) resultMap

.get("APPLICATION");

Map<String, Object> manifest = (Map<String, Object>) resultMap

.get("MANIFEST");

if (manifest != null && application != null) {

flag = false;

}

continue;

}

}

}// end while

} catch (Exception e) {

Map<String, Object> errorMap = new HashMap<String, Object>();

errorMap.put("cause", e.getCause());

errorMap.put("message", e.getMessage());

errorMap.put("stack", e.getStackTrace());

resultMap.put("error", errorMap);

}

return resultMap;

}

 

 

}

转载于:https://my.oschina.net/zhougui/blog/523958

你可能感兴趣的文章
我的Android进阶之旅------&gt;解决Your project contains error(s),please fix them
查看>>
Alluxio源码分析读数据:打开文件(一)
查看>>
单例模式与线程安全问题浅析
查看>>
Xcode编译错误:code object is not signed at all
查看>>
.NET Core的日志[3]:将日志写入Debug窗口
查看>>
安全报告显示 2015 年 DDoS 攻击强度创新纪录
查看>>
使用jquery获取radio的值
查看>>
《Adobe After Effects CC 经典教程(彩色版)》——1.4 添加特效、修改图层属性...
查看>>
IDEA创建Maven Project图解
查看>>
Google China New Grad Test 2014 Round A Problem A
查看>>
Linux LVM学习总结——创建卷组VG
查看>>
图像直方图与直方图均衡化
查看>>
CUDA编程(一)第一个CUDA程序
查看>>
动态SQL应用小列子
查看>>
JMM和happens-before原则
查看>>
[j2me]二级菜单界面演练[三][0215update]
查看>>
git的几个小技巧
查看>>
C语言预处理命令之条件编译
查看>>
iOS开发之调用系统打电话发短信接口以及程序内发短信
查看>>
[Android]帧率测试
查看>>