摘要:基于原生主要是針對基于比較來說的,基于的我不想再討論了,我想嘗試的是從到功能都是原生,而不是用模擬的所謂原生體驗。
基于原生主要是針對基于webview+h5比較來說的,基于H5的我不想再討論了,我想嘗試的是從UI到功能都是原生,而不是用H5模擬的所謂原生體驗。
背景我們從開發角度來考慮,但凡想從事長遠的開發工作,都有自己的技術積累,最簡單的就是一些UI組件和功能組件的封裝。
舉例,我在一個App里實現了一個點擊一下能自動切換背景顏色的Button,包括點擊的動畫效果,我肯定會考慮封裝成一個類,比如叫MyButton,在Android下它繼承Button類, 在ios下它繼承UIButton類。做下一個App,我要重用就把MyButton類文件直接拷貝到新項目里,或者引用一個jar包或a文件。
還是不夠,我還想進一步,我想讓做App的開發和做原生的開發徹底分離,原生開發人員不需要理解和接觸任何App業務,只需要封裝類似MyButton這種組件提供給App開發人員使用,而App開發人員是不需要懂android和ios技術的開發人員。ReactNative只能做到部分分離,做不到真正的跨平臺,我想做到真正的一次開發跨Android和iOS平臺,有沒有可能實現,怎么實現?
問題設想很簡單,但是真正仔細去研究可行性,會發現巨量的問題和細節需要考慮和研究,我先列出19個基本問題:
要跨平臺,最基本的是選擇一個第三方語言,如果考慮運行時肯定首選JavaScript或lua之類的腳本語言。也可以像xamarin那樣用編譯型語言,不過難度肯定更大。
如果要ui也跨平臺,不考慮html的話,就得使用JSON或XML來描述ui層次結構。
如果用JSON和XML描述,就得需要有可視化的工具來方便用戶開發ui,否則直接文本編輯不可想象。
如果使用JS,需要選擇JS引擎,是JSCore還是V8,這需要研究差異和優劣。
Android最基礎的Activiy如何封裝,在iOS對應UIViewControlller?生命周期怎么考慮?肯定需要考慮多層,多層之間數據如何交互?
JS引擎實例整個App就用一個還是多個?需要釋放嗎?如何釋放?
Android的文件管理和iOS的如何統一?二者有相似處,也有很大差異。
線程怎么處理,允許App業務開發者直接構建和使用線程嗎?
Android除Activity之外還有services等基礎組件,iOS找不到對應的,如何統一?
雖然不是以H5為核心,但是webview肯定要支持,那webview里的h5如何和原生交互?如何讓webview加載的h5的js和跨平臺框架的js之間通信?
肯定需要一個統一的事件機制,包括button點擊這種系統事件的處理,也包括自定義事件,如何設計和實現android和ios的統一事件機制?
屏幕適配如何處理,這一塊非常麻煩,我們的目標是讓App業務開發者盡量不去考慮這種細節,如何設計和實現?
布局怎么設計,Android有很多布局類,iOS少一點主要是絕對布局,這一塊如何統一?
類似列表類型的組件應該有一個統一的處理方式,列表的復用機制在android和ios里都有類似的概念,android用ListView,iOS用UITableView,怎么統一?
代碼編寫的時候怎么調試?修改一點ui或邏輯代碼,如何馬上看到效果?能否單步?如何看到實時錯誤信息和調試信息?
Android和iOS的閃退怎么辦?App開發者不懂android和ios如何面對閃退問題?
代碼編寫完了,如何打包生成Android和iOS的安裝包?如果對外服務,如何替換證書,第三方的一些key,打包失敗了怎么辦,這需要一個完整的云打包服務,里面有很多問題需要解決。
怎么擴展功能?除了我們以外,怎么能讓其他原生開發人員來擴展功能?
如何實現組件插件化,可以根據需要裁剪,如何保證多個組件打包的沖突?
我只是列出一部分技術問題,而且每個問題的不同解決方案都會帶來無數小的問題。我們想實現這個框架對外服務,除了技術環節外,還有不少非技術的因素我們暫且不提。
方案每個問題的解決展開來都可以分析很長,所以我們只能先總體上簡單說一個大概。后續可以針對具體的問題再多帶帶發文探討。
調試和最終的發布App都是插件化,可裁剪的
有一個組件商店由我們和其它原生開發者維護
App開發者利用可視化IDE拖拽ui,利用js代碼編寫邏輯,填充數據,更新ui
有一個云打包系統把App開發者開發的js代碼和ui文件和原生開發的組件合并編譯打包
核心框架包含運行時腳本引擎解析js代碼,包含ui解析引擎解析json并構建原生ui樹。
實踐DeviceOne從2015年初開始設計開發,到2015年9月份發布,從發布到現在一年半了,它已經不是一個研究項目了,而是服務眾多開發者的一個平臺級產品了,有幾百App上線了。
這種跨平臺的想法我估計大家都不難想到,但是從設想到實現到產品,國內還是少有的,我們的努力證明這種思路是可行的并能達到了很好的效果,希望給大家帶來啟發。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82138.html
摘要:基于原生主要是針對基于比較來說的,基于的我不想再討論了,我想嘗試的是從到功能都是原生,而不是用模擬的所謂原生體驗。 基于原生主要是針對基于webview+h5比較來說的,基于H5的我不想再討論了,我想嘗試的是從UI到功能都是原生,而不是用H5模擬的所謂原生體驗。 背景 我們從開發角度來考慮,但凡想從事長遠的開發工作,都有自己的技術積累,最簡單的就是一些UI組件和功能組件的封裝。 舉例,...
摘要:本文轉載自眾成翻譯譯者文藺鏈接原文今年的頂級舉措之一是為我們的用戶提供一個更好的瀏覽體驗。這意味著保持最少的。這些組件有全局的,網站速度信標現場速度信標套件,試驗的庫文件,以及統計模塊等。它們在發布前要經歷嚴格的回歸測試,這就會增加延時。 本文轉載自:眾成翻譯譯者:文藺鏈接:http://www.zcfy.cc/article/912原文:http://www.ebaytechblog...
摘要:本文整理了年月國產數據庫大事件和重要產品發布消息。柏睿數據庫加速安全卡面向全球重磅發布。月日,在全球數字經濟大會成果發布會上,中國移動北京分公司與國產數據庫領域新銳企業柏睿數據簽署戰略合作協議。本次大賽主要面向全國愛好數據庫的高校學生。 本文整理了2021年8月國產數據庫大事件和重要產品發布消息。目錄8月國產數據庫大事記TOP108月國產數據庫大事記時間線產品/版本發布兼容認證8月排行榜新增...
.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body...
閱讀 2141·2023-04-26 03:06
閱讀 3589·2023-04-26 01:51
閱讀 2090·2021-11-24 09:38
閱讀 2462·2021-11-17 17:00
閱讀 2332·2021-09-28 09:36
閱讀 945·2021-09-24 09:47
閱讀 2590·2019-08-30 15:54
閱讀 1558·2019-08-30 15:44