Android菜单:基于 Rust 与 egui 的 Unity IL2CPP Android 游戏内置菜单工具链项目

可用于为 Unity IL2CPP Android 游戏开发内置 Mod 菜单。提供 Rust il2cpp hook、egui 原生菜单、Kotlin JNI 桥接与 CLI 脚手架,支持从 APK 初始化、构建和安装。【此简介由AI生成】

分支1Tags0

menu

Android Unity(IL2CPP)游戏内置修改菜单(mod menu)工具链:Rust + egui 渲染原生悬浮菜单, 通过 il2cpp hook 读写游戏内存,Java/Kotlin 侧仅负责 Surface 与输入桥接。

其中游戏业务实现(rust/menu,独立 workspace)不发布;其余四个 crate 已发布到 crates.io,可用于任何 Unity IL2CPP 游戏的同类开发:

crate 说明
il2cpp_utils il2cpp 绑定运行时:7 个过程宏生成类/字段/方法绑定,dobby hook,集合镜像,GC 写屏障
il2cpp-utils-macros 上述过程宏的实现(#[il2cpp_class] 等 7 个)
menu-ui Android 内置菜单框架:EGL/egui 渲染、JNI 输入桥接、原生文本框与图片选择
menu-utils 脚手架 CLI:init 把 APK 变成可构建的 Gradle + Rust 工程,build / run 构建安装启动

架构

┌────────────────────────── 安装到手机的 APK ──────────────────────────┐
│  游戏(Unity libil2cpp.so、assets、res、游戏 so —— 原样保留)          │
│  lib<mod>.so          Rust 侧:菜单业务(menu) + menu-ui + il2cpp_utils │
│  egui-bridge.jar      Kotlin 桥接:EguiInitProvider 自动 attach、      │
│                       SurfaceView/EGL 表面、触摸路由、选图/文本框      │
│  classes*.jar         游戏 Java 层(dex 经 d2j-dex2jar 转回 class jar) │
└──────────────────────────────────────────────────────────────────────┘
        ↑ gradle assembleDebug/Release(AGP 9.2.1 + Gradle 9.8)
   menu-utils init / build / run
        ↓ cargo ndk(aarch64-linux-android)
   rust/ 工作空间:menu-ui + il2cpp_utils(+macros) + menu-utils(本 CLI)
   (menu 为游戏业务 crate,独立 workspace,不入 crates.io)

运行链路:游戏启动 → EguiInitProvider(ContentProvider,首个 Activity 恢复时自动触发) → System.loadLibrary(<mod库名>) → Rust JNI_OnLoad → il2cpp_utils::init 等 libil2cpp.so 加载后挂全部 hook;menu_ui::init 在独立 EGL SurfaceView 上跑 egui 主循环, 触摸事件经 TouchRouter 分流(菜单手势 vs 游戏点击)。

目录结构

├── android/                 # Gradle 工程(Gradle 9.8 + AGP 9.2.1)
│   └── egui-bridge/         #   桥接库 Kotlin 源码;构建后从 AAR 抽出
│                            #   egui-bridge.jar(随源码提交,menu-utils 内嵌同款)
├── rust/                    # cargo 工作空间
│   ├── il2cpp_utils/        #   绑定运行时 + macros/(已发布)
│   ├── menu-ui/             #   菜单框架(已发布)
│   ├── menu-utils/          #   脚手架 CLI(已发布)
│   └── menu/                #   游戏业务 crate(独立 workspace,不发布,已忽略)
└── publish.bat              # 四个 crate 发布到 crates.io(幂等)

快速开始(新游戏 / 新工程)

环境要求(PATH 可用):JDK 17+、Android SDK + NDK、cargo-ndk、apktool、 d2j-dex2jar(dex-tools)、adb;Rust target aarch64-linux-android。

rustup target add aarch64-linux-android
cargo install menu-utils

mkdir my-mod && cd my-mod
menu-utils init <游戏.apk> mymenu    # 解包 APK → target/android + 当前目录 Rust 项目
menu-utils build                     # cargo ndk 出 libmymenu.so → gradle 出 APK
menu-utils run                       # 增量构建 + adb 安装 + 启动游戏
  • init 生成物:target/android/(游戏 manifest/res/assets/jniLibs,游戏 dex → jar/classesN.jar,注入 egui-bridge 组件与 com.wuyan.egui.LIB_NAME meta-data) 和当前目录的 Rust 项目(依赖 crates.io 的 menu-ui = "0.1",写你的菜单 UI);
  • 已初始化的工程重复 init 不会覆盖你的 Rust 代码;--release 构建用 debug 签名可直接安装。

发布新版本

改 publish.bat 顶部 VERSION(与各 Cargo.toml 一致)后运行 publish.bat; 需要先 cargo login 并在 crates.io 完成邮箱验证。menu-ui / il2cpp_utils 因依赖 Android-only 库(ndk-sys / dobby)在脚本内以 --no-verify / --no-default-features 验证,Android 编译以 cargo ndk check 为准。

License

MIT OR Apache-2.0

项目介绍

可用于为 Unity IL2CPP Android 游戏开发内置 Mod 菜单。提供 Rust il2cpp hook、egui 原生菜单、Kotlin JNI 桥接与 CLI 脚手架,支持从 APK 初始化、构建和安装。【此简介由AI生成】

定制我的领域