Android 调用系统隐藏函数的方法(非反射)

做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')
        }
    }

   ....
}

 

上一篇:java最全的获取某个接口或者某个类所有对应的实现类和继承类的工具类--动态获取、非动态获取、按照路径获取等总结


下一篇:springmvc入门及模拟springmvc