簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732 ...
簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網
我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732981
【之前我寫過一些列關於expo和rn入門配置的東i西,大家可以點擊這裡查看:從零學習rn開發】
相關文章:
Expo大作戰(一)--什麼是expo,如何安裝expo clinet和xde,xde如何使用
Expo大作戰(二)--expo的生命周期,expo社區交流方式,expo學習必備資源,開發使用expo時關註的一些問題
Expo大作戰(三)--針對已經開發過react native項目開發人員有針對性的介紹了expo,expo的局限性,開發時項目選型註意點等
Expo大作戰(四)--快速用expo構建一個app,expo中的關鍵術語
Expo大作戰(五)--expo中app.json 文件的配置信息
Expo大作戰(六)--expo開發模式,expo中exp命令行工具,expo中如何查看日誌log,expo中的調試方式
Expo大作戰(七)--expo如何使用Genymotion模擬器
Expo大作戰(八)--expo中的publish以及expo中的link,對link這塊東西沒有詳細看,大家可以來和我交流
接下來就開始擼碼
已經使用React Native?
本指南旨在為那些已經使用React Native的開發者提供一些關鍵概念,資源和使用Expo時遇到的差異的簡要概述。
什麼是expo?
Expo提供了一個共用的本地運行時,所以你不用編寫本地代碼,你專註於用JavaScript編寫你的React應用程式。您不必擔心iOS或Android的特定設置,甚至不必打開Xcode。 Expo擁有自己的工作流程,包括一個名為XDE的應用程式和命令行界面,使開發和部署變得輕鬆。如果您曾升級過React Native或本地模塊,只需更改版本號,即可享受expo無縫完成此功能的功能。
Expo通過提供由團隊維護的額外的經過測試的模塊擴展了React Native平臺。這意味著你花更少的時間配置和更多的時間建立。
如果你曾經經歷過升級模塊或安裝諸如react-native-maps之類的問題,那麼當事情正常時,你會明白的。
expo還提供OTA(空中下載||熱更新)更新和推送通知服務。
如果您曾經遇到過在應用程式中發現拼寫錯誤並需要等待Apple批准更改的情況,那麼您會欣賞OTA更新 - 只要運行exp發佈,就會顯示這些更改!你也不限於文本,這也適用於圖像和配置更新等資產!
無需重新構建或重新部署您的應用到應用和Play商店。這就像Code Push,如果你以前使用過。但是有一些限制。閱讀有關這裡的人。
Expo提供了一個我們稱之為清單的共用配置文件。通常,您需要更新Xcode plist或Android Studio xml文件以處理更改。例如,如果你想鎖定屏幕方向,改變你的圖標,自定義你的啟動畫面或添加/刪除許可權,你會在app.json中做一次,它將適用於兩者。
您通常在Xcode / plist文件或Android studio / xml文件中執行的配置通過app.json處理。例如,如果您想要鎖定方向,更改圖標,自定義初始屏幕,添加/刪除許可權和權利(在獨立應用程式中),請為Google地圖和其他服務配置密鑰,您可以在app.json中進行設置。請參閱此處的指南。
藉助expo,您可以在expo客戶端(可在App / Play商店中使用)工作的同時,與世界上任何地方的任何人分享您的應用程式。掃描二維碼,或輸入電話號碼,我們會向您發送一個鏈接,將您的應用程式立即載入到您的設備上。
無需通過iTunes連接註冊幾個外部測試人員,您可以輕鬆讓他們下載expo客戶端應用程式,並立即在手機上提供工作版本。
我們討論我們在app.json中設置的許可權,但也有Permissions Api。 app.json中的許可權旨在被Android獨立應用程式用於相機訪問,地理定位,指紋等。另一方面,許可權Api用於在運行時請求和驗證訪問許可權。它提供了一個簡單的API來詢問您的用戶推送通知,位置,相機,錄音和聯繫人。
expo如何運作?
由於您使用Javascript編寫代碼,因此我們將其捆綁在一起併在S3中提供。每當您發佈您的應用程式時,我們都會更新這些資源,然後將它們推送到您的應用程式,以便始終獲得最新版本。在expo上開發
應用程式預設通過隧道服務從我們的exp / XDE提供服務(我們目前使用ngrok) - 這意味著您不必將設備連接到電腦,甚至不必連接到同一個房間或國家(或行星?我猜它應該從空間開始)作為開發機器,並且您仍然可以實時重新載入,使用熱模塊重新載入,啟用遠程JS調試,以及您可以通過React Native正常執行的所有事情。有一點需要註意的是,使用隧道比使用區域網地址或本地主機要慢一點,所以如果可以的話,你應該使用區域網或本地主機。看看如何在exp / XDE中配置它。Expo將您的設備日誌傳輸到exp和XDE,因此您不需要運行adb logcat或iOS等價物 - 來自任何連接到您的應用的設備的console.log / warn /錯誤消息將自動顯示在您的exp / XDE日誌視窗。
expo不能做什麼
- 有時expo不提供您可能需要的本地模塊或API的訪問許可權。在這種情況下,您可以分離並使用ExpoKit。這使您可以繼續使用Expo的基礎,但允許您創建和使用任何自定義本機模塊。
- 閱讀更多關於分離的信息
部署到App / Play商店
當你準備好後,你可以運行exp build:ios或者exp build:android和Expo會構建你的應用並輸出一個鏈接到你需要提交的二進位文件。然後,您可以使用類似Application Loader for iOS的應用程式,或直接上傳適用於Android的APK。如果您更願意在自己的機器上構建應用程式,則可以按照以下步驟操作。
有用的工具和資源
直接從您的瀏覽器測試和分享Expo功能的最佳方式。將手機指向QR代碼,您可以在瀏覽器中創建沙箱環境,並直接在設備上進行測試。
如果有什麼你不明白或想瞭解更多的信息,這是一個很好的開始。
從expo團隊或社區獲得幫助的最快途徑
Expo Client和SDK都是開源的。如果您想解決某些問題,或者想知道我們如何實現我們的本地模塊,歡迎您親自查看代碼!
Useful Commands
在expo開發時,您可以選擇使用命令行工具。以下是我們的一些朋友最喜歡的命令和工作流程:
- exp start -c --localhost --ios
- 啟動expo伺服器,清除緩存,只載入本地主機併在iOS模擬器上打開
- exp start --tunnel
- 啟動expo伺服器(不要清除緩存)併在隧道上運行expo,以便與任何人分享!
- exp發送2245551234
- 發送一個鏈接到朋友的電話號碼,以便他們可以在手機上查看我正在處理的內容
為什麼不用expo(Why not Expo?)
expo尚未準備好用於所有應用程式。有很多情況下,目前的限制可能不適合您的項目。本文檔的目的是概述其中的一些情況,以便您最終不會在expo上構建應用程式,並且在遇到障礙時無法剋服障礙,無需分離到ExpoKit或彈出使用React Native沒有expo。我們正在計劃或積極致力於構建下列所有功能的解決方案,如果您認為缺少任何內容,請通過張貼到我們的功能請求委員會來提請我們註意。Expo應用程式不支持後臺代碼執行(當應用程式沒有預先安裝或設備正在睡眠時運行代碼)。這意味著您不能使用後臺地理位置,在後臺播放音頻,在後臺處理推送通知等等。這是一個正在進行的工作。
Expo支持很多設備API(查看邊欄中的“SDK API參考”),但並非所有iOS和Android API都可以在Expo中使用:需要藍牙?對不起,我們還沒有建立它的支持的WebRTC?不完全的。我們不斷添加新的API,因此如果我們現在沒有您需要的東西,您可以使用ExpoKit或關註我們的博客,查看我們每月SDK更新的發佈說明。
如果你需要保持你的應用程式(包)的規模非常小,expo可能不是最好的選擇。 iOS上的expo應用大小約為25mb,Android大約為20mb。這是因為expo包括一堆API,而不管你是否使用它們 - 這可以讓你推動空氣更新(熱更新)以使用新的API,但是以二進位大小為代價。我們將在未來對此進行定製,以便您可以減小二進位文件的大小。
如果您知道您希望使用特定的推送通知服務(例如OneSignal)而不是expo的推送通知服務/ API,則您需要使用ExpoKit或React Native,而無需使用expo。
expo團隊,真誠的向我們列出了expo的局限性,以及expo的有點,我們在項目選型的時候,也需要仔細斟酌!
下一張繼續介紹,這一篇主要介紹了:針對已經開發過react native項目開發人員有針對性的介紹了expo,expo的局限性,開發時項目選型註意點等!歡迎大家關註我的微信公眾號,這篇文章是否被大家認可,我的衡量標準就是公
眾號粉絲增長人數。歡迎大家轉載,但必須保留本人博客鏈接!