# NDK **Repository Path**: zhangkede/ndk ## Basic Information - **Project Name**: NDK - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-16 - **Last Updated**: 2026-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NDK 入门到精通 —— 实战 + 面试知识手册 > 一个项目,覆盖 NDK 五层知识体系的所有核心实战与面试高频考点。 > **目标**:读完能做任意 NDK 项目;背完能扛住 NDK 面试。 ## 项目简介 一个可运行的 Android NDK 工程,覆盖五层知识体系的核心实战点与面试高频考点。 - **五层全覆盖**:L0 基石(CMake / ABI / 工具链)→ L1 桥接(JNI 动态注册 / 引用管理)→ L2 系统(pthread / 内存池 / 信号捕获)→ L3 图像与音视频(NEON SIMD / FFmpeg)→ L4 工程与进阶(体积优化 / 崩溃闭环 / MMKV / Vulkan / MediaCodec / Lua) - **38 个 native 方法**,全部 `RegisterNatives` 动态注册,SO 仅导出 `JNI_OnLoad` / `JNI_OnUnload` - **11 个 native 模块**,零依赖模块开箱即用,重依赖模块(OpenCV / NCNN / Dobby / WebRTC)条件编译,未启用时返回 `not linked` 而非崩溃 - **自实现核心组件**:mmap KV 存储(MMKV 原理)、递归下降 Lua 解释器(NanoLua)、Sobel 标量 / NEON 双实现、内存池 - **双 ABI 验证**:arm64-v8a + x86_64,NDK clang 交叉编译零警告;配套 host 端逻辑自测(25/25 通过) - **面试导向**:26 道分层面试题 + 8 周学习路线 + 能力检验标准 ### 技术栈 | 项 | 内容 | |---|---| | 语言 | Kotlin + C++17 | | 构建 | CMake 3.22.1 + Gradle | | NDK | 28.2.13676358 | | minSdk / target | 24 / 37 | | ABI | `arm64-v8a`、`x86_64` | | 可选依赖 | FFmpeg(需先执行 `scripts/build_ffmpeg.sh`) | ### 快速开始 ```bash # 1. 可选:编译 FFmpeg(不编译则音视频模块返回不可用占位) bash scripts/build_ffmpeg.sh # 2. Android 构建(需 JDK 25+) ./gradlew assembleDebug # 3. 离线验证 native 代码(无需 Gradle) bash scripts/build_verify.sh all # NDK clang 双 ABI 编链接 + NEON 检查 bash scripts/host_test.sh # host 端逻辑自测 ``` > **环境说明**:本机验证环境为 JDK 17,而 AGP 9.3 需 JDK 25,完整 `assembleDebug` 未能执行;native 层已通过 NDK clang 双 ABI 编译链接验证,逻辑正确性由 `tests/host_selftest.cpp` 覆盖。 ## 文档导航 | 章节 | 内容 | 链接 | |---|---|---| | 00 | 项目概览 | [docs/00-overview.md](docs/00-overview.md) | | 01 | 五层知识体系 | [docs/01-knowledge-system.md](docs/01-knowledge-system.md) | | 02 | 项目文件结构 | [docs/02-project-structure.md](docs/02-project-structure.md) | | 03 | 各模块详解(含关键代码) | [docs/03-modules.md](docs/03-modules.md) | | 04 | 编译与运行 | [docs/04-build-and-run.md](docs/04-build-and-run.md) | | 05 | FFmpeg 交叉编译 | [docs/05-ffmpeg-build.md](docs/05-ffmpeg-build.md) | | 06 | 8 周学习路线 | [docs/06-8week-roadmap.md](docs/06-8week-roadmap.md) | | 07 | 26 道分层面试题 | [docs/07-interview-questions.md](docs/07-interview-questions.md) | | 08 | 能力检验标准 | [docs/08-capability-checklist.md](docs/08-capability-checklist.md) | | 09 | 当前覆盖图谱 | [docs/09-coverage-map.md](docs/09-coverage-map.md) | | 10 | 环境与限制 | [docs/10-environment.md](docs/10-environment.md) | | 11 | 进阶方向 | [docs/11-advanced-topics.md](docs/11-advanced-topics.md) | | 12 | 参考资料 | [docs/12-references.md](docs/12-references.md) | | 13 | L4 进阶模块详解(8 方向落地) | [docs/13-advanced-modules.md](docs/13-advanced-modules.md) | ## 项目速览 | 项 | 内容 | |---|---| | 应用包名 | `com.pragmatic.ndk` | | minSdk / targetSdk / compileSdk | 24 / 37 / 37 | | ABI 过滤 | `arm64-v8a`, `x86_64`(精简瘦身) | | C++ 标准 | C++17 | | 构建系统 | CMake 3.22.1 | | 第三方库 | FFmpeg(可选,需先跑 `scripts/build_ffmpeg.sh`) | ``` L4 工程 ✅ 体积优化(abiFilters + visibility hidden) L4 工程 ✅ 崩溃闭环(捕获 -> 落盘 -> Java 上报) L4 进阶 ✅ MMKV mmap 存储(cpp/mmkv/) L4 进阶 ✅ Vulkan 最小管线(cpp/vulkan/) L4 进阶 ✅ NDK MediaCodec 硬解码(cpp/media/) L4 进阶 ✅ NanoLua 自实现解释器(cpp/lua/) L4 进阶 ✅ OpenCV / NCNN / Dobby / WebRTC 条件编译骨架 L3 图像 ✅ Bitmap 像素处理 + NEON SIMD L3 音视频 ✅ FFmpeg 解封装 + 解码 + 色彩空间转换 L2 系统 ✅ pthread + 内存池 + 信号捕获 L2 系统 ✅ native 线程 + JNI 回调 + Attach/Detach L1 桥接 ✅ 动态注册 + 全局引用缓存 L0 基石 ✅ CMake 模块化 + IMPORTED 预编译库 + ABI 过滤 ``` **38 个 native 方法全部动态注册,双 ABI(arm64-v8a / x86_64)编译链接验证通过, 仅导出 `JNI_OnLoad/JNI_OnUnload`。详见 [docs/13-advanced-modules.md](docs/13-advanced-modules.md)。** **完整说明见 [docs/00-overview.md](docs/00-overview.md)。** --- ## 一句话总览 资料不在多,把 [docs/12-references.md](docs/12-references.md) 里那 5 篇官方文档 + 1 个 ndk-samples 仓库 + 这些文档啃透,就足以应对绝大多数 NDK 面试与项目实战。