Android编译构建,教程11:使用Android Studio编译构建behaviac
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。
Android编译构建,教程11:使用Android Studio编译构建behaviac相关推荐
- Android基础入门教程——7.4 Android调用WebService
Android基础入门教程--7.4 Android调用WebService 标签(空格分隔): Android基础入门教程 本节引言: 经过前面的学习,数据请求,数据解析,文件上传下载等,应该满足大 ...
- Android高手进阶教程(八)之----Android Widget开发案例(世界杯倒计时!)
今天我们要写一下Android Widget的开发,由于快点凌晨,我就不说的太具体了,同志们就模仿吧!首先看一下效果图: 下面是Demo的详细步骤: 一.新建一个Android工程命名为:Widget ...
- Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用!
今天我们的教程是根据前面一节扩展进行的,如果你没有看,请点击 Android高手进阶教程(三) 查看第三课,这样跟容易方便你的理解! 在xml 文件里定义控件的属性,我们已经习惯了android:at ...
- 为什么Android项目mainactivity中有一个变量R_【Android开发入门教程】二.Android应用程序结构分析!...
一.新建HelloWorld项目: 1.打开Eclipse,点击"File"->"New"->"Project"-Android ...
- mysql5.6.22编译安装教程_Linux CentOS6.0下编译安装MySQL 5.6.22
Linux CentOS6.5下编译安装MySQL 5.6.22[给力详细教程] 一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库(安装过程注意有没出错) yum install gcc ...
- android vlc使用教程_在android项目中使用VLC
VLC是pc时代流媒体播放器的标杆,相信大家都有接触.VLC的流媒体部分是基于开源的live555库.live555的代码我稍微看过一些,基于C++的,说实话,代码写的有点乱,不太符合一个开源库的档次 ...
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!
大家好,我们这一节讲一下,Android获取Ip的一些方法,在我们开发中,有判断手机是否联网,或者想获得当前手机的Ip地址,当然WIFI连接的和 我们3G卡的Ip地址当然是不一样的. 首先我尝试了如下 ...
- 最新Android基础入门教程目录(完结版)
第一章:环境搭建与开发相关(已完结 10/10) https://blog.csdn.net/coder_pig/article/details/50000773 Android基础入门教程--1.1 ...
- 2015年最新Android基础入门教程目录(完结版)
2015年最新Android基础入门教程目录(完结版) 标签(空格分隔): Android基础入门教程 前言: 关于<2015年最新Android基础入门教程目录>终于在今天落下了帷幕,全 ...
- android项目开发教程,Android项目开发教程
Android项目开发教程 编辑 锁定 讨论 上传视频 Android项目开发教程 书 名 Android项目开发教程 作 者 车金庆.何征天.李琳.严正宇.周凌翱 类 别 图书&g ...
最新文章
- Linux【命令】修改文件内容
- POJ3233不错的矩阵(矩阵套矩阵)
- 【Python-ML】聚类的性能评价指标
- 字典-字典的增删改查常用操作
- window.atob()与window.btoa()方法实现编码与解码
- 美汽车销售商使用RFID汽车,加快销售速度
- 如何借助vsftpd在Linux上构建安全的FTP服务?
- python 存redis失败无提示_python如何关闭redis
- 有人说苹果手机的CPU非常强大,为什么会这样?苹果cpu又是谁设计的?
- ocr原理 oracle,Oracle技术之RAC Voting disk和OCR的管理
- 学计算机专科好还是牙医好,孩子明年高考,牙科、计算机两个专业,怎么选?...
- Qt 安装组件及其说明(by shany shang)
- android开发笔记之xml矢量图片
- 极点五笔特殊符号输入方法
- Python学习第二课-----绘制股票K线图(不使用mpl_finance包)
- 如何修改Excel中csv文件编码格式
- 迟来的2015年终总结
- 《C语言程序设计》单元总结与练习题
- Java中的实体类(VO、PO、DO、DTO、BO、QO、DAO、POJO)
- EtherCAT的从站配置
热门文章
- matlab多种显示格式一起用,[转载]MATLAB支持的几种图像文件格式
- mysql zf_ZF 连接 Mysql
- ai google 风格化图像_谷歌 AI 新方法:可提升 10 倍图像识别效率,关键还简单易用...
- mysql存储过程返回结果集_原来MySQL的存储过程也可以这么玩?
- JDBC:深入理解PreparedStatement和Statement
- Java学习笔记之设计模式(2)工厂模式
- Introduction to Computer Networking学习笔记(十三):传输层知识点学习总结
- mysql分日汇总填充0_将记录按小时或按日分组,并在mysql中填充零或空的空白
- SaaS、PaaS、IaaS典型的云计算解决方案架构
- Cookie、Session、Token、RefreshToken