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. set -o vi AIX下shell

    set -o vi 再用esc+K键就可以使用上一条指令了 esc+kesc+j上下翻 ksh默认是emacs风格的.set -o emacs 在AIX下使用自己已经使用过的命令 在AIX下使用,默认 ...

  2. 湖南省第六届省赛题 Biggest Number (dfs+bfs,好题)

    Biggest Number 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 You have a maze with obstacles and non-zero di ...

  3. MVC公开课 – 2.查询,删除 (2013-3-15广州传智MVC公开课)

    查询 /Controller/HomeController.cs /// <summary> /// 查询 文章 列表 /// </summary> /// <retur ...

  4. JS模块化规范CMD之SeaJS

    1. 在接触规范之前,我们用模块化来封装代码大多为如下: ;(function (形参模块名, 依赖项, 依赖项) { // 通过 形参模块名 修改模块 window.模块名 = 形参模块名 })(w ...

  5. day5模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  6. 为什么可以这么快! awk 与python的应用

    这几天刚处理一个排序问题 源文件: 可以看到有11G大小,需要根据最后一列的热度来做一下排序.如果让你来做这样的排序,在linux环境下,你会如何处理呢? xch27@lanzhou:/asrdata ...

  7. (17) go 协程管道

    一.协程 二.管道

  8. c++ getline()

    #include <iostream>#include <string> int main (){ std::string name; std::cout << & ...

  9. 【2-SAT】The Ministers’ Major Mess UVALive – 4452

    题目链接:https://cn.vjudge.net/contest/209474#problem/C 题目大意: 一共有m个提案,n个政客,每个政客都会对一些提案(最多四个)提出自己的意见——通过或 ...

  10. Dijkstra【P2446】 [SDOI2010]大陆争霸

    Background 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭的神曾·布拉泽,而克里斯国信仰象征光明和永 ...