`
anson_xu
  • 浏览: 513142 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

使用Android系统隐藏api 读取*.apk

阅读更多

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

前提:我们需要得到 Android 系统源码编译输出的一个文件
out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar
注意android.jar与classes.jar的冲突,把classes.jar放上面在build_path中。
这个包里面包含所有的系统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);
                }
            }
分享到:
评论
2 楼 anson_xu 2011-09-08  
使用隐藏api只是为了编译通过,在ide中不包错误。
要想运行通过需要有签名apk或者在源码中编译。
1 楼 javer 2011-09-07  
我想在pc上使用这些方法,结果报这个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: init

如何解决呢?

相关推荐

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

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

    CL.rar_android_cl apk android

    标题中的"CL.rar_android_cl apk android"表明这是一个与Android平台相关的项目,具体是一个名为"CL"的应用程序的源代码压缩包。"cl_apk_android"标签进一步确认了这是关于Android应用开发的内容,可能是用于创建或...

    android 工厂模式apk 源代码

    5. **Camera API**:为了测试相机功能,源代码可能会使用Android的Camera API。这包括创建`Camera`对象,设置预览显示,捕获图像和视频,以及调整相机参数。 6. **JNI(Java Native Interface)**:对于一些特定的...

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

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

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

    Auto.js是一款功能强大的自动化脚本工具,尤其在Android平台上,它以其简洁的语法和广泛的用途深受开发者和普通用户的喜爱。4.1.1版本是其发展过程中的一个重要里程碑,引入了更多优化和改进,使得自动化任务的编写...

    ColorCollect.apk 分析报告1

    - 安卓版本:16 (对应API Level 16,即Android 4.1 Jelly Bean) **邮箱线索:** - 在Android字符串资源中发现了一个邮箱线索:your_email@email.com **申请的权限:** - `android.permission.INTERNET`:正常,...

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

     · 对*.Apk、*.Zip 文件执行签名  · Windows下直接显示APK文件自身图标 声明:1.本工具必须先安装JAVA7;  2.如需显示APK自身图标必须先安装.NET Framework4。 _____________________________________________...

    SvgPreview.apk 分析报告1

    1. **android.permission.READ_EXTERNAL_STORAGE**:允许应用读取外部存储(如SD卡)的内容。 2. **android.permission.WRITE_EXTERNAL_STORAGE**:允许应用写入外部存储,包括修改或删除内容。 签名证书部分显示,...

    app.apk.zip

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

    抖加.apk 分析报告1

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

    Android中安装asset下的apk

    1. **读取APK文件**: - 使用`getAssets().open("xxx.apk")`方法从`assets`目录中打开指定的APK文件。 2. **复制文件至外部存储**: - 创建一个指向外部存储特定路径的`File`对象。 - 如果该路径不存在,则创建...

    signapk.jar

    1. **读取APK**:首先,工具读取APK文件,这包含了一个ZIP格式的文件集合。 2. **证书准备**:开发者需提供一对密钥,包括私钥(用于签名)和公钥(用于验证)。私钥通常存储在`.key` 文件中。 3. **签名计算**:...

    获取SD卡中的apk信息

    在Android系统中,SD卡(Secure Digital card)通常被用作扩展手机的存储空间,而APK(Android Package)是Android应用的安装包格式。获取SD卡中的apk信息是一项常见的需求,例如,开发者可能需要分析SD卡上已安装或...

    Android的编译系统.pdf

    ### Android的编译系统知识点详解 #### 一、Makefile的主要流程 Android的编译系统是一种高度集成且复杂的系统,其核心在于通过一系列脚本和配置文件自动化地管理整个编译流程。根据提供的文档信息,我们可以了解...

    XposedBridgeAPI-89.jar

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

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

    5. **签名APK**:使用Java的 jarsigner 工具进行签名。首先,创建一个密钥库,然后使用这个密钥库对APK进行签名。命令可能如下: ``` keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -...

    Android系统信息和Apk应用信息获取.rar

    在Android平台上,获取系统信息和Apk应用信息是开发者日常工作中常见的需求。这个压缩包"Android系统信息和Apk应用信息获取.rar"可能包含了多个示例或者库,用于帮助开发者实现这些功能。由于无法直接查看具体内容,...

    Android系统访问串口设备源码.zip

    2. **JNI(Java Native Interface)**:由于Android的Dalvik和ART运行时不支持标准Java串口API,开发者经常使用JNI调用C/C++的串口库,如libudev或Android的`android.hardware.usb`框架,来实现串口通信功能。...

    ComAssistant(Android串口通信)

    掌握好ComAssistant的使用,对于从事Android IoT开发或者嵌入式系统的开发者来说,无疑会提升工作效率,同时也降低了调试的复杂度。在实际项目中,根据具体需求对ComAssistant进行定制或二次开发,能够进一步拓展其...

Global site tag (gtag.js) - Google Analytics