android - 使用 gradle 在 Android Core App 中引用 aosp 函数
问题描述
如何使用 gradle 构建系统在核心 android 应用程序中引用 aosp 隐藏方法。我指的是 out 文件夹中的框架和其他 jar,但无法访问隐藏的 API。有没有办法访问隐藏的方法。
解决方案
有几种方法。
-
只要您可以很好地定位 API 27(在撰写本文时还没有 API 28 版本),这种方式就可以很好地工作。您可以通过正确的代码完成和一切直接调用隐藏的方法。
注意:在撰写本文时,您需要将 Gradle 类路径设置为 3.1.4。3.2.0 添加了某种完整性检查,在使用修改后的框架 JAR 时会破坏构建。
使用反射
这并不理想,但如果你想以 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
推荐阅读
- postgresql - PostgreSQL:如何在脚本中获取和设置枚举列表变量?
- ansible - 稳定 | 同步 |
- php - 如何确保对我的服务器的请求的来源是合法的?
- javascript - 如何在 GitHub Pages 中使用基本的 Google Sheets javascript 脚本?
- android-studio - Android 启动,然后进入黑屏。亚行外壳工程
- java - 在 Java 中使用 PDFBox 创建嵌套列表
- node.js - 无法读取视图引擎节点 js 中未定义的属性“名字”
- go - Go vs C++ 中的抽象基类设计
- ruby - 当我不调用 mk_dir 时,文件存在 @ dir_s_mkdir
- vaadin8 - Vaadin 8 Treegrid 总是通过使用 AbstractBackEndHierarchicalDataProvider 进行延迟加载来获取所有行