`
心雨心
  • 浏览: 354499 次
  • 性别: 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,  但又了上面这个方法, 我们可以使用了

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->//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);
                }
            }

转载:http://www.blogjava.net/Green-nut/articles/336494.html

分享到:
评论
1 楼 yehoubin 2011-02-14  
你好,怎么我照你的方法不行啊?

相关推荐

    auto.js 4.1.1.apk以及打包插件

    使用Auto.js 4.1.1首先需要下载并安装apk文件,然后通过内置的编辑器编写或导入脚本。在编写过程中,可以利用提供的API和函数,结合UI识别功能进行自动化操作。完成后,通过打包插件生成独立应用,分享给他人或用于...

    1个apk安装另一个apk,安装多个apk

    在Android 6.0(API级别23)及以上版本,你需要在运行时请求`WRITE_EXTERNAL_STORAGE`权限,因为安装APK需要读取外部存储。 ```java if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M && ...

    [安卓公社教程第一帖]android操作系统详解.docx

    第三方应用可以调用系统服务和API来实现与系统应用的交互,例如使用系统联系人API读取和写入联系人信息。 理解Android操作系统的结构和组件对于开发者和用户来说都非常重要,这有助于他们更好地定制、管理和优化...

    Java解析apk/ipa读取包名、版本名、版本号等等信息源码

    以下是一个简单的Java代码示例,展示如何读取APK的包名和版本信息: ```java import java.io.File; import java.util.zip.ZipFile; public class ReadApk { public static void main(String[] args) throws ...

    ColorCollect.apk 分析报告1

    本报告主要分析了名为"ColorCollect"的Android应用程序,该应用的包名为`com.wizeyes.colorcapture`。分析由摸瓜APP分析平台(mogua.co)生成,时间戳为2022年2月4日11:39。以下是该应用的关键信息和安全评估。 **...

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

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

    app.apk.zip

    这个APK文件是Android系统中用于分发和安装应用程序的标准格式。接下来,我们将详细探讨这个压缩包中包含的各个文件和它们在Android应用开发中的作用。 1. **resources.arsc**:这是Android资源文件,包含了应用的...

    获取SD卡中的apk信息

    获取SD卡中的apk信息是一项常见的需求,例如,开发者可能需要分析SD卡上已安装或未安装的应用程序,或者进行应用管理。这篇博客"获取SD卡中的apk信息"可能详细介绍了如何通过编程方式来实现这一功能。下面将深入探讨...

    signapk.jar

    3. **签名版本**:对于Android 7.0(API级别24)及以上版本,推荐使用V2(Full APK Signature Scheme)签名,它能提供更快的安装速度和更好的安全性能。 4. **多重签名**:`signapk.jar` 支持多重签名,允许一个APK...

    抖加.apk 分析报告1

    - **文件系统装载/卸载**:请求`android.permission.MOUNT_UNMOUNT_FILESYSTEMS`,这是一个危险权限,可以安装和卸载文件系统。 - **录音**:申请`android.permission.RECORD_AUDIO`,允许访问音频记录路径。 - *...

    Java解析apk所需jar包

    在Android生态系统中,APK(Android Package)是应用程序的主要打包格式。这些文件包含了应用的代码、资源、资产以及元数据,使得用户可以在Android设备上安装和运行应用。Java作为一种广泛使用的编程语言,同样可以...

    Android无需Root静默安装apk

    - 可以通过广播接收器或者定时任务启动服务,服务接收到启动信号后,读取APK文件并调用`PackageInstaller`进行安装。 4. **APK传输**: - 由于安全原因,普通应用无法直接访问外部存储的APK文件,所以通常需要...

    android-python-apk-channel-master

    1. **APK**:Android应用程序包(APK)是Android系统中应用软件的安装文件格式。当开发者完成应用开发后,需要将其打包成APK,用户可以通过安装这个文件来使用应用。 2. **渠道包**:在推广Android应用时,开发者...

    好用的APK反编译工具,可以执行系统签名

    在Android应用开发领域,APK文件是Android应用程序的打包格式,相当于iOS的ipa文件。APK反编译工具则是开发者和安全研究人员用来查看、修改、分析APK内部结构的重要工具。本文将详细介绍APK反编译及其相关知识,以及...

    Android 获取手机所有apk包名

    在Android平台上,获取手机上所有APK包名的需求通常是用于分析设备上安装的应用程序信息,例如统计应用数量、分析特定应用是否存在或者进行批量操作。这个过程涉及到对Android系统的权限访问以及对文件系统的操作。...

    XposedBridgeAPI-89.jar

    7. **配置文件读取**:开发者可以使用API读取模块的配置文件,根据用户的个性化设置来调整模块的行为。 8. **错误处理**:当模块运行出错时,Xposed框架会捕获异常并通知用户,同时API也提供了相应的错误报告机制。...

    使用HttpGet 下载apk文件并安装

    在Android开发中,有时我们需要通过网络下载应用程序的APK文件并进行安装,这通常涉及到HTTP协议的使用,尤其是GET请求。本例中的“使用HttpGet下载apk文件并安装”是一个典型的移动应用更新或安装流程,涉及的技术...

    apk静默安装apk

    在Android系统中,APK是应用程序的包文件格式,它包含了所有必要的代码、资源和配置文件,以便在设备上运行。APK静默安装是指在用户无感知的情况下,通过编程方式自动化安装应用的过程,通常用于企业级应用部署或...

    Android 自动安装apk

    这个过程涉及到Android系统的权限控制、Intent机制以及一些核心API的使用。 首先,我们要理解Android的安全模型。出于安全考虑,Android系统默认不允许应用程序在后台静默安装APK,因为这可能被恶意软件利用。但在...

Global site tag (gtag.js) - Google Analytics