Android項(xiàng)目集成react native就這幾步

沒事做個(gè)記錄, 也算是溫故而知新吧.

背景: 現(xiàn)已有一個(gè)名為demo1031的安卓原生項(xiàng)目, 要添加react-native進(jìn)來實(shí)現(xiàn)一部分功能.

效果如下, 第一個(gè)頁面是原生頁面, 第二個(gè)頁面是react-native頁面.

實(shí)例gif

步驟:

  1. app\build.gradledependencies標(biāo)簽下添加: compile "com.facebook.react:react-native:+";

  2. app\build.gradleandroid標(biāo)簽下添加: configurations.all { resolutionStrategy.force 'com.google.code.findbugs:jsr305:+' }

  3. app\build.gradleandroid\defaultConfig標(biāo)簽下添加: ndk { abiFilters "armeabi-v7a", "x86" }

  4. build.gradleallprojects\repositories標(biāo)簽下添加: maven { url "$rootDir/reactnative/node_modules/react-native/android" }

  5. gradle.properties內(nèi)添加: android.useDeprecatedNdk=true

  6. 創(chuàng)建一個(gè)activity文件RNActivity:

    public class RNActivity extends ReactActivity {
    
        @Nullable
        @Override
        protected String getMainComponentName() {
            return "demo1031";
        }
    }
    
  7. 創(chuàng)建一個(gè)Application文件RNApplication:

    public class RNApplication extends Application implements ReactApplication {
        private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
            @Override
            public boolean getUseDeveloperSupport() {
                return BuildConfig.DEBUG;
            }
    
            @Override
            protected List<ReactPackage> getPackages() {
                return Arrays.<ReactPackage>asList(
                        new MainReactPackage()
                );
            }
    
        };
    
        @Override
        public ReactNativeHost getReactNativeHost() {
            return mReactNativeHost;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            SoLoader.init(this,false);
        }
    }
    
  8. AndroidManifest.xml內(nèi)指定application路徑android:name=".RNApplication"

  9. 在項(xiàng)目目錄下創(chuàng)建reactnative文件夾, 在reactnative文件夾創(chuàng)建package.json文件:

    {
        "name": "reactnative",
        "version": "0.0.1",
        "private": true,
        "scripts": {
            "start": "node node_modules/react-native/local-cli/cli.js start",
            "test": "jest"
        },
        "dependencies": {
            "react": "16.0.0-beta.5",
            "react-native": "0.49.5"
        },
        "devDependencies": {
            "babel-jest": "21.2.0",
            "babel-preset-react-native": "4.0.0",
            "jest": "21.2.1",
            "react-test-renderer": "16.0.0-beta.5"
        },
        "jest": {
            "preset": "react-native"
        }
    }
    
  10. reactnative文件夾創(chuàng)建index.android.js文件:

    import React, { Component } from 'react';
    import {
      AppRegistry,
      StyleSheet,
      Text,
      View,
      Button
    } from 'react-native';
    
    export default class Index extends Component {
      _onPress() {
        alert("我是react-native彈窗");
      }
      
      render() {
        return (
          <View style={styles.container}>
            <Button title="Button" color="#ff8500" onPress={()=> this._onPress()}/>
          </View>
        );
      }
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
      },
    });
    
    AppRegistry.registerComponent('reactnative', () => Index);
    
  11. 在項(xiàng)目目錄文件夾reactnative下執(zhí)行命令npm i, 然后再npm start

  12. 使用Android studio運(yùn)行項(xiàng)目, ok, 收工!


假如報(bào)錯(cuò): Unable to load script from assets 'index.android.bundle'..., 可以在項(xiàng)目main文件夾下新建文件夾assets, 然后在reactnative下運(yùn)行命令: react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output ../app/src/main/assets/index.android.bundle --assets-dest ../app/src/main/res/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邢锯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矾瑰,更是在濱河造成了極大的恐慌,老刑警劉巖呀忧,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹉勒,死亡現(xiàn)場離奇詭異迹栓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)僧免,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門刑赶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人懂衩,你說我怎么就攤上這事撞叨。” “怎么了浊洞?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵牵敷,是天一觀的道長。 經(jīng)常有香客問我法希,道長枷餐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任苫亦,我火速辦了婚禮毛肋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屋剑。我一直安慰自己润匙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布唉匾。 她就那樣靜靜地躺著孕讳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪巍膘。 梳的紋絲不亂的頭發(fā)上厂财,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音峡懈,去河邊找鬼璃饱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛逮诲,可吹牛的內(nèi)容都是我干的帜平。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼梅鹦,長吁一口氣:“原來是場噩夢啊……” “哼裆甩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起齐唆,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤嗤栓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后箍邮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茉帅,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年锭弊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堪澎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡味滞,死狀恐怖樱蛤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情剑鞍,我是刑警寧澤昨凡,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蚁署,受9級特大地震影響便脊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜光戈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一哪痰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧久妆,春花似錦妒御、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奸笤,卻和暖如春惋啃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背监右。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工边灭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人健盒。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓绒瘦,卻偏偏與公主長得像称簿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子惰帽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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