正常情况下的标准sdk中是不含Android源码系统中的标注有@hide的API的,所以仅仅只在标准的sdk是无法使用某些API的,原本google之所以将某些API对第三方app不开放,也是为了系统的安全性作想。 但是有的时候在项目中需要做一个能够访问这些被系统隐藏的API,这个时候怎么办呢?
目前主要有如下几种方法:
1.为了能够是第三方sdk也能正常使用这些API,需要对As中的sdk做一些处理:
导入现成定制的sdk(相应的jar包文件中存在这些API),也可以自己定制sdk:
将你的sdk名/platforms/android-sdk版本号(如28(P),这里的版本号必须与你的工程中对应模块(app)的build.gradle中配置项compileSdkVersion 28的要一致。并且可以按照需要配置minSdkVersion/targetSdkVersion版本号)文件夹下的android.jar直接替换成现成定制的sdk中的对应文件夹下的android.jar。或者通过ubuntu自带的jar包管理工具将需要添加的文件夹如fingerprint(包含.class 字节文件)替换到sdk名/platforms/android-sdk版本号/android.jar中(通过解压你的工程名/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/中的中间文件classes.jar的jar包,获得/android/hardware/目录下的fingerprint文件夹)。
Note:classes.jar与android.jar不是同等的,不能直接进行替换。