news 2026/8/22 17:40:25

如何用 Apktool 解包并重建 APK:从解码到签名的实用实操教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 Apktool 解包并重建 APK:从解码到签名的实用实操教程

如何用 Apktool 解包并重建 APK:从解码到签名的实用实操教程

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

Apktool 是一款逆向 Android APK 的命令行工具:它能把 APK 里的代码和资源解码成你能直接阅读和修改的形态,再重新打包成可安装的新 APK。本文带你在一条完整流程上走完「解码 → 修改 → 重建 → 签名」。

它解决什么问题

想改一个 App 的某句文案,或者查看它到底申请了哪些权限时,会卡在两道坎上。其一,APK 是个密封的二进制包:里面的 AndroidManifest.xml 是二进制格式,文本编辑器打开就是一堆乱码;程序逻辑则以 .dex 字节码形式存在,人眼读不动。其二,就算你改到了文件,手工把它重新装回一个可安装的 APK(资源重编译、打包、签名、对齐)很容易漏步骤,最后往往装不上。

Apktool 把这两件事一次解决:它负责解码,也负责重建,你只需要改中间那些文本。

五分钟上手

Mac 用户用 Homebrew 直接装;其他系统克隆源码构建(需要 JDK 17 及以上):

brew install apktool

这条命令从 Homebrew 源安装 apktool,装完终端里就能直接调用。

git clone https://gitcode.com/GitHub_Trending/ap/Apktool cd Apktool ./gradlew build shadowJar

第一条把仓库克隆到本地;第二条进入项目目录;第三条构建出一个包含全部依赖的单 jar,产物在 brut.apktool/apktool-cli/build/libs/apktool-cli-all.jar。你可以用java -jar运行它,也可以把 scripts/linux/apktool 这个启动脚本拷到 jar 旁边,之后直接敲apktool即可。

最后验证环境,并解码第一个 APK:

apktool v apktool d sample.apk -o sample_out

第一条打印已安装的版本号,确认环境没问题;第二条把 sample.apk 解码到 sample_out 目录,从此里面都是能直接打开的文本文件。

核心工作流

第一步:如何解包 APK(apktool d)

解码是每次任务的第一步,基本形态:

apktool d <apk文件路径> -o <输出目录> # 示例 apktool d /path/to/app-release.apk -o app_decoded

这条命令把 apk 里的资源和代码反编译回磁盘;不指定输出目录时,默认在与 apk 同名(去掉 .apk 后缀)的目录下生成。常用参数:

参数什么时候用
-s只想看资源,不解码代码(更快)
-r不解码资源,只要 Smali 代码
--only-manifest只解包清单文件,速度最快
-f输出目录已存在,强制清空后重新解码

表里的 Smali 是 Android 的文本化字节码:类似 Java 字节码,但人可以直接阅读和编辑,apktool 把 .dex 还原成 .sm 文件用的就是它。

第二步:读懂解码出来的目录

解码后目录结构是固定的,记住一次就够用:

  • AndroidManifest.xml:App 的「户口本」,权限、组件、版本都写在这里。
  • res/:布局、图片、字符串等资源,全部文本化。
  • smali/(还可能有 smali_classes2/ 等):Smali 代码,一个 dex 对应一个目录。
  • apktool.yml:解码记录,写着包 ID、密度等信息,重建时必需,别删。

第三步:改哪里:文案、权限、Smali

按需挑一处修改:

  • 改文案:打开 res/values/strings.xml,搜到对应字符串直接改。
  • 改权限:打开 AndroidManifest.xml,删掉或修改对应的<uses-permission>行。
  • 改逻辑:打开 smali/ 下目标类的 .sm 文件。Smali 偏汇编级,需要先定位到具体类和方法(配合下文提到的工具定位会快很多)。

解码目录和原始 APK 是两回事,改坏也不影响原始包,删掉重来即可。

第四步:如何完成重建(apktool b)

apktool b <解码目录> -o <输出.apk> # 示例 apktool b app_decoded -o app_rebuilt.apk

这条命令重新编译资源、把 Smali 装配回 .dex,再打包成新 APK。它默认按 apktool.yml 做增量构建,只重建你改动的文件;想强制全量重建就加 -f:

apktool b app_decoded -o app_rebuilt.apk -f

此时 APK 还是「裸包」,没有签名,不能直接安装。

第五步:如何完成签名打包(apksigner)

Android 只认带签名的 APK。先生成一个 keystore(可以理解为存着「私章」的文件),再用 apksigner 签名:

keytool -genkeypair -v -keystore my.keystore -alias mykey -keyalg RSA -validity 10000 apksigner sign --ks my.keystore --ks-key-alias mykey app_rebuilt.apk adb install app_rebuilt.apk

