0×00 写在前面
Substratum主题由于其可以在不同ROM上应用使得可以通过它给一些类原生ROM增加可玩性。本教程采用实例教学,旨在教授方法。
建议有点代码基础再往下看。
注意:搞机有风险,入坑须谨慎!
0×01 Sub主题能干啥
- Overlay(叠加层)
Sub主题可以修改APK中的resource和asset资源。修改的资源必须在原应用中就存在,并且位置必须与该资源在APK反编译后的位置相同。
一切你能想到的可以通过修改资源文件改变的东西都可以修改,比如汉化、去广告、修改布局、修改图片、修改布尔值等等。
主题提供四种选项方式。关于各个选项的用法,可以参考sub团队发布的文档(记得挂梯子),为了方便国内阅读,已转载到了博客上:链接戳我。 - Audio(声音)
Sub主题可以替换位于/system/media/audio/
下的铃声。 - Bootanimation(开机动画)
Sub主题可以替换位于/system/media/bootanimation.zip
的开机动画。 - Shutdownanimation(关机动画)
在有关机动画存在的时候,Sub主题可以替关机动画。 - Fonts(字体)
Sub的换字体功能必须要ROM有社区支持(即不需要root或插件就可以运行)。在其他方式下均不可以换字体。
0×02 Sub主题的核心目录结构
最重要的主题部分可以参考官方主题模板:Github。
0×03 可能会用到的工具
- Android Studio(非必须,最好有)
- OTGSubs(这是我的汉化版本,原版已于2017年停更)
- 开发者助手(用于分析资源ID)
- Auto.js(同上,用于分析资源ID)
- Pixolor(用于查找颜色)
- MT管理器(用于局部反编译,或是查找资源值十分方便)
- 各种提取APK工具(笔者使用的是ES文件浏览器4.0.2.3版本)
- 各种APK反编译工具……
0×04 实例讲解
实例1 根据颜色查源——修改状态栏颜色使状态栏透明化(ES文件浏览器)
- 提取APK。
- 使用Pixolor查找状态栏颜色,查得颜色为
#1F84CC
■。
- 使用MT管理器,依次打开apk-resources.arsc-Arsc编辑器-com.estrongs.android.pop-color-color,右上角三个点选过滤,输入“1F84CC”,点击确定,会有一个名为
window_status_bar
的条目,记住。
- 继续使用Pixolor查找actionbar的颜色,查得颜色为
#35A4F2
■。
- 在手机存储中建立一个文件夹,随便取名。然后建立
/com.estrongs.android.pop/res/values/colors.xml
,打开xml,输入<?xml version="1.0" encoding="utf-8"?> <resources> <color name="window_status_bar">#35A4F2</color> </resources>
保存。
- 打开OTGSubs,点击右下角的+号,选择添加叠加层选择刚才建立的文件夹,然后点击右上角的三个点,选编译主题,等待一会就会弹出安装界面,然后安装apk。到Substratum管理器中选择刚刚安装的主题(OTG Subs Package),选择ES文件浏览器,按照正常使用主题的步骤来就行了。
效果图:
实例2 图片查源最快速——修改手环应用背景图片(Misfit)
要修改的界面
- 提取APK
- 使用MT,依次打开apk - res - drawable-xxhdpi-v4,找到一张名为
story_background.jpg
的分辨率为1080×865的图片
- 用ps制作一张同样分辨率的图片并命名为story_background.jpg
- 在上一个实例的文件夹下建立
com.misfitwearables.prometheus/res/drawable-xxhdpi-v4/
,将刚才的图片复制过去。
- 步骤与实例1相同,效果图如下:
实例3 ID溯源最准确——云闪付去签到动图(云闪付)
去签到动图前后对比
- 提取APK
- 打开开发者助手,授予必须的权限(存储权限、悬浮窗权限、root权限),然后点击右下角的按钮
- 到云闪付的APP界面中,打开开发者助手的悬浮窗,然后点击下图中的“点击开始”
- 点击“签到”那里,会自动弹出控件属性信息,复制ID值(注意一定要复制十六进制的ID,不要复制错了),并且记一下ID的名称,一会要用到
- 使用MT,打开APK,然后点击右上角的三个点,点击“XML搜索”,输入刚才复制的ID值(别忘了把前面的0x去掉),搜索类型选择“十六进制”,然后点击确定,等待它搜索完成。
- 可以看到搜索结果有两个,这里我们选择第二个(需要经验判断选择哪个),点击一下就定位到文件了
- 根据刚才记住的id名称,可以轻松找到对应的代码
- 按照一般的流程这里要修改
layout_width
和layout_height
为0dp,然后把修改过的xml放主题里,但是它这个比较简单,后面是引用代码,所以本实例只需要修改引用的资源值就OK了。这里我们看到后面引用的资源值分别为dimen中的padding_133
和padding_146
,只需要把这两个资源修改为0dp就好 - 在工程文件夹下建立
/com.unionpay/res/values/dimens.xml
,打开xml,输入<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="padding_133">0dp</dimen> <dimen name="padding_146">0dp</dimen> </resources>
保存
- 与上面相同,使用OTGSubs打包工程后应用主题,结束。
实例4 综合进阶之xml处理——Heavens Above去广告(Heavens Above)
去广告前后对比
- 提取APK
- 使用开发者助手,选择带广告文字的控件,查看属性,然后复制十六进制的ID值
- 使用MT,打开APK,搜索刚刚复制的ID,得到一个名为
layout_adcontainer.xml
的结果,点击打开 - 这里要把所有的
layout_width
和layout_height
修改为0dp,然后要把所有的@xxx/xxx
修改为@*包名:xxx/xxx
的形式,把所有的?xxx/xxx
修改为固定值,顺道把它的点击属性去掉也行(删掉onClick那一行就行),修改完的样子如下图
- 在上一个实例的文件夹下建立
com.heavens_above.viewer/res/layout/layout_adcontainer.xml
,把刚才修改完的内容复制进去,保存。 - 与上面相同,打包。应用主题之后就会看到效果了,结束。
实例5 终极追源之Android Studio
AS是查资源ID最终极的方法,相对于开发者助手的好处是可以查开发者助手查不到的东西,比如锁屏、状态栏下拉等,AS的分析也比手机端的好用一些,只不过是纯英文界面,不好入门。
- AS安装好后,首次启动会安装SDK,SDK目录一定要记好
- 安装Java
- 以上两步完成之后,打开SDK目录,如图
- 依次打开
\tools\lib\monitor-x86_64
,然后打开monitor.exe,只需要这个
- 将手机打开USB调试用数据线连接电脑,然后就会在左边列表找到设备了,点击一下,手机把要分析的界面打开,然后点击下图的按钮
- 等待分析之后就会出现当前手机界面的截图,然后用鼠标点击控件就可以在右下角看到属性信息了
- 使用MT,打开APK,依次打开
resources.arsc→Arsc编辑器→包名→id
,然后查找刚刚查到的ID名称,查到之后长按项目,复制ID - 后面的步骤就和之前一样了,就不写了
0x05总结
Sub主题能修改的东西不少,只要你有创意,想怎么玩就怎么玩。
写这个教程前前后后花了快一个月,越到后面越难写,这其中有不少自己摸索出来的东西,刚开始一头雾水没关系,时间长了就理解了。
祝大家玩的开心~
哈哈哈哈