Magisk 如何对单个 apk 文件内部的文件进行替换? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
YamatoRyou
V2EX    Android

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

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

    根据网上的一些制作 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 的时候也会遭遇我没料到的障碍. 进而最终失败. 我会去找别的方法. 至于 "原始需求", 无非是字体或一些图案的替换.
    300
        8
    300  
       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     Solana     5701 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 02:37 PVG 10:37 LAX 18:37 JFK 21:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86