`
anson_xu
  • 浏览: 503087 次
  • 性别: 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

如何解决呢?

相关推荐

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

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

    Auto.js.apk

    因为Auto.js是基于JavaScript的,学习Auto.js的API之前建议先学习JavaScript的基本语法和内置对象,可以使用教程前面的两个JavaScript教程链接来学习。 如果您想要使用TypeScript来开发,目前已经有开发者公布了一...

    Device_Info_HW_v4.25.4.apk

    对于默认使用5.1+的camera2 api,如果您授予了摄像头许可,则将使用旧api。 设备中有关SoC的详细信息。 CPU:型号,核心,群集,系列,abi,调速器,频率。 GPU:型号,厂商,opengl,频率,扩展列表。 单击...

    Auto.js打包插件.apk

    因为Auto.js是基于JavaScript的,学习Auto.js的API之前建议先学习JavaScript的基本语法和内置对象,可以使用教程前面的两个JavaScript教程链接来学习。 如果您想要使用TypeScript来开发,目前已经有开发者公布了一...

    Android代码-检查更新通知下载

    Android API 检测更新软件 API 1.编写version.xml 1 my app name <title>新版本:0.1</title> Test to the latest version, please update! http://yyy.yyy.yyy.yyy/test.apk 2.发布version....

    Android的APK应用签名机制以及读取签名的方法

    主要介绍了Android的APK应用签名机制以及读取签名的方法,这里作者推荐使用Java自带的API进行APK签名的读取,需要的朋友可以参考下

    android-apk-parser:用于 J2EE 的 Android APK 文件解析器

    使用android api做原型实现的APK包解析,用于J2SE环境中读取APK做验证。 特征 在 apk 中解码 manifest.xml。 解码资源。 在 apk 中。 构建包信息。 从清单和资源以及 BuffererdImage 中获取 lanucher 图标。 依赖...

    android 获取cpu使用率, 内存 实时数据

    可以获取系统的内存和可用内存,cpu的实时使用率

    新版Android开发教程.rar

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

    Android渠道打包工具packer-ng-plugin.zip

    }读取APK文件,由于这个库 packer-helper 需要同时给Gradle插件和Android项目使用,所以不能添加Android相关的依赖,但是又需要读取自身APK文件的路径,使用反射实现:// for android code private static ...

    《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平板运行

    Android静默安装常用工具类

    包含以上三个方法,默认使用gzip压缩,使用bufferedReader提高读取速度。 HttpRequest中可以设置url、timeout、userAgent等其他http参数 HttpResponse中可以获取返回内容、http响应码、http过期时间(Cache-Control的...

    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平板运行

Global site tag (gtag.js) - Google Analytics