反编译查看源码

在 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
相关推荐
Kapaseker2 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴2 小时前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android