Material You是谷歌设计语言的最新版本。在 Material You 中,谷歌强调个性化,这就是为什么在Android 12 中,有一个新的动态主题系统,可以使用从墙纸中提取的颜色重新着色您的 UX 。这个代号为“monet”的动态主题系统在 Android 12 Beta 2 中上线,但 Google 尚未记录 API/实现、提供支持库或开放 Google Play 以发布针对 API 级别 31(Android 12 ),因此绝大多数开发人员甚至都没有考虑调整他们的应用程序以支持动态主题系统。

但这并不意味着没有开发人员在玩弄 Android 12 的主题系统。流行的自动化应用程序 Tasker的开发人员使用 Android 12 的官方 API 在他的应用程序中展示了动态主题支持。另一方面,另一位开发人员 kdrag0n使用他自己的颜色提取和调色板生成算法重新创建了整个系统。Kdrag0n 共享了他的主题引擎的源代码,并且正在开发 Jetpack Compose 和 Flutter 库,以便为旧操作系统版本构建的第三方应用程序可以实现他对“monet”的理解。
现在,XDA 认可的开发人员Quinny899已经创建了自己的库,该库基于 kdrag0n 的自定义“monet”实现(即,它不是基于 Google 的主题引擎)。开发人员可以将这个 MonetCompat 库集成到他们的应用程序中,以添加对基于用户壁纸动态主题化应用程序 UI 的支持。该库适用于运行 Android 5.0 及更高版本(在兼容模式下使用 Palette API)和正常模式下运行 Android 8.1 Oreo 及更高版本的设备。由于平台 API 的限制,该库无法从 Android 8.1 之前版本的动态壁纸中提取颜色。
至于为什么开发人员可能想要使用这个库,Quinny899 自己在项目的 GitHub 页面上进行了解释。“目前也不知道谷歌是否会在 Android 12 的发布中为 Monet 提供他们自己的向后兼容库,所以这个库最终可能会被官方库取代。这个项目中没有使用专有的谷歌代码,因此它获得了 MIT 许可,可用于第三方应用程序。”
第一个使用 MonetCompat 的应用程序当然是 Quinny899 自己的 DarQ 应用程序。DarQ 是一款应用程序,可让您在每个应用程序的基础上切换 Android 的强制暗模式设置。它最初使用 root 访问权限来设置系统属性,但更新为使用在用户 PC 上运行的ADB shell 脚本,从而删除了 root 要求。在 DarQ 2.0 中,用户不再需要从他们的 PC 运行 ADB 脚本,因为该应用程序现在集成了Shizuku. Shizuku 是一个应用程序和服务,它允许其他应用程序运行 shell 命令或使用 ADB shell 用户权限访问 API——将其视为超级用户管理应用程序,但用于 ADB shell 访问。在 Android 11+ 上,可以通过内置的无线调试功能启动 Shizuku 服务,因此您不再需要 PC 来设置 DarQ。随着转向 Shizuku,DarQ 现在还使用 ProcessObserver 而不是 AccessibilityService,开发人员说这让 DarQ 可以更快地检测应用程序何时打开(从而应用强制暗设置)。
如果出于某种原因,您不喜欢 MonetCompat 为 DarQ 应用程序生成的颜色,您可以点击“DarQ 2.0”三下以在应用程序中启用开发者选项。在这里,您可以选择“Monet Color Picker”来更改您希望应用程序使用的颜色。

