求手机qq帝国ol,qq音乐apk安装包下载,是用...

java基础(9)
网上找了些关于解析apk***包的博客:
但是是在非 WEB 项目下运行,但我们公司项目需求是web项目下解析apk***包信息,然后供其他系统调用时候参考apk是不是需要升级,所有不能够用网络上的代码,和jar包来解析,通过自己改装,基本能满足需求,下面是代码:
特别注意:这里需要一个appt.exe的可执行文件需要放在C:/&& 盘下,也可以自己指定目录位置。
ApkInfo.java
package cn.testA
* @(#)ApkInfo.java
version: 1.0
* Copyright (c) 2011 CFuture09, Institute of Software,
* Guangdong Ocean University, Zhanjiang, GuangDong, China.
* All rights reserved.
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
* &B&ApkInfo&/B&
* 该类封装了一个Apk的信息。包括版本号,支持平台,图标,名称,权限,所需设备特性等。
* @author CFuture.Geek_Soledad()
public class ApkInfo {
public static final String APPLICATION_ICON_120 = &application-icon-120&;
public static final String APPLICATION_ICON_160 = &application-icon-160&;
public static final String APPLICATION_ICON_240 = &application-icon-240&;
public static final String APPLICATION_ICON_320 = &application-icon-320&;
* apk内部版本号
private String versionCode =
* apk外部版本号
private String versionName =
* apk的包名
private String packageName =
* 支持的android平台最低版本号
private String minSdkVersion =
* apk所需要的权限
private List&String& usesPermissions =
* 支持的SDK版本。
private String sdkV
* 建议的SDK版本
private String targetSdkV
* 应用程序名
private String applicationL
* 各个分辨率下的图标的路径。
private Map&String, String& applicationI
* 程序的图标。
private String applicationI
* 暗指的特性。
private List&ImpliedFeature& impliedF
* 所需设备特性。
private List&String&
public ApkInfo() {
this.usesPermissions = new ArrayList&String&();
this.applicationIcons = new HashMap&String, String&();
this.impliedFeatures = new ArrayList&ImpliedFeature&();
this.features = new ArrayList&String&();
* 返回版本代码。
* @return 版本代码。
public String getVersionCode() {
return versionC
* @param versionCode
the versionCode to set
public void setVersionCode(String versionCode) {
this.versionCode = versionC
* 返回版本名称。
* @return 版本名称。
public String getVersionName() {
return versionN
* @param versionName
the versionName to set
public void setVersionName(String versionName) {
this.versionName = versionN
* 返回支持的最小sdk平台版本。
* @return the minSdkVersion
public String getMinSdkVersion() {
return minSdkV
* @param minSdkVersion
the minSdkVersion to set
public void setMinSdkVersion(String minSdkVersion) {
this.minSdkVersion = minSdkV
* 返回包名。
* @return 返回的包名。
public String getPackageName() {
return packageN
public void setPackageName(String packageName) {
this.packageName = packageN
* 返回sdk平台版本。
public String getSdkVersion() {
return sdkV
public void setSdkVersion(String sdkVersion) {
this.sdkVersion = sdkV
* 返回所建议的SDK版本。
public String getTargetSdkVersion() {
return targetSdkV
public void setTargetSdkVersion(String targetSdkVersion) {
this.targetSdkVersion = targetSdkV
* 返回所需的用户权限。
public List&String& getUsesPermissions() {
return usesP
public void setUsesPermissions(List&String& usesPermission) {
this.usesPermissions = usesP
public void addToUsesPermissions(String usesPermission) {
this.usesPermissions.add(usesPermission);
* 返回程序的名称标签。
public String getApplicationLable() {
return applicationL
public void setApplicationLable(String applicationLable) {
this.applicationLable = applicationL
* 返回应用程序的图标。
public String getApplicationIcon() {
return applicationI
public void setApplicationIcon(String applicationIcon) {
this.applicationIcon = applicationI
* 返回应用程序各个分辨率下的图标。
public Map&String, String& getApplicationIcons() {
return applicationI
public void setApplicationIcons(Map&String, String& applicationIcons) {
this.applicationIcons = applicationI
public void addToApplicationIcons(String key, String value) {
this.applicationIcons.put(key, value);
public void addToImpliedFeatures(ImpliedFeature impliedFeature) {
this.impliedFeatures.add(impliedFeature);
* 返回应用程序所需的暗指的特性。
public List&ImpliedFeature& getImpliedFeatures() {
return impliedF
public void setImpliedFeatures(List&ImpliedFeature& impliedFeatures) {
this.impliedFeatures = impliedF
* 返回应用程序所需的特性。
public List&String& getFeatures() {
public void setFeatures(List&String& features) {
this.features =
public void addToFeatures(String feature) {
this.features.add(feature);
public String toString() {
return &ApkInfo [versionCode=& + versionCode + &,\n versionName=&
+ versionName + &,\n packageName=& + packageName
+ &,\n minSdkVersion=& + minSdkVersion + &,\n usesPermissions=&
+ usesPermissions + &,\n sdkVersion=& + sdkVersion
+ &,\n targetSdkVersion=& + targetSdkVersion
+ &,\n applicationLable=& + applicationLable
+ &,\n applicationIcons=& + applicationIcons
+ &,\n applicationIcon=& + applicationIcon
+ &,\n impliedFeatures=& + impliedFeatures + &,\n features=&
+ features + &]&;
APKutil.java
package cn.testA
* @(#)ApkUtil.java
version: 0.2.1
* Copyright (c) 2011 CFuture09, Institute of Software,
* Guangdong Ocean University, Zhanjiang, GuangDong, China.
* All rights reserved.
import java.io.BufferedR
import java.io.C
import java.io.IOE
import java.io.InputS
import java.io.InputStreamR
* apk工具类。封装了获取Apk信息的方法。
* @author CFuture.Geek_Soledad()
&b&version description&/b&&br /&
V0.2.1 修改程序名字为从路径中获得。
public class ApkUtil {
public static final String VERSION_CODE = &versionCode&;
public static final String VERSION_NAME = &versionName&;
public static final String SDK_VERSION = &sdkVersion&;
public static final String TARGET_SDK_VERSION = &targetSdkVersion&;
public static final String USES_PERMISSION = &uses-permission&;
public static final String APPLICATION_LABEL = &application-label&;
public static final String APPLICATION_ICON = &application-icon&;
public static final String USES_FEATURE = &uses-feature&;
public static final String USES_IMPLIED_FEATURE = &uses-implied-feature&;
public static final String SUPPORTS_SCREENS = &supports-screens&;
public static final String SUPPORTS_ANY_DENSITY = &supports-any-density&;
public static final String DENSITIES = &densities&;
public static final String PACKAGE = &package&;
public static final String APPLICATION = &application:&;
private ProcessBuilder mB
private static final String SPLIT_REGEX = &(: )|(=')|(' )|'&;
private static final String FEATURE_SPLIT_REGEX = &(:')|(',')|'&;
* aapt所在的目录。
private String mAaptPath = &c:/aapt&;
//&p&&span style=&font-size:14&&&span style=&font-size:32&&&span style=&color:#FF0000;&&// 特别注意:&/span&&u&这里需要一个appt.exe的可执行文件需要放在C:/&/u&&/span&&/span&&/p&&p&&span style=&font-size:14&&&span style=&font-size:32&&&u&//   盘下,也可以自己指定目录位置。&/u&&/span&&/span&&/p&
public ApkUtil() {
mBuilder = new ProcessBuilder();
mBuilder.redirectErrorStream(true);
* 返回一个apk程序的信息。
* @param apkPath
apk的路径。
* @return apkInfo 一个Apk的信息。
public ApkInfo getApkInfo(String apkPath) throws Exception {
Process process = mand(mAaptPath, &d&, &badging&, apkPath)
InputStream is =
is = process.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is, &utf8&));
String tmp = br.readLine();
if (tmp == null || !tmp.startsWith(&package&)) {
throw new Exception(&参数不正确,无法正常解析APK包。输出结果为:& + tmp + &...&);
ApkInfo apkInfo = new ApkInfo();
setApkInfoProperty(apkInfo, tmp);
} while ((tmp = br.readLine()) != null);
return apkI
} catch (Exception e) {
} finally {
process.destroy();
closeIO(is);
closeIO(br);
* 设置APK的属性信息。
* @param apkInfo
* @param source
private void setApkInfoProperty(ApkInfo apkInfo, String source) {
if (source.startsWith(PACKAGE)) {
splitPackageInfo(apkInfo, source);
} else if (source.startsWith(SDK_VERSION)) {
apkInfo.setSdkVersion(getPropertyInQuote(source));
} else if (source.startsWith(TARGET_SDK_VERSION)) {
apkInfo.setTargetSdkVersion(getPropertyInQuote(source));
} else if (source.startsWith(USES_PERMISSION)) {
apkInfo.addToUsesPermissions(getPropertyInQuote(source));
} else if (source.startsWith(APPLICATION_LABEL)) {
apkInfo.setApplicationLable(getPropertyInQuote(source));
} else if (source.startsWith(APPLICATION_ICON)) {
apkInfo.addToApplicationIcons(getKeyBeforeColon(source),
getPropertyInQuote(source));
} else if (source.startsWith(APPLICATION)) {
String[] rs = source.split(&( icon=')|'&);
apkInfo.setApplicationIcon(rs[rs.length - 1]);
} else if (source.startsWith(USES_FEATURE)) {
apkInfo.addToFeatures(getPropertyInQuote(source));
} else if (source.startsWith(USES_IMPLIED_FEATURE)) {
apkInfo.addToImpliedFeatures(getFeature(source));
System.out.println(source);
private ImpliedFeature getFeature(String source) {
String[] result = source.split(FEATURE_SPLIT_REGEX);
ImpliedFeature impliedFeature = new ImpliedFeature(result[1], result[2]);
return impliedF
* 返回出格式为name: 'value'中的value内容。
* @param source
private String getPropertyInQuote(String source) {
return source.substring(source.indexOf(&'&) + 1, source.length() - 1);
* 返回冒号前的属性名称
* @param source
private String getKeyBeforeColon(String source) {
return source.substring(0, source.indexOf(':'));
* 分离出包名、版本等信息。
* @param apkInfo
* @param packageSource
private void splitPackageInfo(ApkInfo apkInfo, String packageSource) {
String[] packageInfo = packageSource.split(SPLIT_REGEX);
apkInfo.setPackageName(packageInfo[2]);
apkInfo.setVersionCode(packageInfo[4]);
apkInfo.setVersionName(packageInfo[6]);
* 释放资源。
* @param c
将关闭的资源
private final void closeIO(Closeable c) {
if (c != null) {
c.close();
} catch (IOException e) {
e.printStackTrace();
public static void main(String[] args) {
String demo = &E:/androidApk/2012/05/百宝工具箱/1.0/signed/Toolbox-360.apk&;
if (args.length & 0) {
demo = args[0];
ApkInfo apkInfo = new ApkUtil().getApkInfo(demo);
System.out.println(apkInfo);
} catch (Exception e) {
e.printStackTrace();
public String getmAaptPath() {
return mAaptP
public void setmAaptPath(String mAaptPath) {
this.mAaptPath = mAaptP
ImpliedFeature
* @(#)Feature.java
Project:androidUtil
* Copyright (c) 2011 CFuture09, Institute of Software,
* Guangdong Ocean University, Zhanjiang, GuangDong, China.
* All rights reserved.
* Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an &AS IS& BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
package cn.testA
* @author Geek_Soledad ()
public class ImpliedFeature {
* 要的设备特性名称。
* 表明所需特性的内容。
public ImpliedFeature() {
public ImpliedFeature(String feature, String implied) {
this.feature =
this.implied =
public String getFeature() {
public void setFeature(String feature) {
this.feature =
public String getImplied() {
public void setImplied(String implied) {
this.implied =
public String toString() {
return &Feature [feature=& + feature + &, implied=& + implied + &]&;
下面是测试类:APKtest.java
package cn.testA
import cn.testApk.ApkI
public class APKtest {
public static void main(String[] args) throws Exception {
String apkPath = &D:\\upload\\apk\\\\WeChart.apk&;
apkutil = new ApkUtil();
ApkInfo apkInfo2 = apkutil.getApkInfo(apkPath);
String versionCode = apkInfo2.getVersionCode(); // 版本号
String versionName = apkInfo2.getVersionName(); //版本名
String packageName = apkInfo2.getPackageName(); //包名
System.out.println(&版本号:&+versionCode);
System.out.println(&版本名:&+versionName);
System.out.println(&包名:&+packageName);
这个代码是网站上找的,不是原创,但是是自己改装的,所以大家别喷,能用上就自己做做测试吧,不正之处请矫正,谢谢,本人邮箱 : 要源码可以联系我。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2203次
排名:千里之外
原创:10篇

参考资料

 

随机推荐