基础知识
-
Android有两种类型的API不能在SDK中访问
1.内部APi:在com.android.internal包中的api
2. 隐藏API:带有@hide的类和方法 -
当使用Android SDK开发时,系统默认引用了sdk目录下的android.jar,它里面没有内部api和隐藏api。当应用在手机设备上运行时,会调用sysytem目录下的framework.jar,它里面包含内部api和隐藏api
-
framework可以通过
adb pull /system/framework /Users/lishuang/Desktop/dev
下载到本地。 -
Android系统是向下兼容的,低目标版本的app可以运行在高版本的手机上,但是若想高目标版本运行在低版本的手机上,可以使用代码进行判断,例如
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { }
参考网址: https://blog.youkuaiyun.com/qq_33750826/article/details/105561280
下载android.jar
大家推荐的都是https://github.com/anggrayudi/android-hidden-api/,但是现在这个地址的jar包都放在Google Drive上了,我没法翻墙,所以自己随便找了一个链接。里面是Android10.0的jar包,地址是https://github.com/aeab13/android-jar-with-hidden-api
替换android.jar
进入到sdk/platforms路径下,我下载的是Android10.0(api29),所以替换Android-29文件夹中的android.jar.(可以把之前的jar包修改名字保存,方便恢复)。最后打开compileSdkVersion 29
的Android项目就可以看到android.jar里面有了internal包