第三方apk Android sdk 定制与调用hide的API

正常情况下的标准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不是同等的,不能直接进行替换。

2.(建议)将从工程中获得的classes.jar更名为framework.java,然后参考下面的博文进行配置即可。
https://blog.csdn.net/zhouzhenhua92/article/details/79448409
博文题目:Android studio如何使用定制的framework.jar

3.反射

通过上面中的任意一种方式均可将调用有hide的API的第三方apk成功编译出来,接下来,需要解决系统权限部分,因为要想最终实现对这些API的调用而不出现异常,还需要将编译出的apk进行平台系统签名,或者将它push到项目的/system/
priv-app/你的apk名字/下面,让它成为系统级的apk,push时请注意先通过
adb disable-verity,在system/priv-app用mkdir 你的apk名字 来创建文件夹。(或者直接通过adb push 你的apk名字文件夹 system/priv-app/目录下,注意你的apk名字文件夹下面要有xx.apk。至于如何将编译出的apk进行平台系统签名,请参考下面的博客:
https://blog.csdn.net/u012041204/article/details/73823606
博文题目:给第三方apk进行系统签名的几种方式

猜你喜欢

转载自blog.csdn.net/chengsiguo/article/details/88575110