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