使用android hide API

使用androidhide API

Android有两种类型的API是不能经由SDK访问的。

第一种是位于com.android.internal包中的API。我将称之为internalAPI。第二种API类型是一系列被标记为@hide属性的类和方法。从严格意义上来讲,这不是一个单一的API,而是一组小的被隐藏的API,但我仍将其假设为一种API,并称之为hiddenAPI。

使用hide具体步骤分为:调用hideapi和获得使用hideAPI权限

第一,调用hideAPI

第一种方法就是使用Java反射机制了,可以利用这种反射机制访问存在访问权限的方法,另一种方法就是或修改其域自己去掉Android源码中的"@hide"标记,然后重新编译生成一个SDK。

1.1反射法,简单,但是运行时间较长

请参考:http://blog.csdn.net/annaleeya/article/details/8240510

反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。在计算机科学领域,反射是一类应用,它们能够自描述和自控制。这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。   在Java中的反射机制,被称为Reflection(大家看到这个单词,第一个想法应该就是去开发文档中搜一下了)。它允许运行中的Java程序对自身进行检查,并能直接操作程序的内部属性或方法。Reflection机制允许程序在正在执行的过程中,利用Reflection APIs取得任何已知名称的类的内部信息,包括:package、 type parameters、 superclass、 implemented interfaces、 inner classes、 outer classes、 fields、 constructors、 methods、 modifiers等,并可以在执行的过程中,动态生成Instances、变更fields内容或唤起methods。

1.2生成新的android.jarwith hide API,复杂,调用hideapi和一般API一样

基于以下事实:当你使用AndroidSDK进行开发的时候,你引用了一个非常重要的jar文件——android.jar。它位于AndroidSDK平台的文件夹中(SDK_DIR/platforms/platform-X/android.jar,其中,X表示API等级)。这个android.jar移掉了com.android.internal包中所有的类,也移掉了所有标记有@hide的类,枚举,字段和方法。

但当你在设备上启动应用程序时,它将加载framework.jar(简单来说,它和android.jar等同),而其未移掉internalAPI和hiddenAPI。(但它对开发者来说,并不能友好地访问)。

请参考:http://www.cnblogs.com/xirihanlin/archive/2011/06/05/2073119.html

步骤:

1. 选择你的目标平台X

2. 创建目标平台X的模拟器

3. 启动模拟器,下载/system/framework/framework.jar

adb pull /system/framework/framework.jar

4. 重命名framework.jar-> framework.zip

5. 从framework.zip中抽取classes.dex

6. 使用dex2jar工具,将其转换成classes.jar

dev2jar classes.dex

7. 重命名classes.jar-> framework-classes.zip

8. 拷贝android.jar–> custom-android.zip

9. 解压custom-android.zip至custom-android文件夹

10. 将framework-classes.zip中所有文件拷贝至custom-android文件夹(覆盖存在的文件)

11. 压缩custom-android文件夹成original-android.zip

12. 重命名original-android.zip->original-android.jar

替换原来的android.jar(注意备份!!)

但是:在android5.0Android
lollipop framework.jarhas noclasses.dex

https://groups.google.com/d/topic/android-building/PRdeUxuXYK4

需要自己下载google代码,编译android.jar

http://stackoverflow.com/questions/7888191/how-do-i-build-the-android-sdk-with-hidden-and-internal-apis-available

或者:

下载:

http://repository.grepcode.com/java/ext/com/google/android/android/5.0.1_r1/android-5.0.1_r1.jar

这个android-5.0.1_r1.jar包含hide
api,但是有些基础包没有例如java,javax

原先无hideapi的android.jar对比,目录:android-sdk/plaforms/android-xx/android.jar(ubuntu下双击就可以打开jar)

对比两个jar


sdk的android.jar


有javajavax


无hideapi


下载的android-5.0.1_r1.jar


无javajavax


有hideapi

所以不能用下载的android.jar直接替代原有的android.jar

而是把android-5.0.1_r1.jar中需要用的class拖入原有的android.jar中即可

原先用反射实现的方法可以像其他API一样调用!!

第二,获得使用hideAPI权限

无论是反射还是使用自编译的android.jar,只能解决调用隐藏API的问题,而无法越过权限检查。

可能会报类似的错误:

”Neither user 10053 nor current process hasandroid.permission.LOCATION_HARDWARE“

