詳解React?Native項(xiàng)目中啟用Hermes引擎
引言
目前,最新版本的React Native(0.70.0及以上版本)已經(jīng)默認(rèn)開啟了Hermes引擎。而Hermes則是專門針對React Native應(yīng)用而優(yōu)化的全新JavaScript引擎,啟用Hermes引擎可以優(yōu)化啟動時間,減少內(nèi)存占用以及空間占用。
一、啟用 Hermes 引擎
1.1 Android
如果我們打開React Native項(xiàng)目的Android源碼,會在app/build.gradle文件中會看到如下的代碼。
if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor }
上面代碼的含義是,如果開啟了就采用Hermes引擎,如果未開啟則使用以前的jsc引擎。所以,如果需要開啟Hermes引擎,只需要將enableHermes屬性值設(shè)置成true即可,如下所示。
project.ext.react = [ entryFile: "index.js", - enableHermes: false // clean and rebuild if changing + enableHermes: true // clean and rebuild if changing ]
另外,如果您正在使用ProGuard,還需要在ProGuard -rules.pro中添加如下的混淆規(guī)則。
-keep class com.facebook.hermes.unicode.** { *; } -keep class com.facebook.jni.** { *; }
然后,使用如下的命令重新編譯項(xiàng)目,并運(yùn)行項(xiàng)目。
cd android && ./gradlew clean npx react-native run-android
1.2 iOS
從React Native 0.64開始,Hermes也支持在iOS上運(yùn)行。要啟用Hermes for iOS,需要打開iOS/Podfile文件,并進(jìn)行如下更改。
use_react_native!( :path => config[:reactNativePath], # to enable hermes on iOS, change `false` to `true` and then install pods # By default, Hermes is disabled on Old Architecture, and enabled on New Architecture. # You can enable/disable it manually by replacing `flags[:hermes_enabled]` with `true` or `false`. - :hermes_enabled => flags[:hermes_enabled], + :hermes_enabled => true )
如果需要在iOS中開啟Hermes引擎,需要將上面的hermes_enabled 的值修改為 true。完成上述配置之后,再使用下面的命令重新運(yùn)行項(xiàng)目。
cd ios && pod install npx react-native run-ios
如果iOS使用的是Mac M1的架構(gòu),可能還會遇到Cocoapods 的一些兼容問題。如果在安裝 pods依賴時出現(xiàn)問題,可以嘗試運(yùn)行下面的命令:
sudo arch -x86_64 gem install ffi arch -x86_64 pod install
以上命令會安裝ffi包,用于在安裝和裝載 pods 時調(diào)用合適的系統(tǒng)架構(gòu)。
二、Hermes 引擎使用
2.1 檢查 Hermes 引擎是否啟用
如果我們創(chuàng)建了一個新的React Native應(yīng)用程序,想要在應(yīng)用中查看是否啟用Hermes,那么可以使用下面的方式。
const isHermes = () => !!global.HermesInternal;
想要體驗(yàn)開啟Hermes帶來的好處,可以嘗試重新運(yùn)行項(xiàng)目來進(jìn)行對比。
npx react-native run-android --variant release npx react-native run-ios --configuration Release
2.2 綁定Hermes
從React Native 0.69開始,每個版本的React Native都會綁定一個Hermes版本。每當(dāng)我們發(fā)布React Native的新版本時,官方都會為開發(fā)者構(gòu)建一個Hermes的版本,目的是確保使用的Hermes版本與React Native版本的完全兼容。
這是因?yàn)椋瑥臍v史上版本來看,我們在匹配Hermes的版本和React Native的版本時遇到過兼容性問題。為了完全消除這類問題,我們?yōu)殚_發(fā)者提供了一個與特定React Native版本兼容的JS引擎。
同時,這些更改對React Native開發(fā)者是完全透明的,您仍然可以根據(jù)配置來啟用/禁用Hermes引擎。
2.3 使用DevTools在Hermes上調(diào)試JS
Hermes通過實(shí)現(xiàn)Chrome檢查器協(xié)議來支持Chrome調(diào)試器,這意味著,我們可以直接使用Chrome的DevTools工具來直接調(diào)試運(yùn)行JavaScript代碼。
同時,Chrome通過Metro連接運(yùn)行在設(shè)備上的Hermes,所以我們需要知道Metro監(jiān)聽的端口。通常,默認(rèn)的監(jiān)聽地址是localhost:8081,不過這都是可以配置的。當(dāng)運(yùn)行yarn啟動時,該地址在啟動時被寫入stdout。
一旦我們知道了Metro服務(wù)器監(jiān)聽的端口,接下來就可以使用以下步驟連接Chrome:
- 在Chrome瀏覽器中輸入chrome://inspect。
- 然后在Chrome瀏覽器中輸入localhost:8081開啟調(diào)試。
現(xiàn)在,會看到一個帶有“inspect”鏈接的“Hermes React Native”目標(biāo),可以用來調(diào)出調(diào)試器;如果沒有看到“inspect”鏈接,請確保Metro服務(wù)器正在運(yùn)行。
現(xiàn)在,我們就可以使用Chrome調(diào)試工具進(jìn)行代碼調(diào)試了,如下圖所示。
以上就是詳解React Native項(xiàng)目中啟用Hermes引擎的詳細(xì)內(nèi)容,更多關(guān)于React Native啟用Hermes引擎的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React中進(jìn)行條件渲染的實(shí)現(xiàn)方法
React是一種流行的JavaScript庫,它被廣泛應(yīng)用于構(gòu)建Web應(yīng)用程序,在React中,條件渲染是一個非常重要的概念,它允許我們根據(jù)不同的條件來呈現(xiàn)不同的內(nèi)容,在本文中,我們將探討React如何進(jìn)行條件渲染,需要的朋友可以參考下2023-11-11使用React和Redux Toolkit實(shí)現(xiàn)用戶登錄功能
在React中,用戶登錄功能是一個常見的需求,為了實(shí)現(xiàn)該功能,需要對用戶輸入的用戶名和密碼進(jìn)行驗(yàn)證,并將驗(yàn)證結(jié)果保存到應(yīng)用程序狀態(tài)中,在React中,可以使用Redux Toolkit來管理應(yīng)用程序狀態(tài),從而實(shí)現(xiàn)用戶登錄功能,需要詳細(xì)了解可以參考下文2023-05-05React如何利用Antd的Form組件實(shí)現(xiàn)表單功能詳解
這篇文章主要給大家介紹了關(guān)于React如何利用Antd的Form組件實(shí)現(xiàn)表單功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04antd之RangePicker設(shè)置默認(rèn)值方式
這篇文章主要介紹了antd之RangePicker設(shè)置默認(rèn)值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12React.js入門實(shí)例教程之創(chuàng)建hello world 的5種方式
React 是近期非常熱門的一個前端開發(fā)框架。應(yīng)用非常廣泛,接下來通過本文給大家介紹React.js入門實(shí)例教程之創(chuàng)建hello world 的5種方式 ,需要的朋友參考下吧2016-05-05使用React實(shí)現(xiàn)一個簡單的待辦事項(xiàng)列表的示例代碼
這篇文章我們將詳細(xì)講解如何建立一個這樣簡單的列表,文章通過代碼示例介紹的非常詳細(xì),對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-08-08React Native使用Modal自定義分享界面的示例代碼
本篇文章主要介紹了React Native使用Modal自定義分享界面的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10