获取未安装apk的信息

来源:互联网 发布:怎样开淘宝店卖视频 编辑:程序博客网 时间:2024/06/10 00:00

从网上看到的方法,后来偶得灵感,精简了一下,不敢独享,与大家分享下!


/** * Get Apk File Information * @param context * @param apkPath : apk file path * @return : such as icon, name */public static ApkInfo getApkInfo(Context context, String apkPath){ApkInfo apkInfo = null;String PATH_AssetManager = "android.content.res.AssetManager";try{PackageManager pm = context.getPackageManager();PackageInfo info = pm.getPackageArchiveInfo(apkPath,PackageManager.GET_ACTIVITIES);if(null == info){return null;}Class<?> assetMagCls = Class.forName(PATH_AssetManager);Constructor<?> assetMagCt = assetMagCls.getConstructor((Class[]) null);Object assetMag = assetMagCt.newInstance((Object[]) null);Class<?>[] typeArgs = new Class[1];typeArgs[0] = String.class;Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod("addAssetPath", typeArgs);Object[] valueArgs = new Object[1];valueArgs[0] = apkPath;assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);Resources res = context.getResources();typeArgs = new Class[3];typeArgs[0] = assetMag.getClass();typeArgs[1] = res.getDisplayMetrics().getClass();typeArgs[2] = res.getConfiguration().getClass();Constructor<Resources> resCt = Resources.class.getConstructor(typeArgs);valueArgs = new Object[3];valueArgs[0] = assetMag;valueArgs[1] = res.getDisplayMetrics();valueArgs[2] = res.getConfiguration();// XXX What we really need it is the Resourcesres = (Resources) resCt.newInstance(valueArgs);apkInfo = new ApkInfo();// Get apk nameString name = null;if (info.applicationInfo.labelRes != 0){name = res.getText(info.applicationInfo.labelRes).toString();}else{// if set name in label directlyname = pm.getApplicationLabel(info.applicationInfo).toString();}apkInfo.setName(name);// Get apk iconif (info.applicationInfo.icon != 0){apkInfo.setIcon(res.getDrawable(info.applicationInfo.icon));}apkInfo.setPackageName(info.packageName);apkInfo.setPath(apkPath);apkInfo.setSize(new File(apkPath).length());apkInfo.setVersionCode(info.versionCode);apkInfo.setVersionName(info.versionName);}catch (Exception e){e.printStackTrace();}return apkInfo;}



public class ApkInfo{private Drawable icon;private String name;private String packageName;private String versionName;private int versionCode;private String path;private String size;.........}
原创粉丝点击