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版本号的更多相关文章

  1. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

  2. 2013第38周日Java文件上传下载收集思考

    2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...

  3. java图片上传(mvc)

    最近有开始学起了java,好久没写文章了,好久没来博客园了.最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的.后台接收用的是mvc.不墨迹了,直接上图. 先看目录结构.i ...

  4. java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载

    java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载 实现功能:zip文件上传,后台自动解压,Jstree树目录(遍历文件),editor.md预览 采用Spring+Sp ...

  5. Myeclipse10.7安装git插件并将Java项目上传到码云(github)

    注:本文来源:外匹夫的<Myeclipse10.7安装git插件并将Java项目上传到码云(github)> 一.先说说安装egit插件的步骤(安装egit不成功的原因主要是下载的egit ...

  6. Java ftp上传文件方法效率对比

    Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...

  7. java文件上传-原始的Servlet方式

    前言: 干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感 ...

  8. 将linux上的Java代码上传到码云

    将linux上的Java代码上传到码云 1.在linux上直接输入命令获取git sudo apt-get install git 显示资源被占用,按照图中方法强制安装 2.建立与教材配套的目录结构 ...

  9. 【Web应用】JAVA网络上传大文件报500错误

    问题描述 当通过 JAVA 网站上传大文件,会报 500 错误. 问题分析 因为 Azure 的 Java 网站都是基于 IIS 转发的,所以我们需要关注 IIS 的文件上传限制以及 requestT ...

随机推荐

  1. Spring mvc知识点总结——面试篇

    一.MVC思想MVC(Model-View-Controller)三元组的概念:1.Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数 ...

  2. 关于真多核和加多核&线程由哪几部分组成

    网上查的资料小结,没有考证. 真多核是指一个cpu多个核心,即多个内核. 假多核是指多个cpu捆绑形成的分布式计算,ARM针对服务器市场推出的处理器为多个cpu的 真多核的应用奔腾和因特尔 双核芯cp ...

  3. 删除/添加/调用WordPress用户个人资料的联系信息

    如果你要折腾主题或者将WordPress站点开放注册,你可能需要自定义WordPress用户个人资料信息.下面倡萌将简单说一下如何删除.添加和调用自定义用户信息字段. 添加或删除字段,可以在主题的 f ...

  4. ios safari input fixed 软键盘里的爱恨情仇

    请看第一题: 为什么我的input获取焦点后,被输入法遮住了. 解决办法: 源码: <!DOCTYPE html> <html lang="en"> < ...

  5. React学习笔记2017-12-31

    课程:https://coding.imooc.com/class/chapter/150.html 第一章:介绍 第二章:知识储备 React开发环境 1.安装Nodejs 2.安装Visual S ...

  6. 转:php防止sql注入的一点心得

    转:http://blog.csdn.net/sky_zhe/article/details/9702489 转:http://zhangxugg-163-com.iteye.com/blog/183 ...

  7. java 数组的基本概念

    1.数组的基本概念 数组指的是一组相关变量的集合.例如:如果说现在要定义100个整型变量,如果按照我们以前的思路,我们可能这样定义: public class demo { public static ...

  8. Redux学习之我对于其工作流程的理解和实践

      目录 1 工作流程图 2 各部位职责 3 Demo   1 工作流程图   2 各部位职责 我在理解这个流程图的时候,采用的是一种容易记住的办法,并且贴切实际工作职责. 我们可以把整个Redux工 ...

  9. Linux 下安装gmpy2

    GMP(GNU Multiple Precision Arithmetic Library,即GNU高精度算术运算库),它是一个开源的高精度运算库,其中不但有普通的整数.实数.浮点数的高精度运算,还有 ...

  10. asp.net core结合Gitlab-CI实现自动化部署

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在之前的文章中写过k8s+Jenkins+GitLab-自动化部署asp.net core项目 的topic,这次讲解一 ...