React-Native之Android:植入原生應用

?基于官方文檔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上看到具體的錯誤信息菩佑。這在解決一些紅屏問題時很有用自晰。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市稍坯,隨后出現(xiàn)的幾起案子酬荞,更是在濱河造成了極大的恐慌,老刑警劉巖瞧哟,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件混巧,死亡現(xiàn)場離奇詭異,居然都是意外死亡绢涡,警方通過查閱死者的電腦和手機牲剃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雄可,“玉大人,你說我怎么就攤上這事缠犀∈唬” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵辨液,是天一觀的道長虐急。 經(jīng)常有香客問我,道長滔迈,這世上最難降的妖魔是什么止吁? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮燎悍,結(jié)果婚禮上敬惦,老公的妹妹穿的比我還像新娘。我一直安慰自己谈山,他們只是感情好俄删,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般畴椰。 火紅的嫁衣襯著肌膚如雪臊诊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天斜脂,我揣著相機與錄音抓艳,去河邊找鬼。 笑死帚戳,一個胖子當著我的面吹牛壶硅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播销斟,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼庐椒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚂踊?” 一聲冷哼從身側(cè)響起约谈,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎犁钟,沒想到半個月后棱诱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡涝动,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年迈勋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醋粟。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡靡菇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出米愿,到底是詐尸還是另有隱情厦凤,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布育苟,位于F島的核電站较鼓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏违柏。R本人自食惡果不足惜博烂,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漱竖。 院中可真熱鬧禽篱,春花似錦、人聲如沸闲孤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肥照,卻和暖如春脚仔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舆绎。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工鲤脏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吕朵。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓猎醇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親努溃。 傳聞我的和親對象是個殘疾皇子硫嘶,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容