融合react native到自己新建的安卓項目中

? ? ? ?? 在我們對一個新事物沒有想法,或者對其完全處于空白狀態(tài)時,最好的方法是類比,怎么類比呢?經(jīng)過上一節(jié)的內容我們已經(jīng)能輕松的跑起來一個簡單的react native的工程,還記得這張截圖嗎?

react native項目目錄結構

?? 我們現(xiàn)在拿這張rn項目的結構與我們新建的android項目結構進行類比一下:

Android項目目錄結構

??? 經(jīng)過簡單的類比,會發(fā)現(xiàn),我們的安卓項目里比RN項目少幾個文件,那么這幾個文件哪些才是支撐起RN項目跑起來的文件呢。這當然不是瞎猜就能想出來的,接下來請移步react native的官網(wǎng)Integration With Existing Apps:integration with existing app, 大家完全可以按照官方介紹的來一步一步的走,但是這樣,我不就裝逼失敗了嗎。諸君請看官方給的融合項目的命令:

command ‘s integration with app

?npm init?? 該命令是為了創(chuàng)建package.json文件,

npm install--save react react-native?? 該命令為了安裝node_modules這個庫

curl-o.flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig 該命令是為了安裝.flowconfig .

在package.json文件的上scripts標簽下加入"start":"node node_modules/react-native/local-cli/cli.js start",是為了可以在項目中使用npm命令,比如用npm啟動package服務器,或者進行對js文件進行打本地的bundle文件等。

最后那個就不用說了吧,在項目根目錄下加入js文件。這樣就明了了,原來我們原生項目支持RN只需要添加以下文件

要添加的文件

????? 經(jīng)過上一節(jié)我們已經(jīng)擁有一個helloword的rn項目,我們將這些文件直接copy到原生項目中。

????? 補充:這樣就會讓項目局限在某個react native的版本,這是我們不想看到的,假如我們的客戶就要求0.40的RN版本怎么辦,打開package.json看這塊

package.json的script

??? ?? 我們的react - native的版本原來是在此處定義的,將它修改成你需要的版本,? 在我們目前混合完成的項目的根目錄下 啟動命令npm? install 安裝對應版本的node_modules。

? ? ?? 準備工作完成后,還有兩個問題得解決 1、配置gradle文件讓我們的代碼能依賴到react native的庫 ,2、建立RN入口來顯示RN頁面。我們知道h5網(wǎng)頁在我們Android項目中跑起來是通過webview顯示。同理,我們RN也有一個ReactRootView來支持。

?????? gradle配置:在Android studio工程中的gradle文件,有module的gradle,同時也有project的gradle。module中build.gradle的配置信息如下:

dependencies{...compile"com.facebook.react:react-native:+"http:// From node_modules.}

?????? project中的build.gradle配置信息如下:

allprojects{repositories{...maven{// All of React Native (JS, Android binaries) is installed from npmurl"$rootDir/node_modules/react-native/android"}}...}//此處注意rootDir的路徑,保證能引到node_moduls正確的路徑

在 清單文件AndroidManifest.xml中加入聯(lián)網(wǎng)權限。

??????? 創(chuàng)建入口ReactRootView的activity:(此處直接上截圖,具體信息請查看文章末尾的源碼鏈接)

??

RN入口activity

? ? 同時加上ReactInstanceManager 的生命周期

ReactInstanceManager生命周期

看到我畫圈的地方了嗎,這是ReactRootView配置入口,畫圈的地方是index.android.js(index.ios.js)里面AppRegistry注冊的class,依然是上截圖。

js注冊的組件

? 再次提醒,將兩個文件中的名字保持一致,接下來就是上一節(jié)的內容了,用npm開啟packager服務,啟動app,加載RN頁面。

關于打bundle方式加載JS文件,我們將放到下一節(jié)內容,最后附上本篇文章的源碼鏈接,效果運行圖如下:???????????

效果運行圖

源碼下載-----------------------------------------------sourcecode?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容