使用Android系统隐藏api 读取*.apk 程序安装包信息[转]
2011-05-18 00:19
1396 查看
前提:我们需要得到Android系统源码编译输出的一个文件 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 这个包里面包含所有的系统api, 隐藏的, 公开的 添加 jar方法 右键功能菜单->Properties->Java Build Path Libraries选项卡 这时应该有一个列表, 如果你没有添加过, 应该只有一项, 就是系统自带的Android SDK, 选中后,右手边有一个删除, 先删除系统添加的sdk. 点Add Library -> User Library 选择User Library 按钮, 新建一个User Library 将刚才那个文件 classes.jar 和系统本身的文件都导入进来, 调整下顺序, 将 classes.jar 调到前面 这样添加了之后, 就可以使用系统隐藏的api了 使用隐藏api, 有个前提: 许多api涉及到系统权限问题, 比如 后台安装文件 api PackageManager.installPackage 要求有安装程序的权限, 而这个安装程序权限不是随便有的, 只有经ROM签名认证的才可以使用这个权限. 虽然说可以在配置文件里面添加这个权限, 但是悲剧的是你仍然不能拥有这个权限, 在这点上, Google做的真绝.. 好了, 虽然我们不能安装, 但用api去查看apk总该可以了吧? Google没有公开这个Api, 但又了上面这个方法, 我们可以使用了 //apk包的文件路径 String apkPath = "/sdcard/qq.apk"; //这是一个Package 解释器, 是隐藏的 //构造函数的参数只有一个, apk文件的路径 PackageParser packageParser = new PackageParser(apkPath); //这个是与显示有关的, 里面涉及到一些像素显示等等, 我们使用默认的情况 DisplayMetrics metrics = new DisplayMetrics(); metrics.setToDefaults(); //这里就是解析了, 四个参数, //源文件File, //目的文件路径(这个我也没搞清楚怎么回事, 看Android安装器源码, 用的是源文件路径, 但名字却是destFileName) //显示, DisplayMetrics metrics //flags, 这个真不知道是啥 PackageParser.Package mPkgInfo = packageParser.parsePackage(new File(apkPath), apkPath, metrics, 0); //应用程序信息包, 这个公开的, 不过有些函数, 变量没公开 ApplicationInfo info = mPkgInfo.applicationInfo; //Resources 是用来获取资源的 , 而这里获取的资源是在本程序之外的 //至于为什么这么弄, 我搞不懂. Resources pRes = getResources(); AssetManager assmgr = new AssetManager(); assmgr.addAssetPath(apkPath); Resources res = new Resources(assmgr, pRes.getDisplayMetrics(), pRes.getConfiguration()); CharSequence label = null; if (info.labelRes != 0) { try { label = res.getText(info.labelRes); } catch (Resources.NotFoundException e) { } } if (label == null) { label = (info.nonLocalizedLabel != null) ? info.nonLocalizedLabel : info.packageName; } //这里就是读取一个apk程序的图标 if (info.icon != 0){ Drawable icon = res.getDrawable(info.icon); ImageView image = (ImageView) findViewById(R.id.iv_test); image.setVisibility(View.VISIBLE); image.setImageDrawable(icon); } } |
相关文章推荐
- android 开发之 使用Android系统隐藏api 读取*.apk 程序安装包信息
- 使用Android系统隐藏api 读取*.apk 程序安装包信息
- Android获取系统已安装应用软件程序(apk)信息
- [Unity]Android(安卓)代码安卓APK时,使用系统安装器安装的[最正确]办法(不弹出选择打开的程序)
- Android获取系统已安装应用软件程序(apk)信息
- Android读取APK Package包的图标安装信息
- 解决使用 JDK 1.7 对 Android apk 签名后程序无法安装的问题
- 实践中探索Android智能手机系统------APK程序安装
- Android-通过意图安装、卸载、打开指定的apk和进入指定程序的应用信息
- 使用Android系统隐藏api
- Android 使用系统限制的权限的apk应安装到 /system/app 目录下
- 解决使用 JDK 1.7 对 Android apk 签名后程序无法安装的问题
- [每天学点Android开发]使用新的Contacts API (ContactsContract)读取联系人信息
- 获取Android系统中已安装程序的名字、包名等信息 [复制链接]
- Android使用adb指令在虚拟机中安装、卸载apk程序
- Android使用adb指令在虚拟机中安装、卸载apk程序
- Android 如何读取未安装的APK 签名信息
- python下学生管理系统:从文件中读取30位学生的信息(含邮箱),并实现简单的增、删、查找、统计(邮箱使用人数)。---附程序哦!
- 获取android系统中已安装程序的信息
- Android之获取手机上已安装的所有的应用程序的信息,并判断是否安装了某应用程序(系统程序或非系统应用程序判断)