Java解析IOS IPA文件
来源:互联网 发布:mac解压带密码的rar 编辑:程序博客网 时间:2024/05/01 13:23
参考文档:http://my.oschina.net/heweipo/blog/382942
IOS IPA文件中包含Info.plist文件,类似于Android的AndroidManifest.xml,因此想获取IOS版本相关信息,就需要解析其Info.plist文件。参考文档中有详细的描述,但编译不过,调用的函数名搞错了,以如下代码为准。
public class IpaUtil{ /** * 解压IPA文件,只获取IPA文件的Info.plist文件存储指定位置 * @param file zip文件 * @param unzipDirectory 解压到的目录 * @throws Exception */ private static File getZipInfo(File file, String unzipDirectory) throws Exception{ // 定义输入输出流对象 InputStream input = null; OutputStream output = null; File result = null; File unzipFile = null; ZipFile zipFile = null; try{ // 创建zip文件对象 zipFile = new ZipFile(file); // 创建本zip文件解压目录 String name = file.getName().substring(0, file.getName().lastIndexOf(".")); unzipFile = new File(unzipDirectory + "/" + name); if(unzipFile.exists()){ unzipFile.delete(); } unzipFile.mkdir(); // 得到zip文件条目枚举对象 Enumeration<? extends ZipEntry> zipEnum = zipFile.entries(); // 定义对象 ZipEntry entry = null; String entryName = null; String names[] = null; int length; // 循环读取条目 while(zipEnum.hasMoreElements()){ // 得到当前条目 entry = zipEnum.nextElement(); entryName = new String(entry.getName()); // 用/分隔条目名称 names = entryName.split("\\/"); length = names.length; for(int v = 0; v < length; v++){ if(entryName.endsWith(".app/Info.plist")){ // 为Info.plist文件,则输出到文件 input = zipFile.getInputStream(entry); result = new File(unzipFile.getAbsolutePath() + "/Info.plist"); output = new FileOutputStream(result); byte[] buffer = new byte[1024 * 8]; int readLen = 0; while((readLen = input.read(buffer, 0, 1024 * 8)) != -1){ output.write(buffer, 0, readLen); } break; } } } } catch(Exception ex){ ex.printStackTrace(); } finally{ if(input != null){ input.close(); } if(output != null){ output.flush(); output.close(); } // 必须关流,否则文件无法删除 if(zipFile != null){ zipFile.close(); } } // 如果有必要删除多余的文件 if(file.exists()){ file.delete(); } return result; } /** * IPA文件的拷贝,把一个IPA文件复制为Zip文件,同时返回Info.plist文件 参数 oldfile 为 IPA文件 */ private static File getIpaInfo(File oldfile) throws IOException{ try{ int byteread = 0; String filename = oldfile.getAbsolutePath().replaceAll(".ipa", ".zip"); File newfile = new File(filename); if(oldfile.exists()){ // 创建一个Zip文件 InputStream inStream = new FileInputStream(oldfile); FileOutputStream fs = new FileOutputStream(newfile); byte[] buffer = new byte[1444]; while((byteread = inStream.read(buffer)) != -1){ fs.write(buffer, 0, byteread); } if(inStream != null){ inStream.close(); } if(fs != null){ fs.close(); } // 解析Zip文件 return getZipInfo(newfile, newfile.getParent()); } } catch(Exception e){ e.printStackTrace(); } return null; } /** * 通过IPA文件获取Info信息 */ public static Map<String, String> getVersionInfo(File ipa) throws Exception{ File file = getIpaInfo(ipa);Map<String,String> map = new HashMap<String,String>();// 需要第三方jar包dd-plist NSDictionary rootDict = (NSDictionary)PropertyListParser.parse(file); // 应用包名 NSString parameters = (NSString)rootDict.objectForKey("CFBundleIdentifier"); map.put("CFBundleIdentifier", parameters.toString()); // 应用名称 NSString parameters = (NSString)rootDict.objectForKey("CFBundleName"); map.put("CFBundleName", parameters.toString());// 应用版本 parameters = (NSString)rootDict.objectForKey("CFBundleVersion"); map.put("CFBundleVersion", parameters.toString());// 应用展示的名称 parameters = (NSString)rootDict.objectForKey("CFBundleDisplayName"); map.put("CFBundleDisplayName", parameters.toString()); // 应用所需IOS最低版本 parameters = (NSString)rootDict.objectForKey("MinimumOSVersion"); map.put("MinimumOSVersion", parameters.toString()); // 如果有必要,应该删除解压的结果文件file.delete(); file.getParentFile().delete(); return info; }}
如果用Maven,可以在pom文件中加入如下xml,获取到第三方包dd-plist:
<dependency><groupId>com.googlecode.plist</groupId><artifactId>dd-plist</artifactId><version>1.16</version></dependency>如果想直接获取到此jar包,可以在此处下载:http://download.csdn.net/detail/ruyi366/9149741
1 0
- Java解析IOS IPA文件
- iOS ipa包解析
- [IOS]生成IPA文件
- iOS打包IPA 文件
- iOS安装ipa文件
- iOS打包IPA文件
- iOS;ipa文件反编译
- ios 生成IPA文件
- ios ipa文件反编译
- iOS打包成.ipa文件
- iOS如何制作ipa文件
- IOS程序打包ipa文件
- IOS 打包成Ipa 文件
- java解析ipa工具类
- iOS怎么安装ipa文件?iOS安装ipa方法教程
- iOS怎么安装ipa文件?iOS安装ipa方法教程
- iOS获取ipa素材、提取ipa资源图片文件
- ios学习--iphone ipa打包文件制作
- Hive的数据存储模式
- 华为题库-计算机网络
- MyEclipse使用总结——MyEclipse10安装SVN插件
- 深入探索透视投影变换
- [java学习笔记]一切都是对象
- Java解析IOS IPA文件
- 解决git pull时出现的几个问题
- java.lang.UnsupportedClassVersionError: com/wxm/framework/listener/SessionLi
- PHP0920基础班人数超110人再创纪录,实力比比就知道
- 开车经验
- JAVA英文单词
- Android读取、加入联系人
- URL转码
- Organize resource in Android