第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 验证。如果显示版本号,说明手动安装成功了。

⚠ 常见坑: 有些 IDE(如 Android Studio)会自动检测 $ANDROID_NDK_HOME,但如果你改动了路径,一定要重启 IDE,否则它还是用的缓存路径。

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
💡 我的小技巧: 如果你用 Android Studio 管理项目,建议在 local.properties 里显式指定 NDK 路径,避免 IDE 自己猜测版本出错:
ndk.dir=/home/you/Android/Sdk/ndk/25.0.6571900

4.4 两种方案对比:选哪个?

其实没有绝对的好坏。我个人经验是:

  • 个人开发、快速尝鲜 → 用命令行安装,省心。
  • 公司 CI/CD、需要锁定版本 → 手动下载压缩包放到内部仓库,然后写脚本解压部署,可控性强。

我曾在 CI 服务器上碰到过 sdkmanager 下载超时的情况,最后换成了手动下载并传送到内网,反而更稳定。

NDK 安装流程决策 选择安装方式 手动安装 命令行安装 下载压缩包 解压到指定目录 配置 PATH 环境变量 sdkmanager --list 安装指定 NDK 版本 自动加入 SDK 目录 验证:ndk-build --version 手动安装适合离线锁定版本,命令行安装适合日常快速部署

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 环境。不过呢,先把安装这步走稳,后面的坑会少很多。