定制Launcher3桌面图标排序

1. 需求背景

Android10 工程移植GMS包之后,Android桌面图标排列发生了变化,如下图:
在这里插入图片描述在这里插入图片描述
我们只是移植了GMS包,并没有修改Launcher3源码,为什么会发生这样的变化呢?客户要求修改桌面图标排列,并且加入他们自己开发的应用,该怎么改?

2. 定位代码

既然跟GMS包有关,毫无疑问,这个定制代码肯定在partner_gms里面。可以看到,桌面增加了很多Google应用,我们随便找一个,搜索一下它的包名。这里以com.android.chrome为例。

在这里插入图片描述
运气比较好,Chrome的包名只在GmsSampleIntegration里面有,去看看。
打开partner_gms/apps/GmsSampleIntegration/res_dhs_go_2g/xml/partner_default_layout.xml
在这里插入图片描述
没错,这就是定制桌面图标位置的xml文件。
具体使用哪个xml文件呢?从Android.mk里面可以找到答案。
在这里插入图片描述
在这里插入图片描述
明白了,这是根据GMS的类型,选择编译不同的xml文件。
本项目使用的是这个文件:
apps/GmsSampleIntegration/res_dhs_full/xml/partner_default_layout.xml

3. 修改桌面图标排序

找到了地方,就好办了。改一把看看:

diff --git a/idh.code/vendor/partner_gms/apps/GmsSampleIntegration/res/values/strings.xml b/idh.code/vendor/partner_gms/apps/GmsSampleIntegration/res/values/strings.xml
old mode 100644
new mode 100755
index 83cef064fa..13ab85181b
--- a/idh.code/vendor/partner_gms/apps/GmsSampleIntegration/res/values/strings.xml
+++ b/idh.code/vendor/partner_gms/apps/GmsSampleIntegration/res/values/strings.xml
@@ -3,4 +3,5 @@
 <resources>
     <string name="app_label">Google Sample Home Screen</string>
     <string name="google_folder_title">Google</string>
+	<string name="android_folder_title">Android</string>
 </resources>
diff --git a/idh.code/vendor/partner_gms/apps/GmsSampleIntegration/res_dhs_full/xml/partner_default_layout.xml b/idh.code/vendor/partner_gms/apps/GmsSampleIntegration/res_dhs_full/xml/partner_default_layout.xml
old mode 100644
new mode 100755
index 1f6f26d542..aed1b387e2
--- a/idh.code/vendor/partner_gms/apps/GmsSampleIntegration/res_dhs_full/xml/partner_default_layout.xml
+++ b/idh.code/vendor/partner_gms/apps/GmsSampleIntegration/res_dhs_full/xml/partner_default_layout.xml
@@ -40,6 +40,11 @@
     <favorite packageName="com.google.android.apps.photos" className="com.google.android.apps.photos.home.HomeActivity"/>
   </folder>
 
+  <folder title="@string/android_folder_title" screen="0" x="1" y="-1">
+    <favorite packageName="com.google.android.googlequicksearchbox" className="com.google.android.googlequicksearchbox.SearchActivity"/>
+    <favorite packageName="com.ss.android.article.news" className="com.ss.android.article.news.activity.SplashActivity"/>
+  </folder>
+
   <!-- Docs, Sheets, Slides, Drive, Keep -->
   <!--
   <folder title="@string/create_folder_title" screen="0" x="1" y="3">
@@ -60,7 +65,7 @@
     <favorite packageName="com.google.android.apps.magazines" className="com.google.apps.dots.android.app.activity.CurrentsStartActivity"/>
   </folder>
   -->
-  <favorite screen="0" x="1" y="-1" packageName="com.google.android.apps.tachyon" className="com.google.android.apps.tachyon.MainActivity"/>
-  <favorite screen="0" x="2" y="-1" packageName="com.google.android.apps.googleassistant" className="com.google.android.apps.googleassistant.AssistantActivity"/>
-  <favorite screen="0" x="-1" y="-1" packageName="com.android.vending" className="com.android.vending.AssetBrowserActivity"/>
+  <favorite screen="0" x="2" y="-1" packageName="com.google.android.apps.tachyon" className="com.google.android.apps.tachyon.MainActivity"/>
+  <favorite screen="0" x="3" y="-1" packageName="com.google.android.apps.googleassistant" className="com.google.android.apps.googleassistant.AssistantActivity"/>
+  <favorite screen="0" x="-1" y="-1" packageName="com.ss.android.article.news" className="com.ss.android.article.news.activity.SplashActivity"/>
 </favorites>

编译GmsSampleIntegration,推到系统里面,没生效。
为啥呢?可能是Launcher数据库没有更新。简单处理一下,删掉让它重新生成:
rm /data/data/com.android.launcher3/databases/ launcher.db
stop;start
OK,搞定!效果如下:
在这里插入图片描述

4.释疑

前面留下一个问题,为什么不修改Launcher3,也能定制桌面图标呢?这个xml文件有啥魔力?搜索Launcher3源码,可以看到有代码加载了这个文件,有处理逻辑。
在这里插入图片描述
这里就不展开Launcher3分析了,无非就是判断有没有partner_default_layout文件,如果有的话,解析并使用它。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值