GCC (GNU Compiler Collection) 是一套开源的编译器系统,用于将 C、C++、Objective-C 等源代码编译成可执行文件或库,在安卓上使用 GCC,主要有以下几种情况:

- 在安卓终端上直接编译:适用于简单的、小型的项目,或者学习目的。
- 使用 Termux:这是最推荐、最强大的方式,因为它提供了一个接近完整 Linux 的环境,包含包管理器,可以轻松安装 GCC 和各种开发工具。
- 在电脑上交叉编译:这是安卓应用开发中最常见的方式,即在 Windows, macOS 或 Linux 电脑上,编译出能在安卓 ARM 设备上运行的代码。
- 在安卓 Studio 中使用:对于 NDK 开发,你不需要直接调用 GCC 命令,Android Studio 会自动为你配置和调用。
下面我们逐一详细介绍。
使用 Termux (推荐用于安卓本地编译)
Termux 是一个强大的安卓终端模拟器和 Linux 环境应用,它提供了一个接近原生 Linux 的体验,是你在安卓上进行命令行开发的首选工具。
安装 Termux
- 从 F-Droid 应用商店下载并安装 Termux。(强烈建议从 F-Droid 安装,而不是 Google Play,因为后者版本可能过旧且缺少一些核心包)。
更新和安装 GCC
打开 Termux,执行以下命令:
# 更新包列表和已安装的包 pkg update && pkg upgrade # 安装 GCC 和 G++ (C++ 编译器) pkg install clang
注意:在 Termux 中,clang (LLVM 编译器) 是默认安装的 C/C++ 编译器,它完全兼容 GCC 的命令行选项和大部分语法,你可以直接使用 clang 来编译 .c 和 .cpp 文件,如果你真的需要 gcc 这个名字,可以安装 gcc-clang 包,但直接用 clang 更简单。

编译一个简单的 C 程序
假设你有一个名为 hello.c 的文件,内容如下:
#include <stdio.h>
int main() {
printf("Hello, Android from GCC!\n");
return 0;
}
在 Termux 中操作:
# 创建并进入一个工作目录 mkdir my_project cd my_project # 使用 vim, nano 或其他编辑器创建 hello.c 文件 # nano hello.c # (粘贴上面的代码,Ctrl+O, Enter, Ctrl+X 保存退出) # 使用 clang (或 gcc) 编译 clang hello.c -o hello # 运行编译好的程序 ./hello
输出结果:
Hello, Android from GCC!
Termux 的优点
- 完整的 Linux 环境:可以安装
git,make,cmake,python,nodejs等各种开发工具。 - 简单直接:非常适合在手机或平板上进行快速的代码编译和测试。
- 无需 Root:在普通安卓设备上即可运行。
在电脑上进行交叉编译 (标准安卓 NDK 开发)
这是开发原生安卓库(.so 文件)或命令行工具的标准方法,你将在你的电脑(Windows, macOS, Linux)上编译代码,生成适用于安卓 ARM 或 x86 架构的可执行文件。

