菜鸟科技网

安卓gcc命令

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

安卓gcc命令-图1
(图片来源网络,侵删)
  1. 在安卓终端上直接编译:适用于简单的、小型的项目,或者学习目的。
  2. 使用 Termux:这是最推荐、最强大的方式,因为它提供了一个接近完整 Linux 的环境,包含包管理器,可以轻松安装 GCC 和各种开发工具。
  3. 在电脑上交叉编译:这是安卓应用开发中最常见的方式,即在 Windows, macOS 或 Linux 电脑上,编译出能在安卓 ARM 设备上运行的代码。
  4. 在安卓 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 更简单。

安卓gcc命令-图2
(图片来源网络,侵删)

编译一个简单的 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 架构的可执行文件。

安卓gcc命令-图3
(图片来源网络,侵删)

安装 Android NDK (Native Development Kit)

NDK 是一个工具集,包含了交叉编译器(如 arm-linux-androideabi-gcc)、链接器、库文件等。

  • 通过 Android Studio 安装 (推荐):

    1. 打开 Android Studio。
    2. 进入 Tools -> SDK Manager
    3. 切换到 SDK Tools 标签页。
    4. 勾选 NDK (Side by side)CMake
    5. 点击 Apply 安装。
  • 安装后,NDK 的路径通常在:

    • Windows: C:\Users\<YourUser>\AppData\Local\Android\Sdk\ndk\<version>
    • macOS/Linux: ~/Library/Android/sdk/ndk/<version>~/Android/Sdk/ndk/<version>

配置环境变量

为了让命令行能找到 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:

    1. 打开 "系统属性" -> "高级" -> "环境变量"。
    2. 在 "系统变量" 中,新建一个变量 ANDROID_NDK_HOME,值为你的 NDK 路径。
    3. 编辑 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})

编译步骤

  1. 创建一个构建目录:

    mkdir build
    cd build
  2. 运行 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=Release
    • arm64-v8a: 64 位 ARM。
    • armeabi-v7a: 32 位 ARM。
    • x86_64: 64 位 x86。
    • x86: 32 位 x86。
  3. 使用 make (或 ninja) 进行编译:

    make

编译成功后,你会在 build/libs/arm64-v8a/ 目录下找到 libnative-lib.so 文件,这个文件就可以被你的安卓 App 加载和使用了。


在安卓 Studio 中使用 GCC (NDK)

对于大多数安卓开发者来说,这是最简单、最高效的方式,你不需要手动编写 CMakeLists.txt 或在命令行中调用 GCC。

  1. 创建一个支持 C++ 的项目:在 Android Studio 中创建新项目时,选择 "Native C++" 模板。
  2. 配置 CMake:Android Studio 会自动为你生成 CMakeLists.txt 文件,并配置好所有路径。
  3. 编写 C/C++ 代码:在 cpp 目录下编辑你的 .cpp 文件。
  4. 构建项目:点击 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,忘掉命令行吧!
分享:
扫描分享到社交APP
上一篇
下一篇