Android

Substratum制作指南

0×00 写在前面

Substratum主题由于其可以在不同ROM上应用使得可以通过它给一些类原生ROM增加可玩性。本教程采用实例教学,旨在教授方法。
建议有点代码基础再往下看。
注意:搞机有风险,入坑须谨慎!

0×01 Sub主题能干啥

  1. Overlay(叠加层)
    Sub主题可以修改APK中的resource和asset资源。修改的资源必须在原应用中就存在,并且位置必须与该资源在APK反编译后的位置相同
    一切你能想到的可以通过修改资源文件改变的东西都可以修改,比如汉化、去广告、修改布局、修改图片、修改布尔值等等。
    主题提供四种选项方式。关于各个选项的用法,可以参考sub团队发布的文档(记得挂梯子),为了方便国内阅读,已转载到了博客上:链接戳我
  2. Audio(声音)
    Sub主题可以替换位于/system/media/audio/下的铃声。
  3. Bootanimation(开机动画)
    Sub主题可以替换位于/system/media/bootanimation.zip的开机动画。
  4. Shutdownanimation(关机动画)
    在有关机动画存在的时候,Sub主题可以替关机动画。
  5. Fonts(字体)
    Sub的换字体功能必须要ROM有社区支持(即不需要root或插件就可以运行)。在其他方式下均不可以换字体。

0×02 Sub主题的核心目录结构

最重要的主题部分可以参考官方主题模板:Github

0×03 可能会用到的工具

  1. Android Studio(非必须,最好有)
  2. OTGSubs(这是我的汉化版本,原版已于2017年停更)
  3. 开发者助手(用于分析资源ID)
  4. Auto.js(同上,用于分析资源ID)
  5. Pixolor(用于查找颜色)
  6. MT管理器(用于局部反编译,或是查找资源值十分方便)
  7. 各种提取APK工具(笔者使用的是ES文件浏览器4.0.2.3版本)
  8. 各种APK反编译工具……

0×04 实例讲解

实例1 根据颜色查源——修改状态栏颜色使状态栏透明化(ES文件浏览器

  1. 提取APK。
  2. 使用Pixolor查找状态栏颜色,查得颜色为#1F84CC
  3. 使用MT管理器,依次打开apk-resources.arsc-Arsc编辑器-com.estrongs.android.pop-color-color,右上角三个点选过滤,输入“1F84CC”,点击确定,会有一个名为window_status_bar的条目,记住。
  4. 继续使用Pixolor查找actionbar的颜色,查得颜色为#35A4F2
  5. 在手机存储中建立一个文件夹,随便取名。然后建立/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>

    保存。

  6. 打开OTGSubs,点击右下角的+号,选择添加叠加层选择刚才建立的文件夹,然后点击右上角的三个点,选编译主题,等待一会就会弹出安装界面,然后安装apk。到Substratum管理器中选择刚刚安装的主题(OTG Subs Package),选择ES文件浏览器,按照正常使用主题的步骤来就行了。
    效果图:

实例2 图片查源最快速——修改手环应用背景图片(Misfit

要修改的界面

  1. 提取APK
  2. 使用MT,依次打开apk - res - drawable-xxhdpi-v4,找到一张名为story_background.jpg的分辨率为1080×865的图片
  3. 用ps制作一张同样分辨率的图片并命名为story_background.jpg
  4. 在上一个实例的文件夹下建立com.misfitwearables.prometheus/res/drawable-xxhdpi-v4/,将刚才的图片复制过去。
  5. 步骤与实例1相同,效果图如下:

实例3 ID溯源最准确——云闪付去签到动图(云闪付

去签到动图前后对比

  1. 提取APK
  2. 打开开发者助手,授予必须的权限(存储权限、悬浮窗权限、root权限),然后点击右下角的按钮
  3. 到云闪付的APP界面中,打开开发者助手的悬浮窗,然后点击下图中的“点击开始”
  4. 点击“签到”那里,会自动弹出控件属性信息,复制ID值(注意一定要复制十六进制的ID,不要复制错了),并且记一下ID的名称,一会要用到
  5. 使用MT,打开APK,然后点击右上角的三个点,点击“XML搜索”,输入刚才复制的ID值(别忘了把前面的0x去掉),搜索类型选择“十六进制”,然后点击确定,等待它搜索完成。
  6. 可以看到搜索结果有两个,这里我们选择第二个(需要经验判断选择哪个),点击一下就定位到文件了
  7. 根据刚才记住的id名称,可以轻松找到对应的代码
  8. 按照一般的流程这里要修改layout_widthlayout_height为0dp,然后把修改过的xml放主题里,但是它这个比较简单,后面是引用代码,所以本实例只需要修改引用的资源值就OK了。这里我们看到后面引用的资源值分别为dimen中的padding_133padding_146,只需要把这两个资源修改为0dp就好
  9. 在工程文件夹下建立/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>

    保存

  10. 与上面相同,使用OTGSubs打包工程后应用主题,结束。

实例4 综合进阶之xml处理——Heavens Above去广告(Heavens Above

去广告前后对比

  1. 提取APK
  2. 使用开发者助手,选择带广告文字的控件,查看属性,然后复制十六进制的ID值
  3. 使用MT,打开APK,搜索刚刚复制的ID,得到一个名为layout_adcontainer.xml的结果,点击打开
  4. 这里要把所有的layout_widthlayout_height修改为0dp,然后要把所有的@xxx/xxx修改为@*包名:xxx/xxx的形式,把所有的?xxx/xxx修改为固定值,顺道把它的点击属性去掉也行(删掉onClick那一行就行),修改完的样子如下图
  5. 在上一个实例的文件夹下建立com.heavens_above.viewer/res/layout/layout_adcontainer.xml,把刚才修改完的内容复制进去,保存。
  6. 与上面相同,打包。应用主题之后就会看到效果了,结束。

实例5 终极追源之Android Studio

AS是查资源ID最终极的方法,相对于开发者助手的好处是可以查开发者助手查不到的东西,比如锁屏、状态栏下拉等,AS的分析也比手机端的好用一些,只不过是纯英文界面,不好入门。

  1. AS安装好后,首次启动会安装SDK,SDK目录一定要记好
  2. 安装Java
  3. 以上两步完成之后,打开SDK目录,如图
  4. 依次打开\tools\lib\monitor-x86_64,然后打开monitor.exe,只需要这个

  5. 将手机打开USB调试用数据线连接电脑,然后就会在左边列表找到设备了,点击一下,手机把要分析的界面打开,然后点击下图的按钮
  6. 等待分析之后就会出现当前手机界面的截图,然后用鼠标点击控件就可以在右下角看到属性信息了
  7. 使用MT,打开APK,依次打开resources.arsc→Arsc编辑器→包名→id,然后查找刚刚查到的ID名称,查到之后长按项目,复制ID
  8. 后面的步骤就和之前一样了,就不写了

0x05总结

Sub主题能修改的东西不少,只要你有创意,想怎么玩就怎么玩。
写这个教程前前后后花了快一个月,越到后面越难写,这其中有不少自己摸索出来的东西,刚开始一头雾水没关系,时间长了就理解了。
祝大家玩的开心~

Leave a comment

邮箱地址不会被公开。 必填项已用*标注

  1. 哈哈哈哈

添加好友

微信扫描添加好友