根据网上的一些制作 magisk 模块的模板, 制作一个模块如果要对 apk 进行修改则只能用修改后的 apk 文件整体替换原文件. 一个 apk 文件可能会达到几十 MB, 但实际需要修改的可能只有几百 KB. 而且整体替换会因系统版本更新导致有几率变砖.
此帖终结. 已经找到了方法, 但不完全依赖 Magisk:
zip -g <apkfile> <file1> [file2] [file3] ...
命令向现有 apk 文件追加要替换的文件.zipalign
命令对 apk 文件进行处理. 前面提到因为修改 apk 导致变砖可以尝试这个.对于 zip -g
命令, 要追加的文件最好和 apk 处于同一路径, 在命令行里可以用 ./*/*.*
之类的相对路径, 这样可以使追加到压缩包内的文件也使用相对路径. 例如 zip -g /system/framework/framework-res.apk ./res/drawable-nodpi-v4/spot_down_01.png ./res/drawable-nodpi-v4/spot_down_02.png ./res/drawable-nodpi-v4/spot_down_03.png
每次刷机后执行带有以上命令的 shell 脚本即可. 如果系统没有内置 zip
命令, 可以在 magisk 中安装 ZipSinger & Zip for Android NDK
模块.
1
ReferenceE 2021-04-20 21:32:25 +08:00 via Android
" 而且整体替换会因系统版本更新导致有几率变砖."
请问这个是怎么做到的?( |
2
YamatoRyou OP @ReferenceE "整体替换" 相对于整个 apk 文件而言. 我现在用的是欧版 MIUI 12.6, 曾经遇到过因为替换 framework-res.apk 之后又经过系统更新后手机变砖 (进不去系统, 只能进 rec) 的现象. 虽然后来救砖成功, 但每更新一次系统, 这个模块就要重做一次.
|
3
i0error 2021-04-20 23:45:35 +08:00
可以考虑安装 apktool ?
然后做一遍修改的过程,之前似乎看到过这样的模块。 |
4
YamatoRyou OP @i0error 并非对其进行反编译, 只是替换里面的几个资源文件 (如位图 / 字体).
|
5
ysc3839 2021-04-21 03:21:08 +08:00 via Android 1
没办法,最多只能实现安装时跑个脚本进行替换,然后把替换后的结果保存下来。
另外你说是修改 framework-res.apk ,应该优先考虑 Runtime Resource Overlays 。 |
6
ysc3839 2021-04-21 03:22:21 +08:00 via Android
最后建议说出原始需求,避免 X-Y Problem 。
关于 X-Y Problem 请看 https://coolshell.cn/articles/10804.html |
7
YamatoRyou OP @ysc3839 我刚才发现 Magisk 仓库有一个 zip 命令支持, 用 termux 执行命令操作 apk 时卡在了 /system 分区空间不足的问题上, 鉴于空间问题目前无解, 也就没法确定即使空间充裕了, 下一个问题是不是操作 apk 的时候也会遭遇我没料到的障碍. 进而最终失败. 我会去找别的方法. 至于 "原始需求", 无非是字体或一些图案的替换.
|
8
winterbells 2021-04-21 08:16:31 +08:00 via Android
用 xposed ?
|
9
yukiww233 2021-04-21 10:00:56 +08:00
|