ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Apktool 使用教程:从反编译到重打包的完整实战指南

Apktool 使用教程:从反编译到重打包的完整实战指南 Apktool 使用教程从反编译到重打包的完整实战指南【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/ApktoolApktool 是一款用于逆向 Android APK 的经典命令行工具它能把resources.arsc资源表和二进制AndroidManifest.xml还原成可读的 XML 和 res 目录把classes.dex反汇编成一行行 smali 代码——而你改完之后它还能把整个工程重新打包回 APK。本教程就带你走完反编译 → 改代码 → 重打包 → 安装验证这条最实用的路径顺带讲清apktool.yml里每个日常会用到的字段。一、拿到一个能跑的 apktool.jar 前提是你装好了 JDK 8 及以上版本。最省事的做法是直接下载官方发布的apktool_x.y.z.jar发行版页面可获取如果你更习惯自己构建可以 clone 仓库git clone https://gitcode.com/GitHub_Trending/ap/Apktool cd Apktool ./gradlew :apktool-cli:shadowJar构建产物在brut.apktool/apktool-cli/build/libs/apktool_x.y.z.jar。后面统一用apktool.jar指代它。所有命令都遵循同一个套路java -jar apktool.jar 命令 [选项] 文件或目录二、实战任务把某 App 的 versionName 改成 1.0.1 并装回手机整个流程四步跟着敲一遍你就掌握了 Apktool 的核心闭环。第 1 步用 d 命令把 APK 拆开看结构d是 decode 的缩写也是使用频率最高的命令java -jar apktool.jar d sample.apk执行完你会得到一个sample/目录内部结构接近一个Android 工程AndroidManifest.xml——二进制清单还原成的文本版res/——layout、drawable、values 等资源文件smali/——dex 反汇编出的 smali 代码assets/、lib/——原样拷贝的目录apktool.yml——本次反编译生成的工程配置文件稍后细讲第 2 步找到要改的地方我们的目标是改版本号所以直接打开sample/AndroidManifest.xml找到android:versionName1.0.0改成1.0.1即可。如果你想改代码逻辑就去smali/下对应包路径找文件smali 本质上就是 Dalvik 字节码的文本形式改字符串常量、调方法跳转都很直接。改之前建议把原文件备份一份方便回滚。第 3 步用 b 命令重新打包在工程目录sample/外层执行java -jar apktool.jar b sample -c myapp_v2.apk-c指定产出的 APK 文件名构建结果默认落在dist/目录里即dist/myapp_v2.apk。此时一个完整的Apktool 反编译 → 修改 → 重编译闭环就走完了。第 4 步安装验证注意dist/里的 APK 是未签名的直接adb install会报INSTALL_FAILED_NO_CERTIFICATES。装之前需要自己签一次名apksigner sign --ks my.keystore dist/myapp_v2.apk adb install dist/myapp_v2.apk安装后在系统设置里确认版本号看到 1.0.1 即验证成功。顺带认识 if给系统框架建档上面这个例子能跑通是因为普通 APK 只依赖 Android 基础框架。但一旦 APK 用到了系统 API例如部分系统应用、插件构建时会抛FrameworkNotFoundException这时就需要if命令install-framework 的缩写java -jar apktool.jar if framework-res.apk它把框架资源解出来并缓存到~/.local/share/apktool/framework/之后b构建时自动匹配。装完之后可以用java -jar apktool.jar list-frameworks查看已装框架不用的用clean-frameworks清掉。if虽然不是每个任务都用得上但它排在整个工作流的最前面——框架没装好d和b都可能卡住。三、apktool.yml 配置精读五个你真正会动的字段每次d都会生成apktool.yml它是重打包时的工程记忆。日常基本只需要关注下面这几个字段字段读写逻辑见 ApkInfo 源码version生成该工程的 apktool 版本。建议保持与当前工具一致跨版本混用容易踩坑。apkFileName原始 APK 的文件名。一般不用动注意它只接受纯文件名带/、\的值会被源码直接拒绝。versionInfo记录 APK 的versionName和versionCode。它是反编译时的快照只读参考——改版本要去 manifest 里改改 yml 不会生效。sdkInfominSdkVersion和targetSdkVersion决定重编译时按哪个 SDK 的规格处理资源一般保持默认即可。usesFramework声明依赖的系统框架id 和 tag。用了系统 API 的 APK 才有这段配合if命令工作它为空说明是普通三方 APK。resourcesInfosparseEntries/compactEntries记录资源表的压缩格式doNotCompress列出重打包时不压缩的扩展名。这两类值都由d自动探测写入手动改动前请先确认你明白原 APK 的 ARSC 结构。一个经验yml 里可以改的极少不能乱改的很多。绝大多数定制需求换版本号、改权限、调资源都应该落在 manifest 和 res/smali 里yml 只需要在升级 apktool 大版本时留意version字段。四、常见坑与排障 ⚠️FrameworkNotFoundException框架没装或版本不对。先apktool if framework-res.apk再构建多个框架时可用--frame-path 目录指定存放位置。OutDirExistsException目录已存在d的目标目录已存在时会直接拒绝。换个输出目录或者加-f强制覆盖。aapt / aapt2 报错、资源链接失败多半是资源引用了框架里缺失的 API。加-v看详细日志定位到具体资源如果确认只需要动代码可以用b 目录 --no-res跳过资源重编译来隔离问题。装上去就闪退90% 是 smali 改动引入的——寄存器编号没对上、寄存器声明数量与方法实际不符。改动前先对照备份小步修改小步验证。多 dex 的 APK 没解全默认只解主 dex加-aall-src可以连同未知 dex 一起反汇编。几个高频选项值得记一下-s不反编译代码只看资源时省时间、-r不反编译资源、-j n控制并行线程数、-v详细日志。五、收尾与延伸阅读到这里你已经拥有了完整的日常工具链d拆包、if备框架、b重打包、apktool.yml 兜底配置。命令速查命令别名作用ddecode反编译 APKbbuild重打包为 APKifinstall-framework安装系统框架lflist-frameworks查看已装框架cfclean-frameworks清理框架缓存想深入原理可以翻翻 核心库源码资源解析、smali 构建都在这里和 完整的测试用例集——里面每个*Test.java几乎都对应一类真实世界踩过的坑是最好的进阶教材。【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表