第一条生成 keystore(中途会让你设密码);第二条为 APK 签名;第三条把它装到已连接的手机上。注意重建包与原应用签名不同,需要先卸载原应用,否则安装会报签名冲突。

典型场景实战

场景一:本地化或修正应用文案

场景描述:你想改 App 里的某句提示语,或把部分文案翻译成另一种语言,官方又没提供入口。

具体做法:解码后在 res/values/strings.xml(其他语言在对应 values-xx 目录)里搜到目标句子改掉,再重建签名:

apktool d app.apk -o app_l10n apktool b app_l10n -o app_l10n.apk

实际效果:App 内文案变成你的版本,不用等官方发版;想回滚就删掉解码目录重新解码一次。

场景二:调整应用权限

场景描述:App 申请了一个你不想要的权限(比如读取电话状态),你希望去掉它。

具体做法:解码后打开 AndroidManifest.xml,删除或修改目标<uses-permission android:name="..."/>行,再重建签名。

实际效果:系统权限弹窗里不再出现该权限。但要注意,如果 App 功能依赖这个权限,对应功能可能不可用,所以建议先备份解码目录再动手。

场景三:排查 Smali 代码

场景描述:App 在某个场景崩溃,或你想在某处注入调试输出,需要定位到问题类。

具体做法:先用能生成 Java 视图的反编译工具找到「哪个类哪个方法」,再打开 smali/ 下对应的 .sm 文件做细改。想上真机调试的话,重建时加 --debuggable:

apktool b app_decoded -o app_debug.apk --debuggable

这条命令会在清单里写入 android:debuggable="true",让应用可以被调试器连接。

实际效果:不需要原始源码,也能逐步阅读和修改程序逻辑;代价是 Smali 语法接近汇编,改动要格外小心。

避坑与最佳实践

💡 几条来自真实踩坑的经验:

  • 改之前备份原始 APK 和解码目录,用独立工作目录存放,别和原包混在一起。
  • 别手工删改 apktool.yml,重建靠它找回原始资源 ID,动它等于给重建埋雷。
  • 加了壳、加密的应用别硬解:加固过的包可能直接解码失败,或重建后装上是白屏。
  • 改完资源重建后没生效,先试 -f 强制全量重建,增量构建默认只重编它认为有变化的文件。
  • 3.x 版本不支持 32 位系统,装 64 位 JDK 再构建。

配套工具与延伸阅读

  • apksigner(随 Android SDK 提供):Apktool 只管重建,签名这最后一棒交给它,支持 v2/v3 签名方案。
  • jadx:能把 .dex 读成 Java 层视图,先用它定位要改哪个类,再回到 Smali 细看,效率会高很多。
  • zipalign(同在 build-tools 里):给重建后的 APK 做对齐,部分系统上能改善内存映射效率。

想看全部参数说明,随时在终端敲 apktool h;所有命令行参数都定义在源码 brut.apktool/apktool-cli/src/main/java/brut/apktool/Main.java 里,遇到不认识的参数,翻这个文件最直接。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 17:38:41

130、双摄/多摄外参标定——视差校正与产线标定工位设计在手机/车载平台的量产实践

130、双摄/多摄外参标定——视差校正与产线标定工位设计在手机/车载平台的量产实践 去年夏天,某旗舰机项目在试产阶段突然爆出“预览画面边缘重影”的客诉,我们连夜拉数据,发现双摄模组的虚化分割线在画面左三分之一处出现明显错位。当时第一反应是算法参数没烧进去,结果查…

作者头像 李华
网站建设 2026/8/22 17:33:06

Git 提交备注修改与合并、回退版本

备注写错了、写重了&#xff0c;想合并或者删除&#xff0c;上传到github时不小心上传了两次initial的备注&#xff1f; 方案一 &#xff1a; 仅修改最新的 Commit 备注 如果希望保留两次提交的历史&#xff0c;只是想把最新的 e8a45a9 备注改成更准确的描述&#xff08;例如 f…

作者头像 李华
网站建设 2026/8/22 17:31:15

Companion:免费把 700+ 设备塞进一块按键面板

Companion&#xff1a;免费把 700 设备塞进一块按键面板 【免费下载链接】companion Bitfocus Companion enables the Elgato Stream Deck and other controllers to be a professional shotbox surface for an increasing amount of different presentation switchers, video …

作者头像 李华
网站建设 2026/8/22 17:30:38

AI旅游谁在买单?4类B端用户付费率超35%的ROI分析

2025年&#xff0c;我们团队做过一次实验&#xff1a;同一款AI旅游规划产品投放给10000个用户&#xff0c;定价199元每次或2980元每年。整体付费率4.2%&#xff0c;符合行业平均。但拆解后发现&#xff0c;有4类人群的付费率超过35%。这4类人不是最有钱的&#xff0c;不是最年轻…

作者头像 李华