淺析hybrid模式下地支付寶錢包和微信



開篇javascript


最近一直在爲插件式開發而不斷探詢。對於android端已經有一套插件式開發的框架。有經過java的反射機制實現的plugin,但眼下我尚未找到一套完整的開源的框架,後期繼續尋找。而對於iOS端,由於object-c沒有java的反射機制。因而就想到了動態載入的方式,而網友們發現蘋果公司禁止開發人員使用動態庫。而僅僅贊成使用靜態庫,因此使用載入動態庫的方式眼下是行不通了。css

那現在就剩下兩條路,就是採用webapp開發和hybrid模式。對於webapp。現在也是不少人探索的道路了,這樣的方式的優勢和劣勢也是至關明顯,優勢是可以實現跨平臺,iOS,android,windowsphone都可以使用,移植性好;很差的地方就是對於眼下廣泛的3G和4G網絡來講。耗費流量也是一個大問題,還有就是在體驗上比不了native的高速。只是依照PC端發展和通信網絡的趨勢和,webapp是將來的慷慨向。html

而hybrid模式就是眼下native和webapp之間的一種過渡方式了,採用h5和native相結合的模式,眼下已經有至關成熟的發展了,阿里巴巴和騰訊都有本身的一套框架,而網絡上也有組織開源了這方面的源代碼,像phonegap和cordva就是早期的踐行者,現在也有很多公司推出了商業版,詳細可以到網絡上搜尋,今天我要記錄的就是我在研究支付寶錢包和微信的hybird開發構想,所有資料均來源於網絡。前端

前人的研究成果java


假設想對支付寶錢包有一些瞭解可以參考網上的幾篇文章。分析支付寶client的插件機制淺析支付寶錢包插件再談支付寶錢包插件和說好的 Demo 網上另外一篇支付寶錢包的文章PhoneGap版支付寶Androidclient開發小結,從內容看應該是內部開發者的總結,對於微信資料則少之又少。咱們要談的不是開放平臺,我事實上特想知道他們的開發思路,固然這是商業機密,我僅僅好從現有的表象中去探尋了一點痕跡了。jquery

先談微信的android版吧。反編譯的結果使人失望。騰訊已經對代碼做了混淆等針對反編譯而進行的防禦措施。沒有多少可用價值,只是有一個文件仍是很是有價值的。那就是wxjs.js。關於這個javascript的發現和研究有人比我要早,你們能夠去這裏查看WeixinApi,DarkAbyss也寫了一篇介紹 weixinJSBridge的介紹,iOS包裏的wxjs.js是通過壓縮過得,因此看的很是吃力。由於所獲信息有限,對微信的研究也就僅僅能先進行到這裏,期待着其它大牛能夠繼續努力了。android

支付寶錢包前面已經有大牛嘗試過度析。但是我仍是對bybird模式不是特別清楚,phonegap的源代碼也有,但是對於長篇大論我向來沒有興趣,而國內介紹的文章大可能是轉帖幾個大牛的文章,而大牛向來不拘小節。僅僅介紹本身感興趣的。無關的細節則忽略不計。想來這也是大牛不屑於反覆別人的構想吧。ios

加上我英文閱讀能力有限。僅僅能在茫茫大海似的網絡中繼續搜尋了。git

hybrid插件github


經過對支付寶錢包和微信android端的反編譯。發現裏面有一些.so文件。在iOS端。微信內部沒有發現.so文件。而在支付寶錢包內部。卻又一些以.amr,前面有人已經指出,這些事實上也是.zip文件,僅僅是爲了混淆一下做的掩飾。解壓縮以後,裏面事實上一堆html,js和css的文件,那麼個人疑問是app怎樣載入這些文件內。固然是用webview來載入。但是個人疑問是。app是解壓以後的載入,仍是在不解壓的狀況下進行載入。假設解壓又解壓到哪裏。而iOS是不一樣意解壓到MainBundle中的,這個我有作過嘗試(模擬器中可以,但是真機上卻行不通。我試驗的是xcode6。ios8.1,而網絡資料顯示,蘋果這個版本號又對app文件文件夾做了較大的調整),假設解壓到Document文件夾則沒有問題。那麼我猜測的一種狀況是,app在需要的過後將文件解壓到其它文件夾,而後再進行載入,這個過程固然可以經過配置文件控制。那麼更大膽的一點想法是相似於Bundle方式。可以直接載入.amr裏面的內容。但是我在網上沒有找到這方面的資料。假設誰有資料可以發我一些。小弟感激涕零。

