做Android系统定制,总要重写一些系统应用,很多地方需要用到系统的隐藏函数,很多推荐的方式是用反射,但这种方式用的多时不方便,查看也不大方便。
首先拿到对应SDK的jar包。编译完成后class.jar的路径为:
Android8.1在这个路径:
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates
Android11的路径:
out/target/common/obj/JAVA_LIBRARIES/framework-minus-apex_intermediates/
将class.jar拷贝出来,放到APP的这级或上级目录。
编辑app级的build.gradle
在dependencies节点下增加:
provided files('../../syslibs/classes.jar')
上面路径是相对app下build.gradle的路径。
之后同步。
打开app下的iml文件(AS 2.3版本在app路径下,发现4.X的版本在.idea/modules/app下),在后面你会看到类似如下的东西
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" name="Gradle: ./../syslibs/classes.jar" level="project" />
你会看到classes.jar这个节点在jdk节点下面。 把classes.jar放到上面。
这样编辑器里面写隐藏函数就能自动补全,也不会变红了。 但编译还会不过。
需要更改下工程级的build.gradle
在allprojects下增加下面节点信息
allprojects { ...... ..... gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs.add('-Xbootclasspath/p:../syslibs/classes.jar') } } .... }