《基于djinni的跨平臺App開發的實踐分享.pdf》由會員分享,可在線閱讀,更多相關《基于djinni的跨平臺App開發的實踐分享.pdf(40頁珍藏版)》請在三個皮匠報告上搜索。
1、使用C+開發的AppRingCentralGlip:TeamChat歡迎前往歡迎前往AppStore or GooglePlay下下載體驗載體驗移動開發薪資排行榜5|2018 RingCentral,Inc.All rights reserved.基于djinni的跨平臺App開發的實踐分享蔣偉 Jacob JiangRingCentral Collaboration Mobile ManagerLeading the WorldWinning the CloudA Gartner Magic Quadrant Leader for UCaaS 2017,2016&2015Unified Co
2、mmunication is New FutureLeader in UCaaS from Silicon ValleyRingCentral R&D center in Xiamen100 Most Trustworthy Companies inAmerica 2016&2017International Business AwardsTop Cloud Communications ProviderListed on the NYSEGlip 團隊協作平臺團隊協作平臺視頻會議、文件分享、評論Glip Mobile產品需求產品需求團隊一站式協作溝通平臺,無縫集成emailPBX業務多,Cl
3、oud電話隨時可用,在線傳真高可用性、穩定1234Glip Mobile產品需求協作平臺產品需求協作平臺lNative方式各寫一遍?l是否需要用跨平臺技術?l完全自定義的跨平臺還是部分跨平臺?原生界面原生界面+不想寫不想寫2 2遍代碼遍代碼l首先決定是否需要用跨平臺技術?首先決定是否需要用跨平臺技術?是是l完全自定義的跨平臺還是部分跨平臺?完全自定義的跨平臺還是部分跨平臺?部分部分l前端前端界面跨平臺還是底層邏輯跨平臺?界面跨平臺還是底層邏輯跨平臺?底層底層跨平臺方案非常多跨平臺方案非常多Djinni介紹介紹接口定義語言 IDL自動生成橋接代碼Java Proxy class,JNI Mars
4、haling,Java C+(via JNI)Obj-C Interface,Obj-C C+(via Obj-C+)C+abstract base class開發實現C+implementationdemoGenerated Code iOS&Android Generated Code C+Handwrite Code C+Generated Code iOS&Android-CallbackGenerated Code C+-CallbackHandwrite Code iOS&Android-Callback編譯前提1.添加新增的文件、代碼至工程2.添加djinni依賴庫3.Compi
5、leBoolFixed-Width Integers:i8,i16,i32,i64Double-Precision Floating-Point:f64StringBinarylist,set,mapoptionalDateDjinni支持的主要數據類型支持的主要數據類型Djinni編譯工具iOS&OS X:LLVM 9.0(Xcode 9.0)Android:Clang 3.8,NDK r14b(Android Studio)C+11AndroidiOSCoreLibGlip Mobile的架構的架構lUI-platform specific(Java or Obj-C)lLanguage
6、bridge(JNI or Obj-C+)lBusiness logic(C+)Native UI+業務邏輯復用業務邏輯復用Android(Java/Kotlin)iOS(Swift/Objective-C)Language bridge(JNI or Objective-C+)UIController/ViewModel(C+)Biz logic(C+)Core Foundation(C+)StorageNetworkThreadDatabaseSpecified platform feature3rdparty libraryC+LibrariesWebsockets,openSSL,li
7、bcurl,sqlite,WebRTC,phoneparser,坐享大量優質穩定的庫好處功能跨平臺一致(bug也是)高性能Network StateApplication StateDevice ContactDevice CalendarPlatform Specific libraryHttp ClientLogFile StorageThreadHttpliOS AFNetworkinglAndroid HttpURLConnectionLogliOS NSLoglAndroid LogcatlLog4CPP write log fileThreadliOS NSOperationlAn
8、droid ThreadPoolExecutorPresence 例子例子無需定制邏輯 公共邏輯優先定義層間接口 Git引用submodule關系,native/corelib同時開發 Android直接使用編譯庫,直接收益工作流工作流收益收益l整體開發效率提升了2倍l部門間溝通效率提升l代碼質量更穩定l模塊化、編譯速度快Swift/Obj-C 11WKotlin/Java 10WC+4W 業務代碼,頭文件8W代碼量節約8W行A Gartner UCaaS Magic Quadrant Leader.Again.RingCentral positioned furthest for compl
9、eteness of visionBundle resource pathNetwork(background session)Thread(Thread is different on iOS/Android)App background states平臺差異性平臺差異性大量的djinni頭文件、*.mm文件反復引用,編譯時間太長4分鐘-10秒編譯時間優化編譯時間優化啟動庫太龐大,啟動時間占用比例大動態庫轉靜態庫處理C+宏定義靜態性能優化性能優化 語言層面沒有block支持,需要寫大量delegate Share_ptr強引用,導致delegate與ViewController互為強引用 類文件生成較多 Djinni類無法支持繼承短板短板回顧回顧為什么選擇使用C+跨平臺djinni工具的使用使用djinni的產品架構優缺點跨平臺C+移動App開發效率高、速度快、不犧牲原生界面體驗枯燥無味的接口編寫工作被djinni取代一次開發 多平臺復用總結總結