Android7.0+修改导航栏图标方法

2017-03-02 Mystery0 M 更多博文 » 博客 » GitHub »

Android 刷机

原文链接 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 DriveOneDrive)解压

如果有兴趣的可以修改脚本代码,大概的我已经写好了

将回编译之后的SystemUI.apk放到以下目录TemplateMod\system\priv-app\SystemUI(注意新建目录,和脚本中对应)

关于刷机包签名与否的问题我也不太清楚,我知道的是TWRP刷机不用验证签名,所以就直接压缩zip即可

在TWRP中选择刷入

说在后面

当然,这种办法无论是那个版本都是能够使用的,只是不同的版本或者不同的系统,路径会不同(国内的厂商定制版本文件或许加密了)。 除了定制导航栏图标,SystemUI还有其他的文件,比如状态栏的图标,文本之类的。 除了这个,还可以反编译Settings进行一些修改,记得刷机之前要备份原文件 只是突然间就无聊了,过下手瘾~