近期給app端做了一個c++的sdk雷酪,為了方便后續(xù)的win的移植赚楚。網(wǎng)絡庫用了libevent威酒,加密庫openssl,序列化庫jsoncpp/pb。pc端先運行調試完成归形。但是移植到移動端的時候遇到了許多問題。下面記錄一下鼻由。
openssl:
rsa加密:
2048bit情況下暇榴,每次加密的字段需要少于245字節(jié),因此對于大于245字節(jié)的字段加密時蕉世,要分成n段加密蔼紧,加密后的報文大小是n*256字節(jié)
aes:
原生接口特別難用,建議使用EVP_*開頭的接口來完成加解密狠轻。
ios
這個是問題比較少的奸例。先說這個。
ios 是支持c語法的向楼,因此移植上沒有遇到什么問題查吊。 配置好xcode工程,添加相應依賴庫即可湖蜕。
openssl編譯腳本: https://github.com/x2on/OpenSSL-for-iPhone
libevent: https://github.com/szuwest/libevent_ios
如果最后要壓縮成一個庫的話逻卖,需要先將靜態(tài)依賴庫用lipo
命令先拆分成各個架構上的.a(i386,armv7,arm64...)文件。再將.a文件拆成.o文件昭抒,然后用ar命令將所有一樣架構的.o文件打包成一個.a靜態(tài)庫评也,最后lipo - create
將所有架構的靜態(tài)庫打包。
這里由于ios工程可以直接將所有依賴的靜態(tài)庫都添加上去灭返,所以不需要這個復雜的步驟也可以通過盗迟。
android
這個坑好多,libevent編譯參考了 這個博客,https://www.cnblogs.com/swordy/p/4326290.html
熙含。但是這個有點問題會導致libevent沒有可用的網(wǎng)絡io模式可用罚缕。 android本質是個linux系統(tǒng)。因此也支持了poll怎静,select怕磨。需要在event-config.h
中添加一行#define _EVENT_HAVE_SELECT 1
來支持select。
2.感覺android對c++支持的不是很好消约,首先安卓默認首推使用stlport來開發(fā)肠鲫,但是stlport不支持很多c++11語法,因此選擇了gnustl。其次很多偏門的頭文件甚至如uuid.h都找不到或粮。
3.遇到了一個問題导饲,用std::thread起來的線程做libevent的loop線程會導致內(nèi)部select失敗(錯誤碼,參數(shù)錯誤), 換成pthread方法才可以渣锦。(這個好坑啊)
3.應該是jni開發(fā)的常見問題了硝岗。在java外部創(chuàng)建的線程如果想調用java方法,需要首先調用 jvm->AttachCurrentThread
,否則會產(chǎn)生異常袋毙。