Android Studio是一个为Android平台开发程序的集成开发环境,可供开发者免费使用。需要在官网下载并安装最新版的Android Studio,然后继续后文的编译构建。

可以参考源码包中tutorials/tutorial_11的做法类似构建自己的项目,具体步骤如下:

1. 新建自己的项目。这里我们直接打开已有的behaviac_android项目,如下图所示:

2. 双击打开build.gradle文件,如下图所示:

3. 在打开的文件中,修改cmake文件的相对路径,如下代码所示:

externalNativeBuild {
    cmake {
        path "../../../../CMakeLists.txt"
    }
}

这是由于CMakeLists.txt所在的路径在源码包的最顶级,如下图所示:

需要参考上面的CMakeLists.txt,用于编译构建behaviac组件。在这个CMakeLists.txt文件中,还需要添加自己的项目,这里是tutorial_11来做示范,如下代码所示:

add_subdirectory ("${PROJECT_SOURCE_DIR}/tutorials/tutorial_11/cpp")

4. 在tutorial_11项目中,也有自己的CMakeLists.txt,这个文件用于示范如何编译构建自己的项目,如下图所示:

打开该文件,可以看到我们将tutorial_11作为一个lib来编译构建,如下代码所示:

if (BEHAVIAC_ANDROID_STUDIO)
   add_library(tutorial_11 SHARED ${BTUNITTEST_INC} ${BTUNITTEST_SRC})
else()
   # add the executable
   add_executable(tutorial_11 ${BTUNITTEST_INC} ${BTUNITTEST_SRC})
endif()

target_link_libraries (tutorial_11 libbehaviac ${CMAKE_THREAD_LIBS_INIT})

5. 新建Android所需的assets目录,将behaviac编辑器导出的行为树和类型信息文件全部放在该目录中,如下图所示:

6. 在tutorial_11.cpp文件的InitBehavic()方法中,调用了Workspace::SetFilePath()接口,设置行为树加载路径,必须要以“assets:/”字符串开头,如下代码所示:

const char* InitBehavic()
{
    LOGI("InitBehavic\n");

#if !BEHAVIAC_CCDEFINE_ANDROID
    behaviac::Workspace::GetInstance()->SetFilePath("../tutorials/tutorial_11/cpp/exported");
#else
    behaviac::Workspace::GetInstance()->SetFilePath("assets:/behaviac/exported");
#endif

    behaviac::Workspace::GetInstance()->SetFileFormat(behaviac::Workspace::EFF_xml);

    return "InitBehavic\n";
}

7. 在项目的MainActivity.java文件中,加载behaviac_gcc_debug和tutorial_11_gcc_debug库,如下代码所示:

static {
    System.loadLibrary("behaviac_gcc_debug");
    System.loadLibrary("tutorial_11_gcc_debug");
}

8. 在onCreate()方法中调用C++的方法(这样处理仅供示范),并将AssetManager实例传递给C++端,如下代码所示:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Example of a call to a native method
    TextView tv = (TextView) findViewById(R.id.sample_text);
    tv.setText(TestMain(getApplication().getAssets()));
}

public native String TestMain(android.content.res.AssetManager assetManager);

9. 在tutorial_11.cpp文件中,实现了上一步中的TestMain()方法,调用接口Workspace::SetAssetManager()设置AssetManager实例,如下代码所示:

extern "C"
JNIEXPORT jstring JNICALL
Java_com_tencent_behaviac_behaviac_1android_MainActivity_TestMain(JNIEnv* env, jclass cls, jobject assetManager)
{
    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
    BEHAVIAC_ASSERT(mgr);

    behaviac::CFileManager::GetInstance()->SetAssetManager(mgr);

    std::string str = TestBehaviac();

    return env->NewStringUTF(str.c_str());
}

 

10. 编译构建APK包,并安装运行,结果如下图所示:

本教程相关的工作区和代码工程详见源码包的目录tutorials/tutorial_11

发表评论

电子邮件地址不会被公开。 必填项已用*标注