`
Ancool
  • 浏览: 30886 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Android系统隐藏api读取*.apk程序安装包信息

阅读更多

前提:我们需要得到 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);
                }
            }
 
分享到:
评论

相关推荐

    APK+Dex文件反编译及回编译工具(APKDB)v1.8.1正式版 支持繁体

     是一款,针对Android OS系统的APK程序,直接反编译修改的工具。  APKDB集合了当今最强悍,最犀利的APK及Dex文件编译工具;  正常安装后,它直接在【鼠标右键】创建快捷菜单;  非常方便汉化工作者,对APK或...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    《Google Android SDK开发范例大全(第3版)》.pdf

    a.3 上传*.apk程序到android market上 812 附录b 升级项目至新版sdk 与honeycomb平板程序部署 815 b.1 android sdk版本与项目最低运行版本设置 816 b.2 升级程序至honeycomb平板运行 816

    Google Android SDK开发范例大全(第3版)part2

    由于源文件大小为99.3MB,所以采用... A.3 上传*.apk程序到Android Market上  附录B 升级项目至新版SDK 与Honeycomb平板程序部署  B.1 Android SDK版本与项目最低运行版本设置  B.2 升级程序至Honeycomb平板运行

    Google Android SDK开发范例大全(第3版) 1/5

    基本信息 Google Android SDK开发范例大全...A.3 上传*.apk程序到Android Market上 附录B 升级项目至新版SDK 与Honeycomb平板程序部署 B.1 Android SDK版本与项目最低运行版本设置 B.2 升级程序至Honeycomb平板运行

    Google Android SDK开发范例大全(第3版) 4/5

    基本信息 Google Android SDK开发范例大全...A.3 上传*.apk程序到Android Market上 附录B 升级项目至新版SDK 与Honeycomb平板程序部署 B.1 Android SDK版本与项目最低运行版本设置 B.2 升级程序至Honeycomb平板运行

    Google Android SDK开发范例大全(第3版) 3/5

    基本信息 Google Android SDK开发范例大全...A.3 上传*.apk程序到Android Market上 附录B 升级项目至新版SDK 与Honeycomb平板程序部署 B.1 Android SDK版本与项目最低运行版本设置 B.2 升级程序至Honeycomb平板运行

    Google Android SDK开发范例大全(第3版) 5/5

    基本信息 Google Android SDK开发范例大全...A.3 上传*.apk程序到Android Market上 附录B 升级项目至新版SDK 与Honeycomb平板程序部署 B.1 Android SDK版本与项目最低运行版本设置 B.2 升级程序至Honeycomb平板运行

    secrets-gradle-plugin:Gradle插件,可将您的秘密安全地提供给您的Android项目

    由于您的密钥是静态二进制文件的一部分,因此您仍可以通过反编译APK来恢复API密钥。 因此,建议您使用其他措施(如可能的话)添加限制来保护您的密钥。 要求 基于Gradle的Android项目 Android Gradle插件4.1.x或更...

    flutter_qr_mobile_vision:使用移动视觉API的Flutter的QR阅读器插件

    该插件使用Android和iOS本机API从设备的相机读取图像。 然后,将这些图像通过管道传输到MLKit Vision条形码API,该API检测条形码/ qrcode等,并输出预览图像以在颤动纹理上显示。 该插件包括一个小部件,可对摄像...

    bunsen:sen本生浏览器提供易于使用的离线P2P应用程序和文件分发,可在Android设备上进行验证。 https

    版本1.1.3-使用DatArchive API创建简单的Dat应用 本生现在具有基本的DatArchive支持,使您可以创建,读取,获取信息以及将文件写入DatArchive。 共享这些数据仍然在进行中。 如何使用本生 本生目前是非常具有alpha...

    WeatherZdenekMacura:简单的天气预报应用

    这个简单的天气应用程序首先读取移动设备的当前地理位置,然后使用开放天气 API 显示今天的天气或未来 7 天的预报天气。 今天的天气显示天气的描述、天气图标、温度、位置、风速、湿度和压力。 Forecast 仅显示天气...

Global site tag (gtag.js) - Google Analytics