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),仅供参考

相关新闻

插件加载失败排查指南:从机制到解决did not activate

插件加载失败排查指南:从机制到解决did not activate

如果你经常和各类软件、框架、IDE 打交道,一定对plugins这个词不陌生。插件(Plugin)几乎无处不在,从代码编辑器到浏览器,从游戏模组到音乐播放器,凡是需要“扩展能力”的地方,都能看到它的身影。…

2026/10/4 5:00:36 阅读更多 →
YOLO11花卉图像分割实战:光照鲁棒性与端到端部署

YOLO11花卉图像分割实战:光照鲁棒性与端到端部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 4:59:36 阅读更多 →
跨设备协同实战:从剪贴板同步到大文件传输的架构设计与踩坑记录

跨设备协同实战:从剪贴板同步到大文件传输的架构设计与踩坑记录

先交代一下背景。我自己手边长期同时用一台 Windows 台式机、一台 MacBook 和两部手机,日常高频动作就那么几个:把电脑上的文档发到手机上继续看;手机收到验证码,懒得一个个字符抄到电脑;在电脑上复制了一段网址&#…

2026/10/4 4:59:36 阅读更多 →

最新新闻

JavaWeb火车订票系统源码改造指南:从跑通到毕设答辩

JavaWeb火车订票系统源码改造指南:从跑通到毕设答辩

简介:这份资源是面向计算机专业学生与JavaWeb初学者的一套火车订票系统完整项目,可直接用于毕业设计、课程设计或自学练手。项目基于JavaWeb技术栈实现,涵盖车次查询、在线订票、订单管理、后台维护等核心业务模块,适合需要一份可…

2026/10/4 15:18:57 阅读更多 →
TypeScript基础类型全解析:从原始类型到类型收窄的实战指南

TypeScript基础类型全解析:从原始类型到类型收窄的实战指南

1. 为什么“基础类型”值得单独开一章,而不是一带而过很多教程把“基础类型”放在第一章,不是因为教学内容必须从简到繁凑个顺序,而是因为类型系统是整个语言运行逻辑的“地基”。以 TypeScript 为例,类型既是编译时的约束&#x…

2026/10/4 15:18:57 阅读更多 →
Elasticsearch快速入门:从索引分片到查询聚合与Java异步写入实战

Elasticsearch快速入门:从索引分片到查询聚合与Java异步写入实战

搜ES资料的时候一个很有意思的现象:翻十篇文章,可能有六篇在讲搜索引擎,三篇在讲前端规范,还有人在问安卓文件管理器怎么连不上电脑共享,甚至有人找什么OpenGL ES。我做了这么多年后端,每次群里有人甩一句“…

2026/10/4 15:18:57 阅读更多 →
Microsoft Agent Framework 1.0 接棒后,.NET AI 的 Agent-Native 工程化落地:把 Base URL 改到 TaoToken 的配置与验证

Microsoft Agent Framework 1.0 接棒后,.NET AI 的 Agent-Native 工程化落地:把 Base URL 改到 TaoToken 的配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 15:18:56 阅读更多 →
Leave it to Manus —— Manus AI Agent 技术介绍与 TaoToken 统一 Key 接入实践

Leave it to Manus —— Manus AI Agent 技术介绍与 TaoToken 统一 Key 接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 15:18:56 阅读更多 →
从 npm run build 到生产上线:VuePack 生产构建优化与部署清单

从 npm run build 到生产上线:VuePack 生产构建优化与部署清单

从 npm run build 到生产上线:VuePack 生产构建优化与部署清单 【免费下载链接】vuepack :package: A modern starter which uses Vue 2, Vuex, Vue-router and Webpack 2 (and even Electron) 项目地址: https://gitcode.com/gh_mirrors/vu/vuepack VuePack…

2026/10/4 15:17:56 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →