java通过解析文件获取apk版本等信息

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("\n版本号:"+apkInfo.getVersionCode()+"\n版本名:"+apkInfo.getVersionName()+"\n包名:"+apkInfo.getApkPackage());
//String str = "\n版本号:"+versionCode+"\n版本名:"+versionName+"\n包名:"+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("\n版本号:"+versionCode+"\n版本名:"+versionName+"\n包名:"+packageName);
// String str = "\n版本号:"+versionCode+"\n版本名:"+versionName+"\n包名:"+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();
}
上一篇:『重构--改善既有代码的设计』读书笔记----Replace Temp with Query


下一篇:开源OSS.Social微信项目进阶介绍