java解析ipa工具类

来源:互联网 发布:多益网络股价 编辑:程序博客网 时间:2024/05/21 17:38
package com.main.comm.util;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.ZipInputStream; 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应用程序包,获得包名、应用程序名、版本号等信息。 * * @author Eric.Sung * @date 2015.2.10 * */public class IpaUtil { public static String CFBundleDisplayName;//public static String CFBundleName;//public static String CFBundleVersion;//public static String CFBundleIdentifier;//public static String MinimumOSVersion;// /** * 解析IPA * @author Eric.Sung * @date 2015.2.10 */ public static Map analysiIpa(InputStream is) { // result map Map resultMap = new HashMap(); try { ZipInputStream zipIns = new ZipInputStream(is); ZipEntry ze; InputStream infoIs = null; System.out.println(zipIns.getNextEntry()); while ((ze = zipIns.getNextEntry()) != null) { if (!ze.isDirectory()) { String name = ze.getName(); if (name.contains("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()); if(ze.getName().split("/").length==3){ String [] array = name.split("/"); String targetName = array[2]; if(targetName.equalsIgnoreCase("Info.plist")){ 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; } /** * Test ipa * @author Eric.Sung * @date 2015.2.10 */ public static String setIpa(String url){ String data; try { File file = new File(url); InputStream is = new FileInputStream(file); Map result = analysiIpa(is); CFBundleDisplayName=(String) result.get("CFBundleDisplayName"); CFBundleName=(String) result.get("CFBundleName"); CFBundleVersion=(String) result.get("CFBundleVersion"); CFBundleIdentifier=(String) result.get("CFBundleIdentifier"); MinimumOSVersion=(String) result.get("MinimumOSVersion"); is.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } public String getCFBundleDisplayName() {return CFBundleDisplayName;}public String getCFBundleName() {return CFBundleName;}public String getCFBundleVersion() {return CFBundleVersion;}public String getCFBundleIdentifier() {return CFBundleIdentifier;}public String getMinimumOSVersion() {return MinimumOSVersion;} public static void main(String[] args) { IpaUtil m = new IpaUtil(); m.setIpa("C:/Users/Dell/Desktop/hx.ipa"); System.out.println("getCFBundleDisplayName:"+m.getCFBundleDisplayName()); System.out.println("getCFBundleName:"+m.getCFBundleName()); System.out.println("getMinimumOSVersion:"+m.getMinimumOSVersion()); System.out.println("getCFBundleIdentifier:"+m.getCFBundleIdentifier()); System.out.println("getCFBundleVersion:"+m.getCFBundleVersion());}}
0 0
原创粉丝点击