V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
YamatoRyou
V2EX  ›  Android

Magisk 如何对单个 apk 文件内部的文件进行替换?

  •  
  •   YamatoRyou · 2021-04-20 21:28:10 +08:00 · 9458 次点击
    这是一个创建于 1311 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根据网上的一些制作 magisk 模块的模板, 制作一个模块如果要对 apk 进行修改则只能用修改后的 apk 文件整体替换原文件. 一个 apk 文件可能会达到几十 MB, 但实际需要修改的可能只有几百 KB. 而且整体替换会因系统版本更新导致有几率变砖.

    第 1 条附言  ·  2021-04-24 00:26:18 +08:00

    此帖终结. 已经找到了方法, 但不完全依赖 Magisk:

    1. 使用 zip -g <apkfile> <file1> [file2] [file3] ... 命令向现有 apk 文件追加要替换的文件.
    2. 如有需要, 应使用 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 模块.

    9 条回复    2021-04-21 10:00:56 +08:00
    ReferenceE
        1
    ReferenceE  
       2021-04-20 21:32:25 +08:00 via Android
    " 而且整体替换会因系统版本更新导致有几率变砖."
    请问这个是怎么做到的?(
    YamatoRyou
        2
    YamatoRyou  
    OP
       2021-04-20 21:36:41 +08:00
    @ReferenceE "整体替换" 相对于整个 apk 文件而言. 我现在用的是欧版 MIUI 12.6, 曾经遇到过因为替换 framework-res.apk 之后又经过系统更新后手机变砖 (进不去系统, 只能进 rec) 的现象. 虽然后来救砖成功, 但每更新一次系统, 这个模块就要重做一次.
    i0error
        3
    i0error  
       2021-04-20 23:45:35 +08:00
    可以考虑安装 apktool ?
    然后做一遍修改的过程,之前似乎看到过这样的模块。
    YamatoRyou
        4
    YamatoRyou  
    OP
       2021-04-21 02:34:12 +08:00
    @i0error 并非对其进行反编译, 只是替换里面的几个资源文件 (如位图 / 字体).
    ysc3839
        5
    ysc3839  
       2021-04-21 03:21:08 +08:00 via Android   ❤️ 1
    没办法,最多只能实现安装时跑个脚本进行替换,然后把替换后的结果保存下来。
    另外你说是修改 framework-res.apk ,应该优先考虑 Runtime Resource Overlays 。
    ysc3839
        6
    ysc3839  
       2021-04-21 03:22:21 +08:00 via Android
    最后建议说出原始需求,避免 X-Y Problem 。
    关于 X-Y Problem 请看 https://coolshell.cn/articles/10804.html
    YamatoRyou
        7
    YamatoRyou  
    OP
       2021-04-21 03:34:03 +08:00
    @ysc3839 我刚才发现 Magisk 仓库有一个 zip 命令支持, 用 termux 执行命令操作 apk 时卡在了 /system 分区空间不足的问题上, 鉴于空间问题目前无解, 也就没法确定即使空间充裕了, 下一个问题是不是操作 apk 的时候也会遭遇我没料到的障碍. 进而最终失败. 我会去找别的方法. 至于 "原始需求", 无非是字体或一些图案的替换.
    winterbells
        8
    winterbells  
       2021-04-21 08:16:31 +08:00 via Android
    用 xposed ?
    yukiww233
        9
    yukiww233  
       2021-04-21 10:00:56 +08:00

    参考这个, magisk module 直接放个脚本和替换的资源, 开机前完成解压修改替换
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1129 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:38 · PVG 02:38 · LAX 10:38 · JFK 13:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.