和Android的manifest.xml類似,ios中一個應用的版本信息,應用名稱,兼容的最低版本等等都在ipa包中的info.plist中列出,但是對於一個打包好ipa包,裡面的info.plist是亂碼的,想要獲取信息還是相當的麻煩。而最近也要到這方面的需求,找到的第一個方案是使用java調用linux 中的plutil工具來實現對info.plist的解析,這樣做雖然可以實現但感覺太牽強了,,第二個方案是繼續尋找純java的解決方案,找啊找最後還是在老外的一個網站上(overstackflow.com)上找到有人提這樣的問題,幸運的是還有很多哥們回復,老外果然是牛逼,最後照著做,可行了,具體的是找到了一個jar包,簡單調用一下就Ok,先貼一下代碼,對於怎樣從ipa中提取info.plist就不羅嗦了,使用zip流就可以搞定,提供一個別人弄好的實現參考一下就ok(http://code.google.com/p/sunlab/source/detail?r=339):
[java]
- import java.io.File;
-
- import com.dd.plist.PropertyListParser;
-
- public class Plist {
- public static void main(String[] args) throws Exception {
- File file = new File("d:\\angryInfo.plist");
- File file1 = new File("d:\\angryInfo1.plist");
-
- PropertyListParser.convertToXml(file, file1) ;
-
-
-
- //InputStream input = Plist.class.getClassLoader().getResourceAsStream("");
- // NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(file);
- //
- //
- //
- //
- // String name = rootDict.objectForKey("Name").toString();
- // NSObject[] parameters = ((NSArray) rootDict.objectForKey("Parameters")).getArray();
- // for (NSObject param : parameters) {
- //
- // System.out.println(param.toXMLPropertyList());
- //
- // if (param.getClass().equals(NSNumber.class)) {
- // NSNumber num = (NSNumber) param;
- // switch (num.type()) {
- // case NSNumber.BOOLEAN: {
- // boolean bool = num.boolValue();
- // // ...
- // break;
- // }
- // case NSNumber.INTEGER: {
- // long l = num.longValue();
- // // or int i = num.intValue();
- // // ...
- // break;
- // }
- // case NSNumber.REAL: {
- // double d = num.doubleValue();
- // // ...
- // break;
- // }
- // }
- // }
- // // else...
- // }
- }
- }
在d盤下找到angryInfo1.plist打開,已不是亂碼的了,現在想要提取啥信息就盡管提取。
用到的jar下載:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2012年資料/1月/14日/Java讀取ipa中info.plist獲取版本信息/