如何为Launcher3默认工作区设置常用应用——Android源码定制问题
嘿,我来帮你搞定Pixel 2上Launcher3默认工作区添加快捷方式的问题!
解决Launcher3默认工作区修改不生效&添加预编译APK的问题
一、先排查修改default_workspace后不生效的原因
- 确认修改的是对应Pixel 2的文件:Pixel 2的屏幕对应Launcher3的4x5网格布局,你需要修改的是
packages/apps/Launcher3/res/xml/default_workspace_4x5.xml,别选错了其他分辨率的版本(比如3x4、5x6这些)。 - 检查XML语法完整性:你贴的代码片段没写完,这里给你一个正确的Hotseat(底部 dock栏)配置示例,注意标签闭合和属性正确性:
<!-- Hotseat(底部快捷栏)配置 --> <include launcher:workspace="@xml/workspace_screen" launcher:screen="0" /> <hotseat xmlns:launcher="http://schemas.android.com/apk/res-auto"> <!-- 添加预编译APK到Hotseat的第一个位置 --> <app launcher:packageName="com.your.prebuilt.app" launcher:className="com.your.prebuilt.app.MainActivity" launcher:container="-101" <!-- -101是Hotseat的容器标识,别改 --> launcher:screen="0" launcher:x="0" launcher:y="0" /> </hotseat> - 清理编译缓存重新构建:旧缓存很容易导致修改不生效,执行以下命令清理后再编译:
如果用Android Studio编译,直接点make clean && make launcher3 -j$(nproc)Build > Clean Project再重新构建即可。 - 确认刷入的是最新编译的ROM包:刷入前可以检查Launcher3 APK的修改时间,或者对比签名信息,确保刷的不是旧版本。
二、正确添加预编译APK到默认工作区
如果要把预编译APK放到主工作区(不是底部栏),可以这样配置:
<workspace xmlns:launcher="http://schemas.android.com/apk/res-auto"> <screen launcher:screenId="0"> <!-- 把预编译APK放到主屏幕第2列第1行(坐标从0开始) --> <app launcher:packageName="com.your.prebuilt.app" launcher:className="com.your.prebuilt.app.MainActivity" launcher:container="-100" <!-- -100是主工作区的容器标识 --> launcher:screen="0" launcher:x="1" launcher:y="0" /> </screen> </workspace>
几个关键细节要注意:
- 准确填写包名和主Activity:预编译APK的包名和主Activity类名不能错,你可以用
aapt dump badging your_prebuilt_app.apk命令获取,输出里的package: name='xxx'和launchable-activity: name='xxx'就是你需要的值。 - 容器标识别写错:主工作区是
-100,Hotseat是-101,填错会导致图标不显示。 - 坐标要在网格范围内:Pixel 2主工作区是4列5行,所以x范围是0-3,y范围是0-4;Hotseat是5个位置,x范围0-4,y固定为0。
三、额外排查技巧
- 检查权限配置:如果是Android 11及以上版本,要确保Launcher3的
AndroidManifest.xml里添加了android.permission.QUERY_ALL_PACKAGES权限,不然可能无法识别预编译APK。 - 查看Logcat日志:刷入后启动Launcher时,过滤
Launcher相关日志,看有没有Package not found或Activity not found的报错,这能快速定位问题根源。
内容的提问来源于stack exchange,提问作者HyperionX