安装 Android NDK (Native Development Kit)
NDK 是一个工具集,包含了交叉编译器(如 arm-linux-androideabi-gcc)、链接器、库文件等。
-
通过 Android Studio 安装 (推荐):
- 打开 Android Studio。
- 进入
Tools->SDK Manager。 - 切换到
SDK Tools标签页。 - 勾选
NDK (Side by side)和CMake。 - 点击
Apply安装。
-
安装后,NDK 的路径通常在:
- Windows:
C:\Users\<YourUser>\AppData\Local\Android\Sdk\ndk\<version> - macOS/Linux:
~/Library/Android/sdk/ndk/<version>或~/Android/Sdk/ndk/<version>
- Windows:
配置环境变量
为了让命令行能找到 NDK 的工具,你需要将其路径添加到系统的 PATH 环境变量中。
-
Linux/macOS: 打开
~/.bashrc或~/.zshrc文件,添加以下行:export ANDROID_NDK_HOME=/path/to/your/ndk/<version> export PATH=$PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/<your-host-os>/bin
<your-host-os>通常是linux-x86_64,darwin-x86_64(macOS Intel), 或darwin-arm64(macOS Apple Silicon)。- 执行
source ~/.bashrc(或对应的配置文件) 使其生效。
-
Windows:
- 打开 "系统属性" -> "高级" -> "环境变量"。
- 在 "系统变量" 中,新建一个变量
ANDROID_NDK_HOME,值为你的 NDK 路径。 - 编辑
Path变量,添加一条新记录:%ANDROID_NDK_HOME%\toolchains\llvm\prebuilt\windows-x86_64\bin。
编译一个安卓原生库
假设我们有一个 native-lib.c 文件,它会被 JNI 调用。
// native-lib.c
#include <jni.h>
#include <string.h>
// JNI 方法实现
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
// 返回一个字符串给 Java/Kotlin 代码
return (*env)->NewStringUTF(env, "Hello from C/C++ NDK!");
}
我们需要一个 CMakeLists.txt 文件来告诉编译器如何编译:
# CMakeLists.txt
cmake_minimum_required(VERSION 3.18.1)
# 定义项目名称
project("native-lib")
# 查找并添加日志库
find_library(log-lib log)
# 创建一个共享库 ( .so 文件 )
add_library(
native-lib
SHARED
native-lib.c)
# 链接日志库到我们的库
target_link_libraries(
native-lib
${log-lib})
编译步骤:
-
创建一个构建目录:
mkdir build cd build
-
运行 CMake,并指定目标安卓 ABI (Application Binary Interface) 和 API 级别:
# 针对 64 位 ARM 架构,API 级别 21 cmake .. -DCMAKE_SYSTEM_NAME=Android \ -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \ -DCMAKE_ANDROID_NDK=$ANDROID_NDK_HOME \ -DCMAKE_ANDROID_STL_TYPE=c++_shared \ -DCMAKE_BUILD_TYPE=Releasearm64-v8a: 64 位 ARM。armeabi-v7a: 32 位 ARM。x86_64: 64 位 x86。x86: 32 位 x86。
-
使用
make(或ninja) 进行编译:make
编译成功后,你会在 build/libs/arm64-v8a/ 目录下找到 libnative-lib.so 文件,这个文件就可以被你的安卓 App 加载和使用了。
在安卓 Studio 中使用 GCC (NDK)
对于大多数安卓开发者来说,这是最简单、最高效的方式,你不需要手动编写 CMakeLists.txt 或在命令行中调用 GCC。
- 创建一个支持 C++ 的项目:在 Android Studio 中创建新项目时,选择 "Native C++" 模板。
- 配置 CMake:Android Studio 会自动为你生成
CMakeLists.txt文件,并配置好所有路径。 - 编写 C/C++ 代码:在
cpp目录下编辑你的.cpp文件。 - 构建项目:点击 Android Studio 的 "Build" -> "Make Project" (或
Ctrl+F9),Android Studio 会自动调用 CMake 和 NDK 工具链来完成编译,并将生成的.so文件复制到 App 的正确位置。
你可以在 Build -> Edit Custom Build Types... 中查看和配置 CMake 的详细参数,但通常无需手动干预。
总结与对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Termux | 安卓本地编译、学习、小型项目、快速原型 | 无需电脑,环境完整,方便直接 | 性能受限于手机,不适合大型复杂项目 |
| 电脑交叉编译 | 开发安卓原生库、大型项目、CI/CD 流程 | 性能强大,工具链成熟,是行业标准 | 需要电脑,环境配置稍复杂 |
| Android Studio | 标准 App 内嵌 NDK 功能 | 图形化界面,自动化程度最高,最省心 | 主要用于 App 开发,不适用于纯命令行工具开发 |
- 想在手机上写点小程序玩?用 Termux。
- 想为你的安卓 App 写一个高性能的模块?用 电脑交叉编译 或 Android Studio。
- 是安卓应用开发者?直接用 Android Studio,忘掉命令行吧!
