1、cocos2dx 集成sqlite模块
1.1、从模拟器中获取sqlite动态库
adb pull /system/lib/libsqlite.so
1.2、将libsqlite.so文件添加到ndk库中
将libsqlite.so拷贝到这个目录中 android-ndk-r10d\platforms\android-18\arch-arm\usr\lib
1.3、将sqlite3.h头文件添加到ndk库中
从\cocos2d-x-3.6\external\sqlite3\include中拷贝sqlite3.h文件到目录
\android-ndk-r10d\platforms\android-18\arch-arm\usr\include
1.4、在Android.mk文件中加入语句【是否需要待定】
LOCAL_LDLIBS:=-lsqlite
1.5、进行ndk编译
python build_native.py
2、cocos2dx集成curl模块
2.1、include curl 模块
在使用curl模块中,使用如下代码:
```
#include “curl/curl.h”
```
2.2、在Android.mk文件中引入curl模块
LOCAL_STATIC_LIBRARIES := cocos_curl_static 其中"cocos_curl_static"名称来源于“\Cocos\frameworks\cocos2d-x-3.6\external\curl\prebuilt\android”文件夹里的Android.mk文件里的LOCAL_MODULE变量。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos_curl_static
LOCAL_MODULE_FILENAME := curl
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcurl.a
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/android/curl
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/android
LOCAL_STATIC_LIBRARIES += cocos_ssl_static
LOCAL_STATIC_LIBRARIES += cocos_crypto_static
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos_crypto_static
LOCAL_MODULE_FILENAME := crypto
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_MODULE := cocos_ssl_static
LOCAL_MODULE_FILENAME := ssl
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libssl.a
include $(PREBUILT_STATIC_LIBRARY)
3、windows平台和Android平台的不同
3.1、关于time_t类型
在windows平台和Android平台上对time_t类型的定义是不同的。导致了在windows平台上正常运行的代码在Android平台上出现异常。
在windows平台上,如果是64位windows,time_t类型是 __int64,如果是32位系统,time_t的类型是long。
#ifndef _TIME32_T_DEFINED
typedef _W64 long __time32_t; /* 32-bit time value */
#define _TIME32_T_DEFINED
#endif
#ifndef _TIME64_T_DEFINED
typedef __int64 __time64_t; /* 64-bit time value */
#define _TIME64_T_DEFINED
#endif
#ifdef _USE_32BIT_TIME_T
typedef __time32_t time_t; /* time value */
#else
typedef __time64_t time_t; /* time value */
#endif
在Android平台上, 定义如下
typedef long __kernel_time_t;
typedef __kernel_time_t time_t;
3.2、HttpClient网络访问实现差异
代码如下:
HttpRequest* request = new (std::nothrow) HttpRequest();
request->setUrl("hao123.com");
request->setRequestType(HttpRequest::Type::POST);
request->setResponseCallback(CC_CALLBACK_2(FavoritePanel::onGetFavoriteInforByHttp, this));
char postData[128] = "last_favorite_id=%d&version=%d&data_len=%d";
sprintf(postData, "last_article_id=%d&version=%d&data_len=%d", m_curId, version, FAVORATE_LIST_LEN);
request->setRequestData(postData, strlen(postData));
request->setTag("POST Binary test");
HttpClient::getInstance()->send(request);
request->release();
//接收数据响应函数
void FavoritePanel::onGetFavoriteInforByHttp(HttpClient *sender, HttpResponse *response)
{
if (!response)
{
//情况1,网络中获取数据失败
log("response is null");
getFavoriteInforFromDb();
}
else if (!response->isSucceed())
{
//情况2,网络中获取数据失败
log("response failed error buffer: %s", response->getErrorBuffer());
getFavoriteInforFromDb();
}
else
{
//情况3,可以接收到数据
}
}
当服务器没有提供http网络接口时,在windows平台,会进入到情况2处理分支,而在android平台会进入到情况3处理分支,并且接收到的内容为“None”。