import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import cn.zsmy.constant.Constant; public class ApkUtil { private static final Namespace NS = Namespace.getNamespace("http://schemas.android.com/apk/res/android"); @SuppressWarnings({"unchecked", "rawtypes"}) public static ApkInfo getApkInfo(String apkPath){ ApkInfo apkInfo = new ApkInfo(); SAXBuilder builder = new SAXBuilder(); Document document = null; try{ document = builder.build(getXmlInputStream(apkPath)); }catch (Exception e) { e.printStackTrace(); } Element root = document.getRootElement();//跟节点-->manifest apkInfo.setVersionCode(root.getAttributeValue("versionCode",NS)); apkInfo.setVersionName(root.getAttributeValue("versionName", NS)); apkInfo.setApkPackage(root.getAttributeValue("package")); Element elemUseSdk = root.getChild("uses-sdk");//子节点-->uses-sdk apkInfo.setMinSdkVersion(elemUseSdk.getAttributeValue("minSdkVersion", NS)); List listPermission = root.getChildren("uses-permission");//子节点是个集合 List permissions = new ArrayList(); for(Object object : listPermission){ String permission = ((Element)object).getAttributeValue("name", NS); permissions.add(permission); } apkInfo.setUses_permission(permissions); Constant.MY_LOG.debug(" 版本号:"+apkInfo.getVersionCode()+" 版本名:"+apkInfo.getVersionName()+" 包名:"+apkInfo.getApkPackage()); //String str = " 版本号:"+versionCode+" 版本名:"+versionName+" 包名:"+packageName; Constant.MY_LOG.debug(root.getAttributes().toString()); return apkInfo; // String s = root.getAttributes().toString(); // String c[] = s.split(","); // String versionCode = null; // String versionName = null; // String packageName = null; // for(String a: c){ // if(a.contains("versionCode")){ // versionCode = a.substring(a.indexOf("versionCode="")+13, a.lastIndexOf(""")); // } // if(a.contains("versionName")){ // versionName = a.substring(a.indexOf("versionName="")+13, a.lastIndexOf(""")); // } // if(a.contains("package")){ // packageName = a.substring(a.indexOf("package="")+9, a.lastIndexOf(""")); // } // } // // Constant.MY_LOG.debug(" 版本号:"+versionCode+" 版本名:"+versionName+" 包名:"+packageName); // String str = " 版本号:"+versionCode+" 版本名:"+versionName+" 包名:"+packageName; //// return root.getAttributes().toString(); // return str; // return "ss"; } private static InputStream getXmlInputStream(String apkPath) { InputStream inputStream = null; InputStream xmlInputStream = null; ZipFile zipFile = null; try { zipFile = new ZipFile(apkPath); ZipEntry zipEntry = new ZipEntry("AndroidManifest.xml"); inputStream = zipFile.getInputStream(zipEntry); AXMLPrinter xmlPrinter = new AXMLPrinter(); xmlPrinter.startPrinf(inputStream); xmlInputStream = new ByteArrayInputStream(xmlPrinter.getBuf().toString().getBytes("UTF-8")); } catch (IOException e) { e.printStackTrace(); try { inputStream.close(); zipFile.close(); } catch (IOException e1) { e1.printStackTrace(); } } return xmlInputStream; } }
调用:
@ResponseBody @RequestMapping(value = "/getApkVersion", method = RequestMethod.POST) public String getApkVersion(VersionForm form, MultipartFile apkFile) throws Exception { Constant.MY_LOG.debug("获取上传的apk版本"); File apkTempFile = new File(DictInit.dictMap.get(Constant.Dict.APK_UPLOAD_PATH) + "temp.apk"); // File apkTempFile = new File("d:\temp.apk");//测试用 apkFile.transferTo(apkTempFile); // 获得apk信息 ApkInfo apkInfo = new ApkInfo(); apkInfo = ApkUtil.getApkInfo(apkTempFile.getPath()); return apkInfo.getVersionName(); }