? ? ? ?? 在我們對一個新事物沒有想法,或者對其完全處于空白狀態(tài)時,最好的方法是類比,怎么類比呢?經(jīng)過上一節(jié)的內容我們已經(jīng)能輕松的跑起來一個簡單的react native的工程,還記得這張截圖嗎?
?? 我們現(xiàn)在拿這張rn項目的結構與我們新建的android項目結構進行類比一下:
??? 經(jīng)過簡單的類比,會發(fā)現(xiàn),我們的安卓項目里比RN項目少幾個文件,那么這幾個文件哪些才是支撐起RN項目跑起來的文件呢。這當然不是瞎猜就能想出來的,接下來請移步react native的官網(wǎng)Integration With Existing Apps:integration with existing 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看這塊
??? ?? 我們的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:(此處直接上截圖,具體信息請查看文章末尾的源碼鏈接)
??
? ? 同時加上ReactInstanceManager 的生命周期
看到我畫圈的地方了嗎,這是ReactRootView配置入口,畫圈的地方是index.android.js(index.ios.js)里面AppRegistry注冊的class,依然是上截圖。
? 再次提醒,將兩個文件中的名字保持一致,接下來就是上一節(jié)的內容了,用npm開啟packager服務,啟動app,加載RN頁面。
關于打bundle方式加載JS文件,我們將放到下一節(jié)內容,最后附上本篇文章的源碼鏈接,效果運行圖如下:???????????

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