看到标题,很多人也许会问:引入了 自适应图标规范 后,在 Android 8.0 上我们已经可以通过一些第三方 Launcher(比如 Lawnchair、Nova 等等)来修改图标形状。

为什么还要多此一举?

因为通过 Launcher 修改图标形状的效果并不完美。仔细观察,无论我们在哪个 Launcher 中修改图标遮罩为何种形状,多任务卡片、已安装的应用列表、第三方应用所能够读取的应用图标,都依然是圆角矩形

任务卡片左上角的图标默认为圆角矩形

也就是 Nexus 用户在升级到 Android 8.0 后在默认的 Google Now Launcher 上所看到的那样:

Nexus 用户觉得亲切吗?

作为一个习惯了 Pixel 圆形图标、想要最大程度上贴近原生体验的强迫症和完美主义者,上面的情况简直不能忍。

那么如何改变这种图标不统一的状况呢?

在 上一篇教程中 我们提到,在 Android 7.x 中,我们可以通过反编译 framework-res.apk、将其中 config_useRoundIcon 的值由 false 修改为 true 来强制启用圆形图标规范。

在 Android 8.0 中,config_useRoundIcon 这个标签虽然还在,但由于自适应图标特性的引入、系统级主题引擎等因素,它已不足以控制全局图标遮罩。

因此我们需要额外修改位于 string 当中的 config_icon_mask

需要用到的工具和具体操作如下:

  • 已 root 的 Android 8.0 设备
  • MT 文件管理器 2.0


首先,参考 @Clyde 的教程,使用 MT 文件管理器定位至 /system/framework 目录,找到 framework-res.apk 这个文件并将其复制到内部储存备用;

点击备用的 framework-res.apk 文件,选择「查看」,在打开的界面定位至 resources.arsc 文件并打开;

在 resources.arsc 的目录中定位至 android -> bool -> bool 标签,找到 config_useRoundIcon 一项,将其数值从 false 修改为 true

同样在 resources.arsc 的目录中,定位至 android -> string -> string 标签,找到 config_icon_mask 一项;

可以看到,config_icon_mask 的数值非常复杂,而非 Pixel 设备上全局强制开启的圆角矩形图标遮罩就是由这串字符控制的:

M50,0L92,0C96.42,0 100,4.58 100 8L100,92C100, 96.42 96.42 100 92 100L8 100C4.58, 100 0 96.42 0 92L0 8 C 0 4.42 4.42 0 8 0L50 0Z

我们需要将这段代码精确地、一字不漏地修改为 Pixel 设备中的圆形图标遮罩代码:

M50 0C77.6 0 100 22.4 100 50C100 77.6 77.6 100 50 100C22.4 100 0 77.6 0 50C0 22.4 22.4 0 50 0Z
这就是开启全局圆形图标遮罩的魔法了!

完成以上两部分修改后,保存并退出编辑。用于开启圆形图标规范的 framework-res.apk 文件就已经修改好了。

接下来我们要做的就是将修改后的 framework-res.apk 替换回去,这里建议大家先将它拷贝至 /system 目录下,修改权限为「rw-r--r--」,然后再移动至 /system/framework 文件夹中进行替换。

权限设置示意图

替换后重启手机就能看见效果了,这样修改后,无论是多任务卡片上的小图标还是已安装应用列表中的应用图标,都会启用 Pixel 设备上的原型图标遮罩;如果你在启动其中应用圆形图标,整个系统在图标部分就会非常和谐统一。

修改前/修改后

当然,如果你喜欢其它形状的图标遮罩,也可以按照本文的方法进行修改。前提是——你得知道这种图标遮罩所对应的字符串。

祝大家玩机愉快!