尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

TEESimulator源码构建教程:从克隆子模块到zipRelease的完整编译流程(含NDK与cargo ndk)

TEESimulator源码构建教程:从克隆子模块到zipRelease的完整编译流程(含NDK与cargo ndk) TEESimulator源码构建教程从克隆子模块到zipRelease的完整编译流程含NDK与cargo ndk【免费下载链接】TEESimulatorSoftware simulation for Android hardware-backed key pairs with key attestation项目地址: https://gitcode.com/gh_mirrors/te/TEESimulatorTEESimulator 是一个用软件模拟 Android 硬件密钥对与密钥证明Key Attestation的开源 Root 模块项目。本教程带你完成 TEESimulator 源码构建的完整流程从克隆仓库、初始化子模块到配置 Android NDK 与 Rust 的 cargo ndk 工具链最后用一条./gradlew zipRelease命令产出可刷入的模块 zip 包适合想二次开发或验证编译的读者。构建产物速览 整个项目是一个统一的 Gradle 构建图。zipRelease任务会自动完成四件事详见 README.md 的 Building from source 一节构建步骤驱动方式产物Rust 版 KeyMint TAcargo ndk经 CMake 自定义目标调用libteesim_km.a静态库双架构原生拦截器CMakeexternalNativeBuildlibteesim_keymint.so、libteesim_keystore.soarm64-v8a x86_64注入器与辅助二进制CMakeinject、teesim-uds、libteesim_logcat.so控制守护进程 模块打包AGP R8最终out/TEESimulator-v4.0-commit数-hash-Release.zip构建不需要连接任何真机——libbinder_ndk和liblog直接来自 NDKBoringSSL 要么运行时解析Android 12要么从子模块静态编入Android 10/11。第一步准备构建环境清单开始前确认本机已安装以下工具版本来自 app/build.gradle.kts 的显式声明JDK 21AGP 与 Gradle 的最低要求compileOptions锁定 JavaVersion 21Android SDKcompileSdk 36build-tools 36.0.0其中的aidl用于生成 NDK 版 AIDL 桩代码Android NDK 28.2.13676358C/C 交叉编译与 Rust target 的基础Rust 工具链rustup安装的稳定版即可cargo-ndkRust 的 Android 交叉编译插件执行cargo install cargo-ndk安装建议 4.x自动处理 bindgen 参数CMake ≥ 3.22 与 Ninja根目录 CMakeLists.txt 声明了最低版本 小提示如果aidl来自 35 以下的 build-toolsCMake 配置阶段会直接报错退出——它要求生成的fromBinder含有 local-binder 回退分支CMakeLists.txt#L107-L114所以 build-tools 请装到 36.0.0。第二步克隆仓库并初始化 Git 子模块git clone --recurse-submodules https://gitcode.com/gh_mirrors/te/TEESimulator TEESimulator cd TEESimulator--recurse-submodules会一并拉取third_party/下的 5 个子模块清单见 .gitmodules子模块作用third_party/keymintAOSP 参考实现 KeyMint TARust TA 的内核third_party/interfacesKeyMint/SecureClock AIDL 定义third_party/frameworks-nativeNDK 版 libbinder 头文件third_party/boringssl密码库shallow 克隆third_party/lspltPLT/GOT 函数钩子库拦截器与注入器都依赖它如果当时忘了加参数补一句git submodule update --init --recursive即可。每个子模块都锁定在上游特定提交上保证构建可复现见 third_party/README.md。第三步设置环境变量并安装 cargo ndkexport ANDROID_HOME/path/to/android/sdk # SDKaidl、cmake、AGP 构建 export ANDROID_NDK_HOME/path/to/android/ndk # 或 $ANDROID_HOME/ndk 下最新版本 rustup target add aarch64-linux-android x86_64-linux-android cargo install cargo-ndkbuild.sh会把NDK_HOME同时映射为ANDROID_NDK_HOME、ANDROID_NDK_ROOT、ANDROID_NDK三个变量防止 cargo-ndk 悄悄回退到其他预装 NDKrust/build.sh#L30-L33所以只要指对一处就不会乱。第四步一条命令完成 TEESimulator 源码编译./gradlew zipRelease # 成功输出out/TEESimulator-v4.0-commitCount-hash-Release.zip调试排查时可用./gradlew zipDebug——它打包的是带额外日志的 signed APKservice.apk而 Release 走 R8 后只保留单个classes.dexapp/build.gradle.kts#L232-L258。幕后发生了什么Rust TA 编译CMake 的rust_ta目标对每个 ABI 调用 rust/build.sh脚本先幂等地把 rust/patches/ 下的 5 个补丁打到third_party/keymint工作区再执行cargo ndk -t arm64-v8a --platform 29 build --release -p teesim-km产出rust/target/triple/release/libteesim_km.a。AIDL 代码生成CMake 用 NDK 后端的aidl --langndk对third_party/interfaces生成 Binder 桩代码并自动挑选最新的 build-toolsCMakeLists.txt#L58-L116。原生目标编译按 app/build.gradle.kts 的targets列表编译inject、teesim-uds、teesim_logcat以及两个拦截器仅 arm64-v8a 与 x86_64 两个 64 位 ABI。模块组装prepareModuleFiles把 dex、剥离符号的.so、注入器和 module/ 目录启动脚本、sepolicy.rule、默认配置、WebUI同步到暂存目录并用 git 提交数/哈希填充module.prop版本号最后zipRelease打包到out/app/build.gradle.kts#L292-L301。第五步验证产物与安装到真机可选ls out/ # 应看到 TEESimulator-v4.0-count-hash-Release.zip连接真机后可跳过手动刷包直接让 Gradle 推包并安装./gradlew installMagiskAndReboot # Magisk 设备 ./gradlew installKsuAndReboot # KernelSU 设备 ./gradlew installApatchAndReboot # APatch 设备多台设备在线时用ANDROID_SERIAL序列号指定目标机器即可app/build.gradle.kts#L142-L144。常见构建问题排查清单 ️现象原因与解决aidl not found或 generated fromBinder lacks the local-binder fallback缺少 build-tools 36.0.0或 PATH 里混入了旧版aidl可手动-DAIDL_BIN/path/to/aidl指定NDK not found; set NDK_HOME未设置ANDROID_NDK_HOME且$ANDROID_HOME/ndk下无 NDK安装 NDK 28.2.13676358cargo ndk报 bindgen 找不到 clang 头设置LIBCLANG_PATH指向系统 libclang 目录rust/build.sh#L57-L61 已尝试常见路径但发行版差异大时仍需手动构建后git status显示third_party/keymint被修改这是补丁应用后的正常现象不属于你的改动需要干净状态时执行git -C third_party/keymint checkout .复位third_party/README.md Build-time patches 一节有详解想给 IDE 补全 C 代码提示运行 scripts/gen-compile-commands.sh只做 CMake 配置生成compile_commands.json供 clangd 使用总结TEESimulator 的源码构建可以归纳为一句话克隆子模块 → 配好 SDK/NDK 与 cargo ndk →./gradlew zipRelease。整个流程零真机依赖产物是out/目录下可直接用 Root 管理器刷入的模块 zip。理解 CMakeLists.txt 中各 target 的职责与 rust/build.sh 的补丁逻辑后你就具备了修改拦截器或 TA 并快速验证的全部基础 【免费下载链接】TEESimulatorSoftware simulation for Android hardware-backed key pairs with key attestation项目地址: https://gitcode.com/gh_mirrors/te/TEESimulator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表