基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(七)基于CrossApp跨平台框架的MQTT客户端控制应用android版

本文在前一篇基础上,详细介绍以CrossApp跨平台框架为基础,利用mosquito库和easySQLite库设计实现了基于MQTT协议的android版步进电机控制客户端。

一、开发环境的准备

编译环境为CrossApp平台提供的一键部署windows下android开发环境的工具包:
下载地址:
http://pan.baidu.com/s/1qW6ql32#dir/path=%2FCrossApp-Ide

工具包的安装在此省略。参考文章:
https://www.oschina.net/question/1271569_160671

一步步按照向导设置好自己的软件环境。我安装的是x64版。

二、工程的构建和基本设置

安装好后,运行C:\CrossApp\eclipse下的eclipse.exe

参考:http://blog.csdn.net/j2066/article/details/47624109

菜单->file->new->other
这里写图片描述

然后next,选对相应的android工程:

这里写图片描述

这里写图片描述

导入成功后看到:

这里写图片描述

看到前面左下角有个红色的叉,这是因为框架代码没有导入进来。
接着,按照前面的方法导入CrossApp框架代码工程:

这里写图片描述

然后看到有错误提示:

[2017-10-02 20:09:21 - StepMotorController] Unable to resolve target 'android-20'
[2017-10-02 20:14:47 - libCrossApp] Unable to resolve target 'android-20'
[2017-10-02 20:14:49 - libCrossApp] Unable to resolve target 'android-20'

这里写图片描述

需要修改libCrossApp的属性。
对着libCrossApp点右键,选Properties(属性):
这里写图片描述

在Project Build Target中选Android 4.4.2:

这里写图片描述

对于StepMotorController项目也一样设置这个地方:
这里写图片描述

接着,我们需要修改一下StepMotorController项目下的make文件:
双击项目下的jni下的Android.mk文件:

这里写图片描述

需要修改这个地方:

这里写图片描述

为去掉注释符号:

$(call import-add-path, $(LOCAL_PATH)/../../../..)
$(call import-add-path, $(LOCAL_PATH)/../../../../CrossApp/the_third_party/)

先编译一下,右击项目,Run As->Android Application:
这里写图片描述

看到命令行有个错误:

这里写图片描述

这个错误是本项目的NDK构建环境android-ndk-r9路径设置有问题造成的:
右键点StepMotorController属性(Properties)->c/c++ Build->Environment->NDK ROOT:

这里写图片描述

双击这一行,把NDK ROOT设置为自己的路径,我们装包默认的是C:\CrossApp\android-ndk-r9d:

这里写图片描述

点OK:

这里写图片描述

还有一个地方需要修改:
这里写图片描述

修改为我们安装的目录:
C:\CrossApp\android-ndk-r9d\ndk-build.cmd

点OK,编译一下,看到一条错误:

jni/../../Classes/easySQLite/SqlCommon.h:136:22: error: format not a string literal and no format arguments [-Werror=format-security]

参考网上文章,原因是:

  android-ndk-r9与Eclipse的版本不兼容问题

解决方法:

  在对应项目的proj.android/jni/Application.mk添加一句话

  APP_CFLAGS += -Wno-error=format-security

  意思就是无视这个error
  
这里写图片描述

再次编译,又出来错误:

jni/../../Classes/MenuViewController.cpp:105:15: error: converting to execution character set: Illegal byte sequence

这个错误原因是MenuViewController.cpp这个文件的文本格式是ANSI,因为不是支持unicode的格式,所以,不支持中文编码。
解决这个问题的方法是,用记事本打开这个文件另存为UTF-8格式:
这里写图片描述

编译一下,又出现错误:

jni/../../Classes/easySQLite/SqlCommon.cpp: In member function 'sql::string sql::time::format(const char*)':
jni/../../Classes/easySQLite/SqlCommon.cpp:70:38: error: 'localtime_s' was not declared in this scope
   if (localtime_s(&localtime, &_value) == 0)
                                      ^
jni/../../Classes/easySQLite/SqlCommon.cpp: In function 'sql::string sql::intToStr(int)':
jni/../../Classes/easySQLite/SqlCommon.cpp:116:43: error: '_itoa_s' was not declared in this scope
  _itoa_s(value, buffer, sizeof(buffer), 10);
                                           ^
jni/../../Classes/easySQLite/SqlCommon.cpp: In function 'sql::string sql::intToStr(sql::integer)':
jni/../../Classes/easySQLite/SqlCommon.cpp:123:45: error: '_i64toa_s' was not declared in this scope
  _i64toa_s(value, buffer, sizeof(buffer), 10);
                                             ^
make.exe: *** [obj/local/armeabi/objs/CrossApp_cpp_shared/__/__/Classes/easySQLite/SqlCommon.o] Error 1</
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值