用 Apktool 逆向和重打包 APK:两条命令从单文件变成可改的工程
2026/9/5 19:06:32 网站建设 项目流程

用 Apktool 逆向和重打包 APK:两条命令从单文件变成可改的工程

【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool

你可能有过这种体验:把一个 APK 直接解压开,看到的是二进制格式的resources.arsc、打不开成文本的AndroidManifest.xml,以及一段谁都读不懂的classes.dex——到此为止,没有工具的路基本走不通了。Apktool 就是为这一步准备的:它是个用 Java 写的 Android APK 逆向工具,能把 APK 里的资源和代码还原成接近原始源码的样子,等你改完后,再重新打包回一个能安装的 APK。下面这篇按"没它卡在哪 → 它怎么打通 → 能做什么、不能做什么 → 失败时查哪里"来讲。

没有 Apktool 的时候,卡在哪一步

直接解压只能做到"把文件取出来",做不到"把内容读明白",典型卡点是三个:

  • 资源是黑盒resources.arsc是一张二进制的资源表,文案、颜色、图片全塞在里面,解压不会帮你拆成一个一个的文件;
  • 清单看不懂:APK 里的AndroidManifest.xml是二进制 XML,直接打开全是乱码;
  • 改完没法打包:不少反编译工具只给你"只读"结果,逻辑能看,但你想改两行再装回手机,没有回头路。

你真正需要的,是一个"能当工程读、还能写回成 APK"的工具,这正是 Apktool 的定位。

它怎么打通:当工程读,写回成 APK

整个过程围绕decode(解码)和build(构建)两个子命令展开,短形式是db

第一步,解包:

java -jar apktool.jar d sample.apk -o sample_out

这条命令把sample.apk完整解码进sample_out目录:资源按类型和限定词拆进res/,清单还原成普通 XML,代码则按类拆成 smali 文件(smali 是 Android 平台的寄存器级汇编,比 Java 难看,但每一行都能读、能改)。真正负责解包的是 ApkDecoder.java,其中 smali 部分的解码在 SmaliDecoder.java。

中间一步,修改:改res/values/里的文案、换图片、调整清单,都是明文和图片文件的正常编辑,所见即所得。

最后一步,打包:

java -jar apktool.jar b sample_out

这条命令把改过的sample_out重新编译资源、把 smali 拼回字节码、打包成新的 APK,全程由 ApkBuilder.java 完成,你不用自己拼构建细节。另外,如果目标应用依赖某个系统框架的资源,它还提供install-framework等子命令来管理框架版本。

适合做什么,不适合做什么

先说适合:本地化翻译、研究应用逻辑、给应用补充新平台适配——这几件事它做得顺手,也是项目官方推荐的方向,成本很低:改文件、跑命令,完事。

再说不适合,这些都能在项目路线图 ROADMAP.md 里查到:

  • Split APK:工具的基本假设是"一个 APK",按 ABI 或语言拆分的多包应用暂时不在能力范围内;
  • 框架版本错位:它随发布版本附带当时的最新框架文件,如果应用是针对很老的 API 构建的,可能需要自己补对应版本的框架;
  • 无引用资源:塞在res目录里但没被资源表引用的文件,会被漏掉。

用途上就一句带过:它面向上面的正当用途,不是拿来干盗版的事。

逐行调试 smali:资源改不动的时候

有些问题不在资源里,而在代码里:文案没变,是因为字符串硬编码在逻辑中。这时候可以在反编译出的 smali 上单步执行,逐行观察寄存器和变量的变化,定位到具体哪条指令出了问题,不用再靠猜。顺带一提,v2.9.3 也优化了这套调试的稳定性,逐步排查时中断和报错更少。

重建的 APK 装不上,先查哪里

  • 框架问题排第一:安装时报资源相关的错,先确认应用依赖的框架版本装没装(对应install-framework那组命令);
  • 改动位置:手改 smali 有没有笔误、资源值里有没有留下未解析的引用;
  • 工具版本:v2.9.3 强化了资源解码与重建链路,重建结果更容易被设备正常识别,重打包环节也提速了,反复试改的节奏不会被构建拖慢;此版本修复的已知漏洞同样降低了处理来路不明 APK 的风险。排查问题时先确认自己用的不是老版本。

从装工具到读源码,怎么上手

只想用:拿到官方发布的 jar,用 Java 直接运行即可,项目文档入口在 README.md。

想自己编译:先git clone https://gitcode.com/GitHub_Trending/ap/Apktool,然后用仓库自带的gradlew(Gradle Wrapper,免去本地装 Gradle)构建,注意需要 JDK 17 及以上。所有第三方依赖的版本清单集中在 gradle/libs.versions.toml,看到 smali、baksmali 这些名字就能对上前面讲的反编译环节。

最后给个读代码的顺序建议:先 ApkDecoder.java 看它怎么把 APK 拆成目录,再 ApkBuilder.java 看怎么装回去,两个互为逆过程,读完主线就通了;至于"为什么有些资源现在还解不出来",答案基本都写在 ROADMAP.md 里。

【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询