Memoselect 2019-12-13 15:00 采纳率: 0%
浏览 936

Android Studio 3.5.2 / 3.5.3 cocos2d-x 3.17.2 android编译问题

先上环境
Java:Java1.8.60
SDK:API -> android-28 Tools -> 26.1.1
NDK:android-ndk-r16b
cocos官方说是以android-ndk-r16b测试的,所以我用了这个
ANT:1.10.7
Python:2.7.9
Android studio :3.5.3
cocos2d-x:cocos2d-x 3.17.2

好吧,就这些了,首先我用cocos new创建项目
用Android studio 3.5.3 打开项目,OK,测试成功!如图



图片说明



能编译成功中途也遇到了各种坑,先不说这个,再说一说后续开发的问题
比如:


图片说明



上图就是我自己重新创建了一个MainScene的场景,在HelloWorldScene.cpp中引用这个类,并实例化,如图:


图片说明


在HelloWorldScene::init()中创建一个sc的MainScene指针



图片说明



以上代码在VS2015 编译通过,或者创建一个按钮点击事件中创建MainScene场景,并replaceScene函数替换当前场景,VS编译没有问题,但android studio提示MsinScene::createScene()未定义!!!



图片说明



说到这里,肯定有人会说,你应该是Android.mk没有包含cpp文件吧?


图片说明



到底是哪里出了错误,为什么要这样对我啊

我在MainScene文件中定义其他的类或者继承类却能通过,如下:


图片说明图片说明图片说明


图片说明



为什么会这样? 定义其他类都没有问题,Scene就搞不了事情了,救命~~啊



我自己搞定了,编译发现gradle.properties 中的编译模式是Cmake,并不是NDK-Build模式,如下:

PROP_BUILD_TYPE=cmake

所以Android.mk文件包含ccp是没有用的,只能在项目根目录的CMakeLists.txt文件里包含cpp文件就可以了,如下图:


图片说明


纠结好久的问题终于解决了,希望能帮到别人

我用的工具是:

android studio 3.5.3

cocos2d-x 3.17.2

NDK r16b

SDK API 28

SDK build tools 26.1.1

apache ant 1.10.7

python 2.7.9

java jdk1.8.0_91

Visual studio 2015 社区版

这个问题忘记结贴了,Android studio3.5.3是使用cmake编译的,Android.mk已经不用了

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-28 15:37
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    根据您提供的信息,Android Studio 3.5.3 在尝试构建 Cocos2d-x 的 Android 环境时遇到问题。主要问题是 Scene 类在 Cocos2d-x 中未被定义。

    解决此问题的方法是确保您的项目包含了正确的 Scene 类定义。这通常涉及到在项目的根目录下找到 Cocos2d-x 库中的 Scene 类,并将其导入到您的项目中。

    以下是一个示例如何在 MainScene.h 文件中引入 Scene 类:

    // MainScene.h
    #include <cocos2d.h>
    #include "MainScene.h"
    
    class MainScene : public cocos2d::Scene {
    public:
        MainScene();
    };
    

    然后,将 MainScene 类声明为公共成员变量并初始化它为 Scene 类的默认构造函数:

    // MainScene.cpp
    MainScene::MainScene() {}
    

    此外,如果您希望在不同的场景之间切换,请考虑使用 replaceScene() 函数或直接调用 addChild() 方法来添加和替换子场景。例如:

    // HelloWorldScene.cpp
    Scene* HelloWorldScene::createScene() {
        HelloWorldScene *scene = new HelloWorldScene;
        if (!scene->init()) {
            delete scene;
            return nullptr;
        }
        return scene;
    }
    
    void HelloWorldScene::init() {
        // 初始化场景的内容
    }
    

    最后,确保在您的 CMakeLists.txt 文件中正确配置了 BUILD_TYPE 变量,以便使用正确的编译模式。如果您的项目使用的是 NDK-BUILD 模式,那么在 CMakeLists.txt 中应包含以下行:

    PROP_BUILD_TYPE=ndk-build
    

    如果您使用的是 CMake 模式,则不需要在 CMakeLists.txt 中指定 BUILD_TYPE 变量。

    评论

报告相同问题?