Android编译构建,教程11:使用Android Studio编译构建behaviac

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

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

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

b27b6356b51d0f6c62cb4447a2264cfd.png

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

95abad3540f5055deb484bb0345ba051.png

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

externalNativeBuild {

cmake {

path "../../../../CMakeLists.txt"

}

}

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

b2a0a39a97819c031885ecd76e4b8364.png

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

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

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

bf81c6823e45b821580a42e099af5ec5.png

打开该文件,可以看到我们将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编辑器导出的行为树和类型信息文件全部放在该目录中,如下图所示:

c75d78d55b3bde59954648b8f2c2d536.png

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包,并安装运行,结果如下图所示:

80897df50259ce869c5f5c3214793c42.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值