在之前的文章《Android启动过程-万字长文(Android14)》中介绍了Android系统的启动过程,本篇文章将继续介绍桌面应用Launcher。
一、Launcher介绍
在之前的文章中提到Launcher是Android系统启动后,由SystemServer Activity Manager Service (AMS)加载的第一个应用程序。Launcher又被称为桌面程序,负责Android桌面的启动和管理,用户使用的应用程序(App)都是通过Launcher来启动的。
二、下载及编译
2.1 下载
使用Git下载Launcher源码:
git clone https://android.googlesource.com/platform/packages/apps/Launcher3
进入项目目录:
cd Launcher3
切换到Android14分支:
git checkout android14-release
2.2 编译
使用AndroidStudio编译下载好的Launcher3工程。编译过程中遇到问题及解决方案可以参考以下博客:基于android 11的Launcher3本地Android studio调通流程,AndroidStudio编译调试aosp11R 的Launcher3。
三、源码解析
3.1 AndroidManifest.xml
在项目根目录的AndroidManifest.xml中定义了Launcher做为桌面程序的属性:
<application>
<activity
android:name="com.android.launcher3.Launcher"
android:launchMode="singleTask">
<intent-filter>
<category android:name="android.intent.category.HOME" />
</intent-filter>
</activity>
</application>
3.2 Launcher.java
Launcher.java是Launcher的启动页面,负责资源初始化和桌面UI创建。
3.3 Workspace、AppsView和Widget示例
3.1 Workspace(工作区)
结构说明:
3.2 AppsView(应用程序视图)
3.3 Widget(小组件)
四、点击App图标的事件响应
4.1 触发ItemClickHandler的onClick方法
ItemClickHandler负责处理桌面应用图标的点击事件。桌面图标的点击事件最终会触发ItemClickHandler的onClick方法。onClick方法最终会触发startAppShortcutOrInfoActivity方法。
4.2 Launcher通知系统启动App
在Launcher.java的startActivitySafely方法中调用ActivityContext.java的startActivitySafely方法。最终通过frameworks/base/core/java/android/app/Activity.java 源码地址中的startActivity方法启动了对应的应用程序。