跨平台SDK研发小结

                                      跨平台SDK研发小结

       最近做一个跨平台的SDK, SDK的主要功能就是网络首发,文件读写,数据正确性校验。可以理解为某网盘的功能。因为要支持android, ios, windows, mac,linux 平台,并且我一个人做,简单起见,使用了第3方库:zlib、openSSL、libCurl、boost.

      回顾一下前段时间,我在开发中遇到的坑点。

      1. 字符编码问题。比如要下载的文件有特殊字符,如中文、韩文等。服务的返回的数据为UTF8格式。那么本地用什么格式才能写到磁盘,同时还能通知到APP层?

        要求APP 层,服务端与SDK 交互,统一使用UTF8编码。IOS, android平台,UTF8 的编码字符,可直接用std::string计算,可直接使用fopen; windows 平台UTF8 编码的字符串可以用std::string 计算,但处理文件IO操作时,要用_wfopen, 文件名称需要转为w_char*. 本质原因:

                规范: char类型均为UTF8编码, wchat_t类型编码与os相关(win UTF16, mac&linux UTF32)    
                          windows内核UTF16, mac&linux内核UTF8                                           
                          程序内部均用char, 涉及到系统操作时根据需要转换为wchar, 不涉及native string 

     2. zlib,  android 端需要编译,ios 端 -lz即可。

     3. openSSL,libCurl支持HTTPS.

           CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);

           curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
           curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);

           CURLOPT_SSL_VERIFYHOST 
           0    :不检查证书
           1    :检查证书不检查域名
           2    :既检查证书又检查域名

     4. 开源库编译。

       BOOST

        IOS boost 编译

       https://github.com/faithfracture/Apple-Boost-BuildScript

       android boost 编译

       使用mk文件

       curl/openSSL/zlib

        android curl openssl zlib 编译,参考https://github.com/shishuo365/libcurl-android.git

        ios 参考https://github.com/jasonacox/Build-OpenSSL-cURL

     5. android 端回调函数封装。

           JavaVM *g_jvm = nullptr;
           jobject g_obj = 0;

          void createThread(JNIEnv *env, jobject instance) {
                 // 把instant设置为全局引用
            g_obj = env->NewGlobalRef(instance);
            pthread_t _pthread;
    
               // 避免线程方法还没有执行,该方法就先执行完毕,把instance释放掉了
           pthread_join(_pthread, 0);
           env->DeleteGlobalRef(g_obj);
      }

    6. 与其他第3方库冲突

        程序请求https 请求时候,崩溃在tcp 连接成功后。在IOS 初步分析时,判断是openSSL库加解密冲突导致。在app工程中

添加all_load配置后,再次编译明显出现大量duplicate symbol字样,明确定位和https相关,和其他SDK厂商,沟通,统一openSSL版本解决。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值