JavaScriptCore
1、JavaCore本質(zhì)就是Java引擎砌溺,提供了執(zhí)行Java語言的環(huán)境涵卵,提供Java執(zhí)行所需的底層資源
2佣谐、JavaCore是一個(gè)C++實(shí)現(xiàn)的開源項(xiàng)目。使用Apple提供的JavaCore框架吮蛹,你可以在Objective-C或者基于C的程序中執(zhí)行Java代碼荤崇,也可以向Java環(huán)境中插入一些自定義的對(duì)象。JavaCore從iOS 7.0之后可以直接使用潮针。
3术荤、Java可以通過JavaScriptCore,獲取OC中對(duì)象的成員變量每篷、屬性和方法瓣戚,從而動(dòng)態(tài)更改OC代碼
4、鑒于以上特點(diǎn)焦读,許多跨平臺(tái)開發(fā)框架和熱更新框架內(nèi)部都用到JavaScriptCore子库,以支持OC與java的通信
JavaScriptCore內(nèi)部幾個(gè)重要的類
- JSVirtualMachine
一個(gè)JSVirtualMachine的實(shí)例就是一個(gè)完整獨(dú)立的Java的執(zhí)行環(huán)境,為Java的執(zhí)行提供底層資源矗晃。
這個(gè)類主要用來做兩件事情:
1仑嗅、實(shí)現(xiàn)并發(fā)的Java執(zhí)行
2、Java和Objective-C橋接對(duì)象的內(nèi)存管理 - JSContext
一個(gè)JSContext對(duì)象代表一個(gè)Java執(zhí)行環(huán)境张症。在native代碼中仓技,使用JSContext去執(zhí)行JS代碼,訪問JS中定義或者計(jì)算的值吠冤,并使Java可以訪問native的對(duì)象浑彰、方法、函數(shù)拯辙。 - JSValue
一個(gè)JSValue實(shí)例就是一個(gè)Java值的引用郭变。使用JSValue類在Java和native代碼之間轉(zhuǎn)換一些基本類型的數(shù)據(jù)(比如數(shù)值和字符串)颜价。你也可以使用這個(gè)類去創(chuàng)建包裝了自定義類的native對(duì)象的Java對(duì)象,或者創(chuàng)建由native方法或者block實(shí)現(xiàn)的Java函數(shù)诉濒。 - JSExport
JSExport協(xié)議提供了一種聲明式的方法去向Java代碼導(dǎo)出Objective-C的實(shí)例類及其實(shí)例方法周伦,類方法和屬性。
JSPatch 騰訊iOS高級(jí)工程師bang
JSPatch 是一個(gè)開源項(xiàng)目(Github鏈接)未荒,只需要在項(xiàng)目里引入極小的引擎文件专挪,就可以使用 JavaScript 調(diào)用任何 Objective-C 的原生接口,替換任意 Objective-C 原生方法片排。目前主要用于下發(fā) JS 腳本替換原生 Objective-C 代碼寨腔,實(shí)時(shí)修復(fù)線上 bug。原理:JS傳遞字符串給OC率寡,OC通過 Runtime 接口調(diào)用和替換OC方法迫卢。JS與OC的消息傳遞即通信用的是Apple提供的JavaScriptCore的API。
lua腳本
比如: wax冶共。熱更新時(shí)乾蛤,從服務(wù)器拉去lua腳本。游戲開發(fā)經(jīng)常用到捅僵。
Weex
跨平臺(tái)家卖,一套代碼,iOS庙楚、Android都可以運(yùn)行上荡。用前端語法實(shí)現(xiàn)原生效果。比React Native更好用馒闷。
weex基于vue.js榛臼,ReactNative基于React。
ReactNative安裝配置麻煩窜司。 weex安裝cli之后就可以使用。
react模板JSX有一定的學(xué)習(xí)成本航揉,vue和常用的web開發(fā)類似塞祈,模板是普通的html,數(shù)據(jù)綁定用mustache風(fēng)格帅涂,樣式直接使用css议薪。
淘寶干的漂亮,中國在編碼的實(shí)力越來越牛叉了媳友。威武K挂椤!醇锚!
React Native 哼御, Facebook
不像Weex能一套代碼多端運(yùn)行坯临,需要自己分別做修改。
React Native 基于React開發(fā)的用web技術(shù)達(dá)到native的交互效果的可擴(kuò)展組件恋昼,實(shí)現(xiàn)跨平臺(tái)開發(fā)看靠。 可以動(dòng)態(tài)添加業(yè)務(wù)模塊,但無法做到修改原生OC代碼液肌。JSPatch挟炬、lua 配合React Native可以讓一個(gè)原生APP時(shí)刻處于可擴(kuò)展可修改的狀態(tài)。電商大公司淘寶京東等有用
Hybrid
像PhoneGap之類的框架, 基本概念和web差不多, 通過更新js/html來實(shí)現(xiàn)動(dòng)態(tài)化嗦哆,沒有原生的效果流暢谤祖。
動(dòng)態(tài)庫
可以做demo用,真實(shí)使用的時(shí)候會(huì)被蘋果禁止老速。
因?yàn)?打包發(fā)到AppStore的ipa安裝包 里的每個(gè)動(dòng)態(tài)庫 都有唯一的編碼粥喜,iOS系統(tǒng)會(huì)進(jìn)行驗(yàn)證,所以動(dòng)態(tài)通過網(wǎng)絡(luò)獲取 新的動(dòng)態(tài)庫 也用不了烁峭。
rollout.io
Rollout緊急修復(fù)線上bug容客。后端有相關(guān)的管理頁面。因?yàn)槭菄獾木W(wǎng)站约郁,然后呢缩挑,要FQ才能使用。
DynamicCocoa 鬓梅, 滴滴
DynamicCocoa供置,是滴滴 App 架構(gòu)組自研的 iOS 動(dòng)態(tài)化方案,可以讓現(xiàn)有的 Objective-C 代碼轉(zhuǎn)換生成中間代碼(JS)绽快,下發(fā)后動(dòng)態(tài)執(zhí)行芥丧。計(jì)劃于 2017 年初開源。
相比其他動(dòng)態(tài)化方案坊罢,DynamicCocoa 優(yōu)勢(shì)在于
- 使用原生技術(shù)棧:使用者完全不用接觸到 JS 或任何中間代碼续担,保持原生的 Objective-C 開發(fā)、調(diào)試方式不變
- 無需重寫已有代碼:已有 native 模塊能很方便的變成動(dòng)態(tài)化插件
- 語法支持完備性高:支持絕大多數(shù)日常開發(fā)中用到的語法活孩,不用擔(dān)心這不支持那不支持
- 支持 HotPatch:改完 bug 后直接從源碼打出 patch物遇,一站式解決動(dòng)態(tài)化和熱修復(fù)需求