原因:

This permission is only given to system apps. In order to get thispermission, your app:

  1. must be signed with the system certificates. Thesecertificates are generally available only to the devicemanufacturers.
  2. be installed in /system/apppartition.

解决方案:

http://www.addictivetips.com/mobile/how-to-install-any-app-as-system-app-on-android/

In order to install an app as a system app on your Androiddevice, your device must be rooted.

时间: 2024-10-07 18:14:17

使用android hide API的相关文章

使用内部(com.android.internal)和隐藏(@hide)API[第4部分,定制ADT]

本文翻译自http://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-4-customizing-adt/ 在前面的文章中,我讲述了如何创建定制的original-android.jar和创建定制的android平台以使用original-android.jar.这仅仅能够使用隐藏API,还为内部API留有一个障碍: ADT.ADT定义了一个规则禁止使用来自com.android.internal的类. 有几种方

使用内部(com.android.internal)和隐藏(@hide)API[第3部分,定制android平台]

本文翻译自https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-3-custom-android-platform/ 在前一篇文章中我展示了如何创建定制的original-android.jar,包含内部API和隐藏API中的所有类. 接下的步骤很明显,就是修改现有的android平台(SDK_DIR/platforms/platform-X/android.jar).您可以简单的用第2部分创建的orig

使用内部(com.android.internal)和隐藏(@hide)API[第1部分,介绍]

本文翻译自http://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/#more-79 Android有两类API在SDK中不能使用. 第一类就是位于包com.android.internal的API,我将这些API称为内部API.第二类API就是用@hide标记的类和函数,虽然严格说这不是一个API而是一系列隐藏API的集合,我仍然假定这是一个API,称为隐藏API. 隐藏API的

使用内部(com.android.internal)和隐藏(@hide)API[第2部分,定制android.jar]

本文翻译自https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-2-hacking-around/ 在前一篇文章中,我解释了为什么不通过反射机制,不太容易使用com.android.internal包的内部API和标记为@hide的隐藏API,这是由于android.jar文件没有包含内部API和隐藏API的类,这样在编译时刻就没有办法引用这些类了. 本文将说明如何恢复原始的android.jar,这样就

Android 内部API (com.android.internal)和隐藏API(@hide)概述

内部API和隐藏代码的例子 在翻阅Android源码的时候有时会遇到一些奇怪的代码,例如下面这个: //注:这段代码在源码android/provider/Telephony.java中. import android.util.Patterns; import com.android.internal.telephony.SmsApplication; import java.util.HashSet; //-- 还有这种(下面这段摘自同一文件):         /**          *

使用Android中API建议的方式实现SQLite数据库的增、删、改、查的操作

package com.examp.use_SQLite.dao; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.examp

安卓一键ROOT, android root api sdk 服务支持

android 一键root sdk已经开发完毕,支持PC 及手机端: 鉴于现在手机端的需求比较大,特提供SDK外放服务:以及ROOT技术支持: 商务合作  ROOT后您可以: 1.删除系统应用,定制个性化系统 2.各种暗扣(当然现在国内环境不行,但是您有渠道还是可以的) 3.静默安装各种推广APP 4.打压竞争对手APP 5.后台静默刷流量 6.完全控制他人手机 7.等等等 安卓一键root sdk 服务,安卓root技术支持, android root sdk, android root a

Android 中文API (65) —— BluetoothClass[蓝牙]

前言 本章内容是android.bluetooth.BluetoothClass,为Android蓝牙部分的章节翻译.用于描述远端设备的类型,特点等信息,通过getBluetoothClass()方法获取代表远端设备属性的BluetoothClass对象.版本为Android 2.3   r1,翻译来自中山大学的"Android Club SYSU",欢迎访问他们的WIKI:http://www.android-wiki.net,再次感谢"Android Club SYSU&

Android 中文API (67) —— BluetoothClass.Device.Major

前言 本章内容是android.bluetooth.BluetoothClass.Device.Major,为Android蓝牙部分的章节翻译,版本为Android 2.3   r1,翻译来自中山大学的"Android Club SYSU",欢迎访问他们的WIKI:http://www.android-wiki.net,再次感谢"Android Club SYSU"!期待你一起参与Android中文API的翻译,联系我 [email protected]. 声明 欢