反编译查看源码

在 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. 需要用 apksigner 或 jarsigner 给 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
相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼5 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone5 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen5 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone5 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui