You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅使用CMake和MinGW构建C++语言Android应用的可行方法咨询

纯CMake+Eclipse构建Android C++游戏引擎应用教程

前置准备

  • Android NDK(r15及以上版本,原生支持CMake构建链)
  • Android SDK Build Tools、对应适配版本的Android Platform SDK
  • Eclipse 4.6+ 版本,提前安装CDT插件、CMake Editor插件
  • 自研C++游戏引擎完整源码

核心构建流程(完全不依赖Gradle/Ant/Android Studio)

第一步:编写根目录CMakeLists.txt

优先使用NDK官方提供的Android工具链文件,不要调用系统默认CMake工具链,基础配置示例如下:

cmake_minimum_required(VERSION 3.22.1)

# 引入NDK自带的Android工具链
set(CMAKE_TOOLCHAIN_FILE "$ENV{NDK_PATH}/build/cmake/android.toolchain.cmake" CACHE PATH "Android NDK toolchain path")

# 配置Android构建参数
set(ANDROID_ABI arm64-v8a CACHE STRING "Target ABI")
set(ANDROID_PLATFORM android-27 CACHE STRING "Minimum supported Android version")
set(ANDROID_STL c++_shared CACHE STRING "STL runtime to use")

project(MyGameEngineAndroid LANGUAGES C CXX)

# 编译游戏引擎为动态库
add_library(game_engine SHARED
    # 此处替换为自研引擎所有C/C++源文件路径
    src/core/engine.cpp
    src/render/gles_renderer.cpp
    src/platform/android/android_wrapper.cpp
)

# 链接Android平台依赖系统库
target_link_libraries(game_engine
    GLESv3
    EGL
    android
    log
)

第二步:准备Android应用基础结构

手动创建标准Android项目目录即可,不需要生成Gradle/Ant配置文件:

  • 项目根目录下新建android_root文件夹,内部结构如下:
    • AndroidManifest.xml:配置应用包名、权限、Activity、版本信息
    • res/:存放应用图标、字符串、布局等资源文件
    • libs/:按ABI分子目录存放编译产出的动态库
    • assets/:存放游戏资源包、配置文件等不需要编译的资源
      Native Activity类型应用的Manifest参考示例:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yourcompany.gametest"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="27" android:targetSdkVersion="33" />
    <uses-feature android:glEsVersion="0x00030000" android:required="true" />
    <application android:label="MyGame" android:icon="@mipmap/ic_launcher">
        <activity android:name="android.app.NativeActivity"
            android:exported="true">
            <meta-data android:name="android.app.lib_name" android:value="game_engine" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

第三步:配置CMake自定义命令完成APK打包

直接在CMakeLists中添加自定义构建目标,调用SDK自带的aapt2、zipalign、apksigner工具完成全流程打包,不需要依赖其他构建工具:

# 配置SDK路径、签名信息等参数
set(ANDROID_SDK_PATH "$ENV{ANDROID_SDK_PATH}" CACHE PATH "Android SDK root path")
set(KEYSTORE_PATH "$ENV{KEYSTORE_PATH}" CACHE PATH "Signing keystore path")
set(KEYSTORE_PASS "$ENV{KEYSTORE_PASS}" CACHE STRING "Keystore password")

# 自定义目标:构建最终签名APK
add_custom_target(build_apk ALL
    # 1. 编译资源文件
    COMMAND ${ANDROID_SDK_PATH}/build-tools/34.0.0/aapt2 compile --dir android_root/res -o compiled_resources.zip
    # 2. 链接资源生成未签名APK
    COMMAND ${ANDROID_SDK_PATH}/build-tools/34.0.0/aapt2 link compiled_resources.zip -I ${ANDROID_SDK_PATH}/platforms/android-33/android.jar --manifest android_root/AndroidManifest.xml -o unsigned.apk --auto-add-overlay
    # 3. 把编译好的动态库添加到APK包中
    COMMAND zip -uj unsigned.apk lib/${ANDROID_ABI}/libgame_engine.so
    COMMAND zip -uj unsigned.apk ${ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI}/libc++_shared.so
    # 4. 对齐APK
    COMMAND ${ANDROID_SDK_PATH}/build-tools/34.0.0/zipalign -v 4 unsigned.apk aligned.apk
    # 5. 签名APK
    COMMAND ${ANDROID_SDK_PATH}/build-tools/34.0.0/apksigner sign --ks ${KEYSTORE_PATH} --ks-pass pass:${KEYSTORE_PASS} --out final_game.apk aligned.apk
    DEPENDS game_engine
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

第四步:Eclipse配置

  • 打开Eclipse,选择导入Existing Code as Makefile Project,选中项目根目录,工具链选择Android GCC,无对应选项可以手动将CDT构建器配置为CMake
  • 进入项目属性->C/C++ Build->Environment,添加NDK_PATH、ANDROID_SDK_PATH、KEYSTORE_PATH、KEYSTORE_PASS四个环境变量,填写本地对应路径和密码
  • 将默认构建命令替换为cmake --build . --target build_apk,点击Eclipse构建按钮即可直接生成最终签名APK
  • 新增Android Application运行配置,选择打包好的final_game.apk,连接真机或启动模拟器后点击运行即可直接安装启动应用

注意事项

  • 如果需要自定义Java层逻辑,只需要在CMake自定义命令中增加javac编译Java代码、d8转dex的步骤即可,流程和上述打包逻辑一致
  • 多ABI构建可以通过创建多个CMake构建目录,每个目录配置不同ANDROID_ABI参数实现,不需要修改核心CMakeLists逻辑

内容的提问来源于stack exchange,提问作者guacamoleku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:39:02