0

AOSP 中的 SysUI 只是一个应用程序。虽然对 Android 框架非常严格。是否有推荐的方法来禁用 vanilla SysUI 并用完全独立的自定义 apk 替换此功能?我相信这应该是可行的,因为 Wear OS 似乎做了类似的事情。

4

2 回答 2

0

对于不耐烦的人:

  • 让我们使用 LOCAL_OVERRIDES_PACKAGES

      LOCAL_SRC_FILES := new_system_ui.apk
      LOCAL_OVERRIDES_PACKAGES := SystemUI 
    

在您的 Android.mk 文件中

详细信息:让我们以这个 Android.mk 文件为例,从这里How to Add Pre-built App (System App) in AOSP source code

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := Signal
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := Signal-website-universal-release-4.55.8.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

假设你有一个new_system_ui.apk(可能是system_ui与你的自定义代码的一个分支)

创建您的自定义 Android.mk 以用“new_system_ui.apk”覆盖默认的“system_ui.apk”

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := Signal
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := new_system_ui.apk <-------YOUR APK---->
LOCAL_OVERRIDES_PACKAGES := SystemUI <-------HERE-------->
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

额外说明:您如何知道一切都是正确的:

  • “com.android.systemui”将是adb shell pm list packages你决定使用之前做的部分结果LOCAL_OVERRIDES_PACKAGES := SystemUI
  • 一旦开始使用LOCAL_OVERRIDES_PACKAGES := SystemUI并构建/刷新图像,就不会再有“com.android.systemui”了
于 2021-11-19T17:29:04.153 回答
0

是的。您可以将其替换为自定义的。

SysUI 实现IStatusBar并通过IStatusBarService#registerStatusBar将其注册到框架中,并创建一个 StatusBarView 并将其添加到 WindowManager类型为 WindowManager.LayoutParams.TYPE_STATUS_BAR。如果你做和 SysUI 一样的逻辑,你可以替换它。

WearOS 只实现了 SysUI 的两个功能:

  1. 显示和管理通知。它实现了 NotificationListenerService。并且默认启用监听器,或者要求用户确认。然后它将获得所有通知。
  2. 一些切换。

所以你可以像 AOSP 那样实现一个全功能的 SystemUI,它对框架来说会有点紧。如果 IStatusBar 已更改,您也应该更改您的应用程序。或者你可以实现一个像 WearOS 这样的小功能 SystemUI。NotificationListenerService 是稳定的。

于 2021-11-17T07:11:56.177 回答