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”。