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。