反编译查看源码

在 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
相关推荐
恋猫de小郭2 小时前
再次紧急修复,Flutter 针对 WebView 无法点击问题增加新的快速修复
android·前端·flutter
李慕婉学姐2 小时前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql
似霰4 小时前
传统 Hal 开发笔记6----App 访问硬件服务
android·framework·hal
爱装代码的小瓶子4 小时前
【c++知识铺子】封装map和set(详细版)
android·java·c++
私人珍藏库5 小时前
AutoGLM无需豆包手机,让AI自动帮你点外卖-刷视频
android·ai·智能手机·工具·软件·辅助·autoglm
孤舟簔笠翁6 小时前
【Android驱动14】Android系统Crash工具使用方法和分析
android
帅得不敢出门6 小时前
MTK Android11 APP调用OTA升级
android·java·开发语言·framework
2501_915909067 小时前
苹果应用加密方案的一种方法,在没有源码的前提下,如何处理 IPA 的安全问题
android·安全·ios·小程序·uni-app·iphone·webview
用户2018792831677 小时前
Android App 换肤原理:用 "装修小房子" 故事浅谈
android