再進入到支付寶錢包的.amr內部。發現裏面採用的一些webapp框架不像是一個團隊開發,很是像是幾個不一樣的團隊(或人)的做品,因爲裏面的風格各不一樣樣,只是他們共同使用了zepto.js和sea.js,zepto.js是手機端的jquery,其宗旨就是追求jquery的功能,但是又不使文件過大,簡言之就是麻雀雖小五臟俱全,而sea.js則是提供js的模塊化開發。固然除了上面兩個基本js框架以外,還有其它常用的js框架。比方scroll.js,json.js,fastclick.js等框架。固然在裏面也發現了淘寶前端開發組的arale框架。我想阿里現在的研發團隊很是多,同一個問題好幾個團隊在研究,也有好幾套方案,這樣作儘管說耗費人力。但是可以有效防止因爲某一套框架的漏洞而致使整個app的crash。事實上終於還會僅僅有一兩個的,僅僅是這一兩個必定是存優去劣而成的集大成者。

由於在微信上沒有什麼發現,我也沒有去研究騰訊其它的app了。但是也發現騰訊前端也有本身的一套移動web框架了,叫spirit,有興趣能夠本身去了解一下。

可見在開源的道路上。阿里比騰訊走的要遠。但願企鵝帝國除了賺錢之餘,也能夠和你們分享一下本身的研究成果。帶領中國廣大開發人員一塊兒成長進步。

繼續的遠征


假設想要繼續深刻的瞭解hybrid編程。但願有一個簡短易明的demo那豈不很是好。最後最終在github上找到了,牛人早已造好車輪。僅僅是我還來不及發現而已,WebViewJavascriptBridge,這是這對iOS和OSX而設計的object-c和javascript通信框架,已經有好些公司採用這一套了。包含Facebook Messager和Facebook Paper,若問我是怎麼知道。那就得問問大牛了。

經過對該份源代碼的分析,發現其設計之巧妙使人心生佩服,再回來想一想支付寶錢包和微信。他們應該都有借鑑這裏的設計,而後進行了各自的擴展,咱們有人找到了微信的wxjs.js,但是尚未找到alipaybridge.js的源代碼不知支付寶錢包放到哪裏了,也許它的文件不叫這個名字,有時間慢慢找吧。

看完是否是感受,初極狹。才通人,復行數十步。豁然開朗的感受,這份源代碼已經將框架寫的很是清晰明確了,已是不需要再多言了。不論什麼的修飾都是累贅了。

將來的構想


看完以後,發現對於iOS和andorid的開發者而言。javascript已是不可忽視的語言了,而且其開發份量將舉足輕重,三星的Tizen就嘗試了h5+js+css的方式來構建移動app,加上最近微軟與Apache Cordova合做。推出的visual studio開始集成支持cordova來開發iOS、android、windowsphone的app,跨平臺的壁壘彷佛就要被打破了。相信在不久的未來會有不少其它地javascript人員增長到app的開發隊伍中來。

既然hybrid模式是一個過渡階段的產物,聯想到PC端軟件的發展過程,手機端終於的模式應該就是全然的h5的開發方式了。至於何時會大面積的顛覆。預計還得看網絡帶寬的進一步提升和資費的進一步減小,手機的硬件升級難度已經愈來愈大,後期的目標應該是在軟件的體驗和服務上。

寫了這麼多,也僅僅是把我本身探索的一個過程整理了出來,後期會繼續研究,但願對其它人也有所幫助,若有疏漏,還往大牛賜教。歡迎到個人主頁留言。

相關文章
相關標籤/搜索