首页 > 解决方案 > 使用 gradle 在 Android Core App 中引用 aosp 函数

问题描述

如何使用 gradle 构建系统在核心 android 应用程序中引用 aosp 隐藏方法。我指的是 out 文件夹中的框架和其他 jar,但无法访问隐藏的 API。有没有办法访问隐藏的方法。

标签: androidgradleandroid-source

解决方案


有几种方法。

  1. Android 隐藏 API

    只要您可以很好地定位 API 27(在撰写本文时还没有 API 28 版本),这种方式就可以很好地工作。您可以通过正确的代码完成和一切直接调用隐藏的方法。

    注意:在撰写本文时,您需要将 Gradle 类路径设置为 3.1.4。3.2.0 添加了某种完整性检查,在使用修改后的框架 JAR 时会破坏构建。

  2. 使用反射

    这并不理想,但如果你想以 API 28 为目标,或者你想使用 Gradle 3.2.0,它会起作用。

    示例(科特林):

    val IWindowManager = Class.forName("android.view.IWindowManager")
    val IWindowManagerStub = Class.forName("android.view.IWindowManager\$Stub")
    val ServiceManager = Class.forName("android.os.ServiceManager")
    
    val binder = ServiceManager.getMethod("checkService", String::class.java).invoke(null, Context.WINDOW_SERVICE)
    val iWindowManagerInstance = IWindowManagerStub.getMethod("asInterface", Binder::class.java).invoke(null, binder)
    
    val hasNavBar = IWindowManager.getMethod("hasNavigationBar").invoke(iWindowManagerInstance) as Boolean
    

推荐阅读