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();
}
java通过解析文件获取apk版本等信息的更多相关文章
- C#获取apk版本信息
获取很多人都会问我为什么要写这个博客,原因很简单,这次研发apk版本信息的时候网上查了很多的资料都没有这方面的信息,因此这次功能完了想写下方法,如果以后博友们遇到了可以直接copy,不用花很多的时间, ...
- Java 读取网络资源文件 获取文件大小 MD5校验值
Java 读取网络资源文件 获取文件大小 MD5校验值 封装一个文件操作工具类: package c; import java.io.*; import java.net.HttpURLConnect ...
- java上传文件获取跟目录的办法
在java中获得文件的路径在我们做上传文件操作时是不可避免的.web 上运行1:this.getClass().getClassLoader().getResource("/"). ...
- 获取apk的签名信息
在接入第三方功能时,经常要注册提交apk的签名信息 (sha1签名)?,下面列出相关步骤. 获取apk签名信息的步骤: 1)修改apk后缀名为zip,解压得到其中的META-INF文件夹; 2)把ME ...
- JavaScript获取浏览器版本等信息
** 不同浏览器版本可能存在差异,使用时请测试自己的环境 ** 测试时各个浏览器版本 IE: 11.953.14393.0 Edge: Microsoft Edge 38.14393.0.0;Micr ...
- [java] jsoup 解析网页获取省市区域信息
到国家统计局抓取数据, 到该class下解析数据 /** * jsoup解析网页 * @author xwolf * @date 2016-12-13 18:11 * @since V1.0.0 */ ...
- PHP获取APK的包信息
这段时间太忙了,一个月没有写博客了,稍微闲下来就感觉把在开发中遇到的问题记录下来 php上传安卓apk包的时候,需要获取安卓apk包内的信息 <?php /*解析安卓apk包中的压缩XML文件, ...
- Java使用反射来获取成员变量泛型信息
Java通过指定类对应的Class对象,程序可以获得该类里包括的所有Field,不管该Field使用private修饰,还是使用public修饰.获得了Field对象后,就可以很容易的获得该Field ...
- Java Web应用中获取用户请求相关信息,如:IP地址、操作系统、浏览器等信息
引入jar包 <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUti ...
随机推荐
- mahout分类
分类看起来比聚类和推荐麻烦多了 分类算法与聚类和推荐算法的不同:必须是有明确结果的,必须是有监督的,主要用于预测和检测 Mahout的优势 mahout的分类算法对资源的要求不会快于训练数据和测试数据 ...
- UVA 10817 Headmaster's Headache(DP +状态压缩)
Headmaster's Headache he headmaster of Spring Field School is considering employing some new teacher ...
- Linux C++服务器程序设计范式
<Unix网络编程>30章详细介绍了几种服务器设计范式.总结了其中的几种,记录一下: 多进程的做法: 1.每次创建一个新的请求,fork一个子进程,处理该连接的数据传输. 2.预先派生一定 ...
- 重要业务MySQL冷备解决方案
1.概述 在公司业务里面,当对应的业务数据不是很重要的时候,我们一般会简单的写个脚本,每天半夜把数据库数据全量拉取下来,备份到本地磁盘.但当业务比较重要的时候,这样简单操作会存在许多问题,比如本地磁盘 ...
- Dreamweaver安装jQuery插件jQuery_API.mxp
要让Dreamweaver支持jQuery自动提示代码功能,方法很简单,下载一个插件—jQuery_API.mxp[点击下载]. 在Dreamweaver里依次选择“命令” -> “扩展管理” ...
- AS3.0面向对象的写法,类和实例
package /*package是包路径,例如AS文件在ActionScript文件夹下,此时路径应为package ActionScript.必须有的.package中只能有一个class,在一个 ...
- 转:阿里开源Mysql分布式中间件:Cobar
原文来自于:http://hualong.iteye.com/blog/2102798 这几天研究了下Cobar, Cobar是阿里巴巴研发的关系型数据的分布式处理系统(Amoeba的升级版,该产品成 ...
- tcpdump 本机回环,应该用tcpdump -i lo
tcpdump 本机回环,应该用tcpdump -i lo
- API通常的url语法
?后面带的是get方式传递的值,如果有多个值,用 & 号分割.另外正式项目一般不用get方式传递,容易被人sql注入,即所谓的入侵. 详细看这篇http://www.cnblogs.com/k ...
- android和struts2实现android文件上传
1.开发准备如下2个工具类 package org.lxh.util; import java.io.BufferedReader; import java.io.InputStreamReader; ...