📘Android 14 上搭建 NDK 开发环境需要通过 Android Studio 和 NDK r27+ 进行配置
📘 Android 14 上搭建 NDK 开发环境需要通过 Android Studio 和 NDK r27+ 进行配置
## 1. 安装依赖
```bash
sudo apt update
sudo apt install openjdk-17-jdk cmake ninja-build unzip git -y
JDK 虽然主要用于 Android 构建系统,但有些工具依赖。
2. 下载并配置 NDK
去 Google NDK 下载页面 下载 NDK r27b (Linux 版本)。
Linux 64-bit (x86) android-ndk-r27d-linux.zip
wget https://dl.google.com/android/repository/android-ndk-r27d-linux.zip
unzip android-ndk-r27d-linux.zip -d $HOME/
配置环境变量(写入 ~/.bashrc
):
export ANDROID_NDK_HOME=$HOME/android-ndk-r27d
export PATH=$PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
应用:
source ~/.bashrc
3. 确认交叉编译工具链
NDK r26+ 使用 Clang/LLVM toolchain,支持 Android 14 (API 34)。
检查工具链:
$ clang --version
Android (6443078, based on r416183b1) clang version 14.0.6 ...
常用交叉编译器前缀(API 34,arm64-v8a 为例):
-
aarch64-linux-android34-clang
-
armv7a-linux-androideabi34-clang
-
i686-linux-android34-clang
-
x86_64-linux-android34-clang
问题
luyang@xretinai:~$ tail ~/.bashrc
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
export ANDROID_NDK_HOME=$HOME/android-ndk-r27d
export PATH=$PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
luyang@xretinai:~$ source ~/.bashrc
luyang@xretinai:~$ clang --version
Command 'clang' not found, but can be installed with:
sudo apt install clang
从 NDK r19 开始,Google 移除了 clang 这种“裸命令”,改成了 带三元组的 clang 驱动。
所以你在 $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/
目录下,能看到的是:
luyang@xretinai:~$ ls android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android* -lah
-rwxr-xr-x 1 luyang luyang 201 Jul 9 03:52 android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang
-rwxr-xr-x 1 luyang luyang 205 Jul 9 03:52 android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++
-rwxr-xr-x 1 luyang luyang 201 Jul 9 03:52 android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android22-clang
-rwxr-xr-x 1 luyang luyang 205 Jul 9 03:52 android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android22-clang++
...
-rwxr-xr-x 1 luyang luyang 201 Jul 9 03:52 android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang
-rwxr-xr-x 1 luyang luyang 205 Jul 9 03:52 android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang++
-rwxr-xr-x 1 luyang luyang 201 Jul 9 03:52 android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang
-rwxr-xr-x 1 luyang luyang 205 Jul 9 03:52 android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang++
测试:
luyang@xretinai:~$ aarch64-linux-android35-clang++ --version
Android (13691557, +pgo, +bolt, +lto, +mlgo, based on r522817d) clang version 18.0.4 (https://android.googlesource.com/toolchain/llvm-project d8003a456d14a3deb8054cdaa529ffbf02d9b262)
Target: aarch64-unknown-linux-android35
Thread model: posix
InstalledDir: /home/luyang/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin
4. 创建 CMake 工程
工程目录
ndk-demo/
├── CMakeLists.txt
├── src/
│ └── main.cpp
main.cpp
#include <iostream>
int main() {
std::cout << "Hello from Android NDK r26 on Ubuntu 24.04!" << std::endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(ndk_demo)
set(CMAKE_CXX_STANDARD 17)
add_executable(ndk_demo src/main.cpp)
5. 交叉编译配置
NDK 提供 CMake toolchain 文件:
${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake
构建命令(以 arm64-v8a / API 35 为例):
mkdir build && cd build
cmake .. \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-35 \
-DCMAKE_BUILD_TYPE=Release
cmake --build .
生成结果:
build/
└── ndk_demo (Android ARM64 可执行文件)
6. 验证可执行文件
检查目标架构:
file build/ndk_demo
输出应类似:
build/ndk_demo: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, BuildID[sha1]=c8d078ba8f6c9835abf3463e9032debf03ecc7d5, with debug_info, not stripped
拷贝到设备:
adb push build/ndk_demo /data/
adb shell "chmod +x /data/ndk_demo && /data/ndk_demo"
运行输出:
Hello from Android NDK r26 on Ubuntu 24.04!