第4章 下载与安装 NDK:手动安装、命令行安装
NDK 的安装方式其实就两种主流路线:手动下载解压,或者用命令行工具自动拉取。我个人两种都用过,早期做项目时被手动方式坑过几次,后来发现命令行其实更稳。你想想看,如果团队里每个人装出来的 NDK 版本不一样,那编译报错可就热闹了。
4.1 为什么先聊安装方式
NDK 不是 Android SDK 的默认组件,你得单独装。我见过不少新手把 SDK 和 NDK 搞混——SDK 管 Java 代码编译,NDK 管 C/C++ 本地代码。没有 NDK,你的 .so 文件就编不出来。嗯,这里要先明确一点:NDK 的版本必须和你用的 Android API Level、工具链、CMake 版本匹配。否则编译时一堆 undefined reference,排查起来很费劲。
| 安装方式 | 适用场景 | 我的建议 |
|---|---|---|
| 手动安装 | 离线环境、需要固定特定版本 | 适合 CI/CD 或网络受限的团队 |
| 命令行安装 | 日常开发、多版本管理 | 适合个人笔记或快速入门 |
4.2 手动安装:一步一步来
手动安装说白了就是去官网下载压缩包,然后解压到你想要的目录。我在项目里遇到最头疼的一次是:下载了旧版 NDK,结果里面没有 ndk-build 脚本,折腾了半天才发现是版本发错了。
步骤1:获取 NDK 压缩包
打开 Android 开发者官网的 NDK 下载页面。注意选对操作系统(Windows / macOS / Linux)。我习惯下载 android-ndk-r25c-linux.zip 这种格式,因为文件名里就带了版本号,不会弄混。
# 用 wget 下载(Linux / macOS)
wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
步骤2:解压到目标目录
解压路径不要带空格,也不要用中文目录。我曾吃过这个亏——路径里有中文,编译时提示找不到 sysroot,排查了半小时才发现是编码问题。
# 解压到 ~/android/ndk 目录
unzip android-ndk-r25c-linux.zip -d ~/android/ndk
# 解压后会得到 ~/android/ndk/android-ndk-r25c/
步骤3:配置环境变量
手动安装后必须把 NDK 的路径加到 PATH 里,否则编译工具找不到 ndk-build 或 cmake 工具链。我建议直接写进 shell 配置文件(.bashrc、.zshrc 等)。
# 在 ~/.bashrc 或 ~/.zshrc 里添加
export ANDROID_NDK_HOME=$HOME/android/ndk/android-ndk-r25c
export PATH=$PATH:$ANDROID_NDK_HOME
然后 source ~/.bashrc 使之生效。你可以在终端里输入 ndk-build --version 验证。如果显示版本号,说明手动安装成功了。
4.3 命令行安装:更干净的方案
命令行安装主要通过 sdkmanager 工具完成。sdkmanager 是 Android SDK 自带的命令行工具,在 $ANDROID_SDK_ROOT/tools/bin/ 目录下。我个人觉得这方式更优雅——版本统一、记录可追溯,而且团队里每个人都用同样的命令,不会出现“我装的是r24你装的是r26”这种版本不一致的问题。
步骤1:确认已安装 Android SDK 命令行工具
如果你装过 Android Studio,那么 SDK 和 sdkmanager 应该已经在机器上了。如果没装,先下载 command-line tools 包。
# 查看当前已安装的 NDK
sdkmanager --list | grep ndk
步骤2:安装指定版本的 NDK
sdkmanager 使用规范名称来标识 NDK 版本。比如我们要装 r25c,对应名称是 ndk;25.0.6571900。你可以在 --list 输出里找到所有可用的版本号。
# 安装最新稳定版(推荐)
sdkmanager "ndk;25.0.6571900"
# 或者安装多个版本
sdkmanager "ndk;23.1.7779620" "ndk;25.0.6571900"
安装过程会自动下载并解压到 SDK 的 ndk/ 目录下,你不需要手动处理路径问题。
步骤3:验证安装
# 检查 ndk-build 是否在路径中
which ndk-build
# 输出应该是类似 /home/you/Android/Sdk/ndk/25.0.6571900/ndk-build
local.properties 里显式指定 NDK 路径,避免 IDE 自己猜测版本出错:
ndk.dir=/home/you/Android/Sdk/ndk/25.0.6571900
4.4 两种方案对比:选哪个?
其实没有绝对的好坏。我个人经验是:
- 个人开发、快速尝鲜 → 用命令行安装,省心。
- 公司 CI/CD、需要锁定版本 → 手动下载压缩包放到内部仓库,然后写脚本解压部署,可控性强。
我曾在 CI 服务器上碰到过 sdkmanager 下载超时的情况,最后换成了手动下载并传送到内网,反而更稳定。
4.5 验证安装是否成功
不管你用哪种方式,最后一步都是验证。我建议跑一个简单的 NDK 项目来测试,而不是只看版本号——因为版本号可能来自系统路径,实际用的是另一个路径。具体的测试方法:
# 创建一个测试目录
mkdir ndk_test && cd ndk_test
# 在 jni 目录下放一个 Android.mk 和 hello.c
# 然后执行
ndk-build
# 观察是否生成 libs/ 目录下的 .so 文件
如果 ndk-build 命令找不到,或者提示“NDK not found”,那就回头检查环境变量。我曾经因为忘记 source 配置文件,折腾了十分钟——其实 error 很贴心了,就是自己粗心。
- 手动安装:官网下载 → 解压 → 配置 PATH → 验证
- 命令行安装:sdkmanager → 指定版本 → 自动部署 → 验证
- 推荐在
local.properties中显式指定 ndk.dir,防止 IDE 干扰 - 版本号一定要和项目要求的相匹配,否则链接时会出现符号找不到。
讲到这里,你应该已经能在自己的机器上安装好 NDK 了。下一步就是在项目里真正用起来——交叉编译链的配置、ABI 选择、CMake 集成,这些都需要基于正确的 NDK 环境。不过呢,先把安装这步走稳,后面的坑会少很多。