负一屏有两种实现方式
1、Launcher自行开发,往Workspace中插入一个自定义的CellLayout来作为负一屏的容器。 具体请参考之前的文章:https://blog.csdn.net/a396604593/article/details/82586143 2、利用Google的feed屏方案,基于ILauncherOverlay和ILauncherOverlayCallback这两个接口来实现,Launcher作为客户端,负一屏是一个独立应用作为服务端,通过aidl来通信来实现加载负一屏以及支持相互滑页。
Google Feed
Android 11为例 要想桌面带有Google feed负一屏,需要编译vendor/partner_gms/apps/SearchLauncher SearchLauncher结构 1、libs/launcher_client.jar Google和feed apk通讯的工具 2、com/android/searchlauncher/OverlayCallbackImpl.java 初始化LauncherClient对象和实现LauncherClientCallbacks回调方法,并且在launcher各个生命周期通过LauncherClient同步给负一屏 3、应该会有一个apk,具体实现负一屏界面以及功能
Google Feed的方式替换其它负一屏
本文实现的是Ohana的Entertainment Space
1、按照要求内置Ohana.apk
2、把aar包放入lib下面并用mk引入
这里可以网上搜一下如何mk导入aar包和导入aar包里的R文件
...
LOCAL_PACKAGE_NAME := SearchLauncherQuickStep
#add Ohana -1 Screen
LOCAL_STATIC_JAVA_AAR_LIBRARIES:= mediahome-lib
LOCAL_MODULE_TAGS := optional
LOCAL_SYSTEM_EXT_MODULE := true
LOCAL_PRIVILEGED_MODULE := true
LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 Launcher3QuickStep
LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.launcher3 GmsConfigOverlaySearchLauncherQuickStep
LOCAL_FULL_LIBS_MANIFEST_FILES := $(LOCAL_PATH)/$(LAUNCHER_PATH)/quickstep/AndroidManifest.xml
LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.*
#add Ohana -1 Screen
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages com.google.android.mediahome.launcheroverlay
include $(BUILD_PACKAGE)
#add Ohana -1 Screen
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := mediahome-lib:libs/mediahome-launcheroverlay-1.1.0-eap.aar
include $(BUILD_MULTI_PREBUILT)
3、替换OverlayCallbackImpl中的LauncherClient和LauncherClientCallbacks,并实现新的回调方法
import com.google.android.mediahome.launcheroverlay.client.LauncherClient;
import com.google.android.mediahome.launcheroverlay.client.LauncherClientCallbacks;
import com.google.android.mediahome.launcheroverlay.common.AnimationType;
不同的负一屏源有不同的Client和Callbacks和开发文档,根据文档导入aar包和初始化LauncherClient对象和实现LauncherClientCallbacks回调方法即可。
|