反编译查看源码

在 mac 上反编译 APK --- 快速可行的流程(含命令与工具)

可以的,mac 完全可以反编译 APK 来查看源码与资源。常用流程是:把 APK 解包读取资源(apktool) + 反编译 dex 为 Java 源码(jadx / dex2jar + jd-gui) 。下面给出推荐工具、安装命令、具体步骤、注意事项与常见问题处理办法。

推荐工具(都可用 Homebrew 安装)

  • jadx --- dex → Java 的反编译器,带 GUI,很方便直接浏览源码与资源。GitHub+1
  • apktool --- 解码资源(AndroidManifest.xml、res/、smali 等),也支持重打包。apktool.org
  • dex2jar(可选)--- 把 classes.dex 转成 jar,再用 JD-GUI 或其它 Java 反编译器查看。

安装(Terminal):

bash 复制代码
# 如果没安装 Homebrew,请先安装 Homebrew(官网命令)
# 安装工具
brew install jadx
brew install apktool
brew install dex2jar

(Homebrew 上有这些公式,安装后会把命令放到 PATH 中)。

常见反编译工作流(最简单 --- 直接看源码)

  1. 在 Finder / Terminal 把 your-app.apk 放到某目录。

  2. jadx GUI 直接打开 APK(最快):

    复制代码
    jadx-gui your-app.apk

    GUI 会显示包结构、Java 源、资源文件,适合大多数查看场景。GitHub


进阶(分开看资源与字节码)

  1. 用 apktool 解码资源与 smali(可以看到原始 AndroidManifest、资源 xml):

    bash 复制代码
    apktool d your-app.apk -o app_decoded
    # 结果在 app_decoded/ 包含 AndroidManifest.xml、res/、smali/ 等

    apktool 对资源恢复更好,适合查看布局、string、manifest、以及做修改后重打包。apktool.org

  2. 用 jadx 命令行输出 Java 源到目录(或用 GUI 导出):

    arduino 复制代码
    jadx -d jadx_out your-app.apk
    # 或直接在 GUI 里 File → Save all
  3. 可选:用 dex2jar + JD-GUI(若你想用其他 Java 反编译器):

    bash 复制代码
    # 把 apk 解开,拿到 classes.dex(或直接使用 dex2jar on apk)
    d2j-dex2jar.sh your-app.apk -o classes-dex2jar.jar
    # 然后用 jd-gui 打开 classes-dex2jar.jar(或用其他反编译器)

如果想重打包 / 修改并安装回设备

  1. 修改完 apktool d 得到的目录后重建:

    css 复制代码
    apktool b app_decoded -o modified.apk
  2. 需要用 apksignerjarsigner 给 APK 签名,然后用 adb install 安装。注意:如果原来是签名保护、或使用 Google Play 签名,替换签名可能导致安装失败或服务端校验失败。


常见问题与注意事项

  • 混淆/脱壳:ProGuard/R8 混淆会把类/方法名改成短名(a, b...),反编译出来可读性差;某些应用还会通过壳/加固(如壳加密、Native 加载 dex)增加反编译难度。
  • Kotlin 项目:jadx 能反编译 Kotlin,但结果可能不如 Java 原始源码整洁;部分 Kotlin 语法或 lambda 会反编译得比较"低级"。
  • 不是 100% 原始源码:反编译得到的是"近似源码",注释和原始变量名通常丢失(除非未混淆)。
  • 合法性:反编译他人应用可能涉及版权/服务条款问题。请只对你有权查看或自己发布的 APK 进行逆向,或在合法授权范围内操作。
  • 资源恢复 :如果你只想看布局/strings/manifest,apktool d 往往比 jadx 更准确(APK 中的二进制 XML 会被正确转换)。apktool.org

快速 Troubleshooting(常见命令回顾)

  • 打开 GUI(jadx):

    swift 复制代码
    jadx-gui some.apk
  • 命令行导出 Java 源:

    swift 复制代码
    jadx -d out_dir some.apk
  • 解码资源(apktool):

    swift 复制代码
    apktool d some.apk -o decoded
  • dex2jar 转 jar(若 brew 安装了 dex2jar):

    csharp 复制代码
    d2j-dex2jar.sh some.apk -o out.jar
    # 然后用 jd-gui(或 IntelliJ 的 FernFlower/Bytecode Viewer)打开 out.jar
相关推荐
用户2018792831673 小时前
SIGABRT+GL errors Native Crash 问题分析
android
Nathan202406163 小时前
Kotlin-Sealed与Open的使用
android·前端·面试
2501_916013743 小时前
iOS 26 设备文件管理实战指南,文件访问、沙盒导出、系统变更与 uni-app 项目适配
android·ios·小程序·uni-app·cocoa·iphone·webview
2501_915921433 小时前
前端用什么开发工具?常用前端开发工具推荐与不同阶段的选择指南
android·前端·ios·小程序·uni-app·iphone·webview
2501_916007473 小时前
iOS 26 能耗检测实战指南,升级后电池掉速是否正常 + KeyMob + Instruments 实时监控 + 优化策略
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_916013743 小时前
苹果上架 App 全流程详解,iOS 应用发布步骤、ipa 文件上传工具、TestFlight 测试与 App Store 审核经验
android·ios·小程序·https·uni-app·iphone·webview
2501_915909064 小时前
HTML 开发工具有哪些?常用 HTML 开发工具推荐、学习路线与实战经验分享
android·小程序·https·uni-app·iphone·webview
wei8440678725 小时前
Android实现RecyclerView粘性头部效果,模拟微信账单列表的月份标题平移
android·java·微信·gitee
星空寻流年15 小时前
设计模式第五章(门面模式)
android·设计模式