AOSP中的SysUI只是一个应用程序。不过与安卓框架非常紧密。有没有一种推荐的方法可以禁用香草SysUI,并用完全独立的自定义apk替换此功能?我认为这应该是可行的,因为Wear操作系统似乎也有类似的功能。
是。您可以将其替换为自定义的。
SysUI实现IStatusBar并通过IStatusBarService#registerStatusBar将其注册到框架中,然后创建一个StatusBarView并将其添加到WindowManager中,类型为WindowManager.LayoutParams.type_STATUS_BAR。如果您执行与SysUI相同的逻辑,则可以替换它。
WearOS仅实现SysUI的两个功能:
- 显示和管理通知。它实现NotificationListenerService。并且默认情况下启用侦听器,或者请求用户确认。然后它会得到所有的通知
- 一些切换
因此,您可以实现像AOSP这样的全功能SystemUI,它对框架来说有点紧。如果IStatusBar已经更改,您也应该更改您的应用程序。或者你可以实现一个类似WearOS的小功能SystemUI。NotificationListenerService稳定。
对于不耐烦的人:
-
使用LOCAL_OVERRIDES_PACKAGES
LOCAL_SRC_FILES := new_system_ui.apk LOCAL_OVERRIDES_PACKAGES := SystemUI
在您的Android.mk文件中
详细信息:让我们使用这个Android.mk文件作为示例,从这里如何在AOSP源代码中添加预构建的应用程序(系统应用程序(
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以覆盖默认的";system_ui.apk";用";new_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";将是在您决定使用
LOCAL_OVERRIDES_PACKAGES := SystemUI
之前执行adb shell pm list packages
的结果的一部分 - 一旦你开始使用
LOCAL_OVERRIDES_PACKAGES := SystemUI
并构建/刷新图像;com.android.systemui">