在做系统App开发的时候经常需要使用到一些@hide的方法和变量,这就需要引用自己编译的framework.jar
1.从android源码中找到framework.jar
我的源码是android12,framework.jar路径如下
out/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/combined/framework-minus-apex.jar
将 framework-minus-apex.jar重命名为framework.jar
2.将framework.jar放入app的lib目录

3.在module的build.gradle里面加入依赖
compileOnly files('libs/framework.jar')

在根目录的build.gradle的allprojects节点中加入
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << '-Xbootclasspath/p:app/libs/framework.jar'
}
}

4.接下来的操作有两种做法,
第一种是在module的build.gradle里面和android同级的地方加入
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
Set<File> fileSet = options.bootstrapClasspath.getFiles()
List<File> newFileList = new ArrayList<>();
//将framework.jarc插入到最前面
newFileList.add(new File("libs/framework.jar"))
//最后将原始的数据插入
newFileList.addAll(fileSet)
options.bootstrapClasspath = files(
newFileList.toArray()
)
}
}

第二种是插入到根目录build.gradle的allprojects节点中

5.重新build工程就可以引用到@hide的方法和变量了。
本文介绍了在开发系统App时如何引用@hide的方法和变量。首先从android12源码获取framework.jar,然后将其放入app的lib目录并添加编译依赖。在build.gradle文件中配置JavaCompile的bootstrapClasspath,确保在编译时能访问到@hide的类和成员。提供了两种不同的配置方式以实现这个目标。
721

被折叠的 条评论
为什么被折叠?



