Android隐藏api如何调用

编译时的jar(sdk/platforms/androidversion/android.jar)属于阉割版,它去掉了带有@hide的类和internal包下的类
而运行时,系统会调用android设备中完整版的jar(/system/framework/framework.jar)

1.哪些api不能直接调用?

1.com.android.internal 包下的 API(internal API) 
2.被标记为 @hide 属性的类和方法的隐藏API(hidden API)

2.Google设置隐藏类和internal包不能调用的原因

1.api属于内部逻辑,不想对外开发
2.可能存在着低版本和高版本之间的兼容性问题,不对外开发
3.也有可能是api的接口未确定下来。

3.如何使用这些api

3.1.反射(具体调用,略)

3.1.1为什么可以通过反射来调用?

因为编译时,调用的sdk是android.jar,移除了internal API 和 hidden API
而运行时它会加载 /system/framework/framework.jar,它没有移除
也就是说我们编译时的SDK中不包含这些API,所以无法进行调用
当我们利用反射,程序在设备上运行的时候,其实是可以找到对应的方法进行调用的。

3.2.替换jar包

阉割版的jar包

具体操作,照着GitHub导入依赖即可。

igding wechat
2018 依计行事 持续精进
坚持原创技术分享,您的支持将鼓励我继续创作!