Android7.0+修改导航栏图标方法
原文链接 https://mystery00.github.io/2017/03/02/Android7-0-%E4%BF%AE%E6%94%B9%E5%AF%BC%E8%88%AA%E6%A0%8F%E5%9B%BE%E6%A0%87%E6%96%B9%E6%B3%95/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
重要事件(3/16更新)
虽然不知道是什么原因,但是这两天我在着自己的mod包的时候,依旧是反编译回编译SystemUI,但是这一次却无法开机,导致我的系统数据出现异常,然后就只能三清然后重新刷,我怀疑是签名的问题,正好这两天写完了一个app在打包发布的时候发现了这样一个细节:
点击右边的链接,跳转的是链接(自备梯子)。 这个页面是Android 7.0引入的应用签名方案,据说能够对apk提供更多的保护,所以我怀疑是因为这个原因。 但是我还是不清楚为什么别人能改,所以在这里告诫大家一下,刷机需谨慎,记得做好备份,数据是无价的。
以下是原文
说在前面
对于Android手机上的导航栏,虽然说Android7.1.1上我是用的Pixel的导航栏,但是用了这么久了,难免有些审美疲劳,然后手就痒了,打算自定义样式。这个方法其实一直都能用,但是在6.0我们可以用CMTE来修改系统的主题,从而修改导航栏图标,甚至是系统的图标之类的,奈何年前Cyanogen挂掉了(原文链接:Cyanogen services shutting down),原来的CyanogenMod的人重新弄了一个系统,也就是LineageOS,但是不知道什么原因,迟迟没有加入主题引擎,我们也只有等待。前几天XDA上突然传出LineageOS14.1将不会使用CMTE,这也算意味着CMTE随着CM的dead而死去(原文链接:EXCLUSIVE: CyanogenMod Theme Engine Isn’t Coming Back, LineageOS to Find Replacement)。但是幸好的是LineageOS会寻找新的主题引擎,目前看来最有可能的应该就是Substratum。但是目前这段过渡期比较难熬,就像Android7.0去年下半年出来,但是7.0的框架迟迟未出,虽然知道很大一部分原因是因为作者的时间并不只是Xposed,但是这么长的时间过去了……
于是,手开始痒了。
本来是在酷安下载了一个图标包(Sorcery 图标,链接),因为听别人说这个图标包的作者适配了Pixel Launcher
,所以下载看看,大概原理是安装一个图标包,但是并不是一般的图标包,可以理解为将原图标包修改之后替换的。
安装成功,图标也覆盖上去了,但是这种办法只能在桌面有作用,我看了最近任务栏依旧是原图标,但是这也够了。
安装成功之后,覆盖率还是挺高的,只是我觉得个别图标不太好看,本来相联系开发者修改的,但是又一想,作者适配了,况且并不是用主题来安装的,太多要求并不好。于是解包修改不喜欢的图标,幸运的是软件本身并没有混淆,加密之类的。
修改的过程中就想起了我以前做的一个CM13的主题(Github链接),那个是我将别人的比较好看的素材整合了一下自己使用的,于是就去找我以前使用的图标。
找到了原来的图标,还顺便看到了以前CMTE的主题修改导航栏图标的路径,突然间我就想到了或许可以解包SystemUI.apk
来修改导航栏图标。
我在手机上进入那个目录,确实看到了导航栏的图标。
然后就开始了我的修改。
教程准备
要修改SystemUI.apk
,自然需要的是原SystemUI.apk
,我想root权限应该是必须要的。当然,在recovery
模式下弄出SystemUI.apk
应该也行,没具体试过,TWRP下是可以的。
一台具有root权限的手机
一台能用的电脑(提前装上apktool以及文本编辑器)
教程开始
首先将手机上/system/framework
目录下的apk文件导入apktool
apktool install-framework xxx.apk
使用apktool d SystemUI.apk
命令解包SystemUI.apk
打开解包之后的文件夹,定位到SystemUI\res\drawable-xxxhdpi-v4\
目录下,这个时候我想你已经看到了导航栏的虚拟键图标了
将你修改过的图标替换到原文件
在SystemUI文件夹上一级目录打开cmd,执行以下命令
apktool b SystemUI
注:
重新编译之后的文件目录在SystemUI\dist
下,注意,此时这个回编译的apk并没有签名,打开源文件SystemUI.apk
,然后将除了META-INF文件夹外的其他文件和文件夹删掉。然后将回编译的apk里面的文件拉到源文件中。
这个时候可以替换了,但是为了安全,我们把源文件备份一下,然后写一个简易的刷机包。
下载刷机包模板(链接:Google Drive,OneDrive)解压
如果有兴趣的可以修改脚本代码,大概的我已经写好了
将回编译之后的SystemUI.apk
放到以下目录TemplateMod\system\priv-app\SystemUI
(注意新建目录,和脚本中对应)
关于刷机包签名与否的问题我也不太清楚,我知道的是TWRP刷机不用验证签名,所以就直接压缩zip即可
在TWRP中选择刷入
说在后面
当然,这种办法无论是那个版本都是能够使用的,只是不同的版本或者不同的系统,路径会不同(国内的厂商定制版本文件或许加密了)。 除了定制导航栏图标,SystemUI还有其他的文件,比如状态栏的图标,文本之类的。 除了这个,还可以反编译Settings进行一些修改,记得刷机之前要备份原文件 只是突然间就无聊了,过下手瘾~