一、介绍
因为从android p开始google就把最近任务栏功能移植到了Launcher应用模块中,所以Launcher应用升级到android q时最大的移植任务还是最近任务栏功能,最近任务栏和系统应用system ui有事件交互,例如导航栏相关的滑动相关事情都要传递到最近任务栏作为触发最近任务栏的事件。本次移植是从android p移植到android q版本,androd p版本时原生launcher有一个独立的目录quickstep这个就是最近任务栏模块代码,其中要依赖system ui相关代码android p时google已经将相关代码打包成sysui-shared.jar包并内置到quickstep/libs目录下,所以我们在做android p时不用考虑这种代码依赖。一般情况下研发为了方便编译调试都会使用android studio编译所以整个项目最好能独立不用依赖系统关联,当然在编译版本时这个代码是通过编写make脚本编译的android p代码用的也是sysui-shared.jar包。但android q Launcher最近任务栏代码中依赖system ui的代码没有像p一样把相关代码打包成jar包而且里面很多代码逻辑都改变了,为了能保证后期能通过android studio独立编译方便调试并不依赖整个项目代码,我们需要将相关依赖代码再次打包成独立jar包和p结构一样。另外对比了quickstep相关代码发现很多东西都改变了,如果只是替换jar包是无法使用的。
二、方案选择
有两种移植方案:
一、把Android q最近任务栏移植到Launcher然后把以前的功能移植到现有代码上
二、在Android p最近任务栏代码上修改代码做适配
综合两种方案我选择了第一种有以下几个理由:
1.android q原生最经任务栏代码整套移植可以避免很多莫名其妙的问题
2.我们做最近任务栏进步都是在界面上做修改不会修改整个框架更方便移植
3.google原生框架调整肯定有很多优化但我们无法看出来
4.如果这次不整套移植后期版本更新会和google代码差距越来越大更难维护
三、移植步骤
1.打包sysui-shared.jar
2.移植quickstep目录代码全部重新移植到Launcher
3.处理移植各种编译问题
4.编写make编译脚本实现android studio和make两种方式都能编译通过
5.顺利运行Android q最近任务栏保证原生功能正常使用
6.移植原有功能到最新最近任务栏
7.替换掉原生Launcher
1.替换sysui-shared.jar
移植过程中开始花了一些时间找sysui-shared.jar
原生Launcher引入sysui-shared.脚本方式
ifneq (,$(wildcard frameworks/base))
LOCAL_STATIC_JAVA_LIBRARIES := SystemUISharedLib launcherprotosnano
LOCAL_PRIVATE_PLATFORM_APIS := true
else
LOCAL_STATIC_JAVA_LIBRARIES := libSharedSystemUI libLauncherProtos
LOCAL_SDK_VERSION := system_current
根据上面脚本查找到out\target\common\obj\JAVA_LIBRARIES\SystemUISharedLib_intermediates目录下有相关jar包
最近任务栏与sy