java自动识别上传的apk版本号
import java.util.List;
public class ApkInfo {
private String versionCode;
private String versionName;
private String apkPackage;
private String minSdkVersion;
private String apkName;
@SuppressWarnings("rawtypes")
private List uses_permission;
public ApkInfo() {
versionCode = null;
versionName = null;
apkPackage = null;
minSdkVersion = null;
apkName = null;
uses_permission = null;
}
public String getVersionCode() {
return versionCode;
}
public void setVersionCode(String versionCode) {
this.versionCode = versionCode;
}
public String getVersionName() {
return versionName;
}
public void setVersionName(String versionName) {
this.versionName = versionName;
}
public String getApkPackage() {
return apkPackage;
}
public void setApkPackage(String apkPackage) {
this.apkPackage = apkPackage;
}
public String getMinSdkVersion() {
return minSdkVersion;
}
public void setMinSdkVersion(String minSdkVersion) {
this.minSdkVersion = minSdkVersion;
}
public String getApkName() {
return apkName;
}
public void setApkName(String apkName) {
this.apkName = apkName;
}
@SuppressWarnings({ "rawtypes"})
public List getUses_permission() {
return uses_permission;
}
@SuppressWarnings({ "rawtypes"})
public void setUses_permission(List uses_permission) {
this.uses_permission = uses_permission;
}
public String toString() {
// return (new StringBuilder("ApkInfo [versionCode=")).append(versionCode)
// .append(", versionName=").append(versionName).append(
// ", apkPackage=").append(apkPackage).append(
// ", minSdkVersion=").append(minSdkVersion).append(
// ", apkName=").append(apkName).append(
// ", uses_permission=").append(uses_permission).append(
// "]").toString();
return (new StringBuilder("&version="+versionName+"&versioncode="+versionCode)).toString();
}
}
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;
} }
java自动识别上传的apk版本号的更多相关文章
- 小兔Java教程 - 三分钟学会Java文件上传
今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...
- 2013第38周日Java文件上传下载收集思考
2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...
- java图片上传(mvc)
最近有开始学起了java,好久没写文章了,好久没来博客园了.最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的.后台接收用的是mvc.不墨迹了,直接上图. 先看目录结构.i ...
- java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载
java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载 实现功能:zip文件上传,后台自动解压,Jstree树目录(遍历文件),editor.md预览 采用Spring+Sp ...
- Myeclipse10.7安装git插件并将Java项目上传到码云(github)
注:本文来源:外匹夫的<Myeclipse10.7安装git插件并将Java项目上传到码云(github)> 一.先说说安装egit插件的步骤(安装egit不成功的原因主要是下载的egit ...
- Java ftp上传文件方法效率对比
Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...
- java文件上传-原始的Servlet方式
前言: 干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感 ...
- 将linux上的Java代码上传到码云
将linux上的Java代码上传到码云 1.在linux上直接输入命令获取git sudo apt-get install git 显示资源被占用,按照图中方法强制安装 2.建立与教材配套的目录结构 ...
- 【Web应用】JAVA网络上传大文件报500错误
问题描述 当通过 JAVA 网站上传大文件,会报 500 错误. 问题分析 因为 Azure 的 Java 网站都是基于 IIS 转发的,所以我们需要关注 IIS 的文件上传限制以及 requestT ...
随机推荐
- svm和svr区别--摘自其它博客
学习笔记:SVM柔性边界的补充和SVR(支持向量回归) 作者 小刺猬yyx 关注 2016.08.06 10:31* 字数 1608 阅读 421评论 0喜欢 2 上一个笔记对于SVM不能完美分类的情 ...
- JavaScript 兼容性总结
请实现鼠标点击任意标签,alert该标签的名称(注意兼容性) function elementName(evt){ evt = evt|| window.event; var selected = ...
- (转载)使用curl 和 libjson 完成联网和数据解析
转载地址:http://my.oschina.net/cocosgame/blog/71181 libjson 编译和使用 - 3. libjson的C接口 API http://blog.csdn. ...
- linux中忘记root密码解决方案
方法一: 如果用户具有sudo权限,那么直接可以运行如下命令: #sudo su root #passwd #更改密码 或者直接运行sudo passwd root命令就可以直接更改root密码. 有 ...
- [实战]MVC5+EF6+MySql企业网盘实战(22)——图片列表
写在前面 实现逻辑是:单击图片节点,加载所有的当前用户之前上传的图片,分页,按时间倒序加载. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MyS ...
- 一、React Native 搭建开发环境(1)(Mac OS - IOS项目篇)
React Native是Facebook推出的一个开发IOS和安卓APP的技术.至于更多的详情,这里不再描述,大家可以自行百度它的定义. 原因:由于我想在一台电脑上同时开发IOS和Android两个 ...
- html5弹性布局两则,有交互。
要开发一个后台管理框架,要求如下效果. 然后开始找各种弹性布局啊什么的,用了flex写了一个,但是觉得不好,首先是兼容,其次它会破坏掉里面子元素的一些css特性,为了不给自己找麻烦我还是用传统写法吧. ...
- 十五oracle 触发器
一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需 ...
- vue引入Vue-Awesome
Vue-Awesome建立在Font Awesome上 v4.5.0,取决于Vue.js v2.0.1 +,所以安装了Vue-Awesome就可以直接使用Font Awesome的字体图标. 1.安装 ...
- 深入理解javascript作用域系列第三篇
前面的话 一般认为,javascript代码在执行时是由上到下一行一行执行的.但实际上这并不完全正确,主要是因为声明提升的存在.本文是深入理解javascript作用域系列第三篇——声明提升(hois ...