?基于官方文檔http://reactnative.cn/docs/embedded-app-android.html#content
由于官方文檔語焉不詳号显,一些詳細步驟沒有配置好的話很容易植入失敗跳芳,這里工具是AS,我是在Mac上做的嗤堰,,嘗試并且最終成功了伪冰。
React植入原生應用步驟:(注意是Mac上的揍堰,windows尚未嘗試)
步驟1: ?植入前提
一個已有的、基于gradle構(gòu)建的Android應用
Node.js诗轻,參見官方文檔了解相關的設置操作钳宪。(環(huán)境是否配置好的檢驗標準是能否成功初始化一個RN工程并運行在手機上)
步驟2: 在App里添加依賴和權限
在App里的build.gradle文件中(不是project目錄下那個build.gradle),添加React Native依賴:
compile 'com.facebook.react:react-native:0.18.+'
盡量選擇React Native庫的最新穩(wěn)定版本扳炬。
然后吏颖,在AndroidManifest.xml里增加Internet訪問權限:
步驟3: 添加原生代碼,即以React為View的Activity
官方文檔目前是0.18版本以前的恨樟,我這里按照0.18版本的(基本一樣的半醉,只是官方又進一步封裝給我們用)
新建MyReactActivity,繼承ReactActivity,代碼如下劝术。
只有三個抽象方法需要實現(xiàn)缩多,默認是返回null,需要修改养晋。
public class MyReactActivity? extends ReactActivity{
@Override
protected String getMainComponentName() {
return "myreactactivity";? //注冊的react組件名衬吆,一會在JS里要用到
}
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG; // Debug模式,這個模式才能在JS里作調(diào)試
}
@Override
protected List getPackages() {
return Arrays.asList(
new MainReactPackage()
);? //返回帶有官方已有的package的集合
}
}
由于是Activity绳泉,需要建立完畢后在AndroidManifest.xml里注冊逊抡。
此外,也要注冊另外一個開發(fā)菜單Activity(官方API)零酪,否則不能調(diào)出開發(fā)設置界面
<activity android:name=".MyReactActivity"
android:screenOrientation="portrait"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize" />
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
步驟4: 添加React環(huán)境
打開控制臺冒嫡,在當前工程根目錄里執(zhí)行(AS直接點擊下面的控制臺就可以)
npm init
會有提示麦射,說執(zhí)行 npm help json可以查看下面具體屬性的定義 和npm install --save可以生成包。
注意:就算有需要灯谣,也不要馬上輸入這兩個命令來做潜秋,輸了也不會有作用,因為下面已經(jīng)開始要你輸入name屬性了胎许。
然后會要求依次輸入name,version,description,main,test command,author,license等屬性峻呛。
這是要生成的package.json里的內(nèi)容。具體該怎么填寫辜窑,建議control + C 退出當前命令后執(zhí)行 npm help json钩述,
然后把這個幫助說明文檔一點點全部復制下來(不大),大致看看注意要點穆碎,后面填寫時不明白的就查查看牙勘。
需要提示一點是這些屬性有的不能隨便寫,否則構(gòu)建不成功所禀。
我的那些屬性最終如下方面,有些是根據(jù)自己的React模塊填寫的,有的是根據(jù)剛才那個幫助文檔填寫的色徘。
{
"name": "myreactactivity",
"version": "0.0.1",
"description": "this is the package.json",
"main": "index.js",
"scripts": {
"start": "node_modules/react-native/packager/packager.sh" //這個是后面添加的
},
"repository": {
"type": "git",
"url": "git+https://github.com/npm/npm.git"
},
"author": "patrick",
"license": "ISC",
"bugs": {
"url": "https://github.com/npm/npm/issues"
},
"homepage": "https://github.com/npm/npm#readme",
"dependencies": {
"react-native": "^0.18.1"
}
}
然后再在控制臺里執(zhí)行
npm install --save react-native
會下載nodejs和RN等的依賴恭金。
執(zhí)行完以后控制臺應該不會出現(xiàn)WARN信息,若出現(xiàn)的話很可能就是構(gòu)建不成功(可以繼續(xù)往下操作步驟褂策,不行的話就是這一步?jīng)]成功)横腿,
若的確構(gòu)建不成功,很大可能是上面的package.json的有些屬性填寫不正確斤寂。需要重新npm init耿焊。
繼續(xù)在控制臺執(zhí)行
curl -o .flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig
現(xiàn)在打開新創(chuàng)建的package.json文件然后在scripts字段下添加如下內(nèi)容:
"start": "node_modules/react-native/packager/packager.sh" // 我的上面已經(jīng)有的就是在這一步添加的
步驟5: 添加JS代碼
在project目錄下(也就是package.json所在目錄)新建名為index.android.js的JS文件,在里面拷貝如下內(nèi)容
'use strict';
var React = require('react-native');
var {
Text,
View
} = React;
class myreactactivity extends React.Component {
render() {
return (
Hello, World
)
}
}
var styles = React.StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
},
hello: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
});
React.AppRegistry.registerComponent('myreactactivity', () => myreactactivity);
這就是個JS文件遍搞,會ReactJS的可以隨便寫了罗侯,只要引入的組件名對的上就好。
步驟6: 添加安卓關聯(lián)代碼
上面的新建的MyReactActivity可以設置為入口activity尾抑,也可以設置為普通activity歇父。
如果打算設置為入口activity的話,就在清單文件里自己配置就可以再愈,不需要額外代碼榜苫;
如果打算設置為普通acitivity,就按正常原生activity一樣配置和用代碼啟動就好。
總結(jié)一句話就是:啟動和加載這個MyReactActivity按照原生Activity一樣配置和加載就好翎冲。
步驟7: 運行應用
先在工程目錄下啟動JS服務器垂睬,在控制臺運行
npm start
然后啟動APP,用AS的正常Run就可以。
第一次到MyReactActivity界面肯定是紅屏驹饺,需要搖出開發(fā)菜單設置IP和端口钳枕,然后Reload JS就行。
正常情況下現(xiàn)在可以看到Hello World了赏壹。
如果還是紅屏的話就需要看看顯示的錯誤是啥并且針對修改了鱼炒。
PS:用Mac的話有個找原因的小竅門,打開Xcode(沒有的話需要下載蝌借,免費的)昔瞧,在手機上運行RN時,出錯的信息可以在Xcode上看到具體的錯誤信息菩佑。這在解決一些紅屏問題時很有用自晰。