在Visual Studio 2022中使用AGDK GameActivity/NativeActivity开发跨平台安卓游戏
AGDE 安卓游戏开发配置指南
一、使用AGDK GameActivity的具体步骤
- 配置项目依赖:在VS项目的安卓平台属性中,进入「链接器→输入」,添加对应架构的
game-activity.lib(路径指向你已配置的AGDK依赖目录下的对应库文件) - 编写GameActivity入口代码:替换原有NativeActivity入口,使用
android_main作为入口点,基于game-activity/native_app_glue/android_native_app_glue.h处理生命周期和窗口事件:
#include <game-activity/native_app_glue/android_native_app_glue.h> void android_main(struct android_app* app) { // 注册应用命令回调 app->onAppCmd = [](struct android_app* app, int32_t cmd) { switch(cmd) { case APP_CMD_INIT_WINDOW: // 初始化渲染环境(如OpenGL ES上下文) break; case APP_CMD_TERM_WINDOW: // 释放渲染资源 break; // 处理其他生命周期命令 default: break; } }; // 主事件循环 int events; struct android_poll_source* source; while(ALooper_pollAll(0, nullptr, &events, (void**)&source) >= 0) { if(source) source->process(app, source); } }
- 修改
AndroidManifest.xml:将Activity标签的android:name改为com.google.androidgamesdk.GameActivity,添加必要权限(如android.permission.WAKE_LOCK),并通过meta-data指定android.app.lib_name为你的原生库名称 - 编译运行:选择目标安卓架构(如arm64-v8a),直接部署到设备或模拟器
二、改用NativeActivity的配置方法
- 移除GameActivity依赖:在VS项目安卓平台的链接器输入中删除
game-activity.lib,将头文件替换为标准的android_native_app_glue.h - 编写NativeActivity入口:使用标准
android_main入口,基于android_native_app_glue处理事件,逻辑与GameActivity入口类似,但无需GameActivity特定扩展 - 更新
AndroidManifest.xml:将Activity的android:name改为android.app.NativeActivity,保持android.app.lib_name指向你的原生库,按需配置权限 - 验证依赖:确保AGDK依赖目录中的
android_native_app_glue.lib可被链接器找到
三、分离引擎与应用,实现Windows/安卓双平台兼容(参考teapot示例)
1. 拆分项目结构
- 引擎静态库项目:封装跨平台核心逻辑(渲染、输入、资源管理等),代码仅依赖抽象接口,不包含平台特定API
- Windows应用项目:引用引擎静态库,实现Win32平台的入口(
WinMain)、窗口创建、输入适配等代码 - 安卓AGDE项目:引用引擎静态库,实现安卓平台的
android_main入口、GameActivity/NativeActivity事件适配代码
2. 实现跨平台抽象层
- 定义抽象接口:如
IWindow、IInput,引擎核心仅调用接口方法 - 平台专属实现:Windows端基于Win32 API实现接口,安卓端基于AGDK的Activity框架实现接口
- 条件编译区分平台:
#include "EngineCore.h" #ifdef _WIN32 #include "Win32PlatformImpl.h" #elif __ANDROID__ #include "AndroidPlatformImpl.h" #endif int main() { IWindow* window = CreatePlatformWindow(); EngineCore engine(window); engine.RunMainLoop(); delete window; return 0; }
3. 统一编译配置
- 引擎库项目:设置通用编译选项(如C++17标准、统一警告等级),避免平台特定配置
- 应用项目:各自配置平台专属编译/链接规则,安卓项目保留已配置的AGDK包含目录和依赖目录,Windows项目配置Win32相关依赖
内容的提问来源于stack exchange,提问作者taku
相关产品推荐
相关产品推荐

