android程序加入react-native支持

官方文檔

個人實踐

  • 用android studio創(chuàng)建一個基本的android hello world程序


    2016-09-28_172701.png
  • 在項目根目錄中通過npm向導生成package.json文件,在cmd中輸入命令:
    npm init

    2016-09-28_173638.png

  • 在package.json文件中添加啟動腳本
    "start": "node node_modules/react-native/local-cli/cli.js start"

    2016-09-28_174027.png

  • 添加react-native npm依賴渐溶,在命令行輸入
    npm install react react-native --save

  • 創(chuàng)建index.android.js文件

import React from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';

class HelloWorld extends React.Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.hello}>Hello, World</Text>
      </View>
    )
  }
}
var styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
  },
  hello: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
});

AppRegistry.registerComponent('HelloWorld', () => HelloWorld);

  • 在你app的build.gradle文件中添加react native依賴庫


    2016-09-28_175004.png
  • 在你project的build.gradle文件中添加react native路徑


    2016-09-28_175125.png
  • 修改AndroidManifest.xml文件中添加權限
    <uses-permission android:name="android.permission.INTERNET" />

  • 添加AndroidReactActivity

package com.platform.ourplam.androidreacttest;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;

import com.facebook.react.LifecycleState;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactRootView;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.shell.MainReactPackage;

public class AndroidReactActivity extends Activity implements DefaultHardwareBackBtnHandler {
    private ReactRootView mReactRootView;
    private ReactInstanceManager mReactInstanceManager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        mReactRootView = new ReactRootView(this);
        mReactInstanceManager = ReactInstanceManager.builder()
                .setApplication(getApplication())
                .setBundleAssetName("index.android.bundle")
                .setJSMainModuleName("index.android")
                .addPackage(new MainReactPackage())
                .setUseDeveloperSupport(BuildConfig.DEBUG)
                .setInitialLifecycleState(LifecycleState.RESUMED)
                .build();
        mReactRootView.startReactApplication(mReactInstanceManager, "HelloWorld", null);


        setContentView(mReactRootView);
    }


    @Override
    public void invokeDefaultOnBackPressed() {
        super.onBackPressed();
    }


    @Override
    protected void onPause() {
        super.onPause();
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onHostPause();
        }
    }


    @Override
    protected void onResume() {
        super.onResume();
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onHostResume(this, this);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onHostDestroy();
        }
    }

    @Override
    public void onBackPressed() {
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onBackPressed();
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) {
            mReactInstanceManager.showDevOptionsDialog();
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }
}
  • build android項目否則上一步厂汗,代碼導入包會報錯


    2016-09-28_185145.png
  • 將AndroidReactActivity加入AndroidManifest.xml文件中

<activity
    android:name=".AndroidReactActivity"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.Dialog">
</activity>

  • 將DevSettingsActivity配置加入到AndroidManifest.xml文件中
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />

最終的AndroidManifest.xml文件內(nèi)容為

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.platform.ourplam.androidreacttest">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".AndroidReactActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.AppCompat.Light.Dialog">
        </activity>
        <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    </application>

</manifest>
  • 在MainActivity中添加Button,添加點擊事件啟動AndroidReactActivity
public class MainActivity extends AppCompatActivity {

    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = (Button) super.findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, AndroidReactActivity.class);
                startActivity(intent);
            }
        });
    }
}

  • 在命令行中輸入:npm start


    QQ截圖20160928191415.png
  • 啟動android程序


    0617B9760DBA2A9368D75155FE14B0DC.jpg

    674A73C4B407F69DA4716F9841B8EF1E.jpg

    EA81A6EDBAD0D41BE037E8737F548C3A.jpg
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氮昧,一起剝皮案震驚了整個濱河市框杜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袖肥,老刑警劉巖咪辱,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異椎组,居然都是意外死亡油狂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門寸癌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來专筷,“玉大人,你說我怎么就攤上這事蒸苇×子迹” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵溪烤,是天一觀的道長味咳。 經(jīng)常有香客問我,道長檬嘀,這世上最難降的妖魔是什么槽驶? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮枪眉,結果婚禮上捺檬,老公的妹妹穿的比我還像新娘。我一直安慰自己贸铜,他們只是感情好堡纬,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒿秦,像睡著了一般烤镐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棍鳖,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天炮叶,我揣著相機與錄音,去河邊找鬼渡处。 笑死镜悉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的医瘫。 我是一名探鬼主播侣肄,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼醇份!你這毒婦竟也來了稼锅?” 一聲冷哼從身側響起吼具,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎矩距,沒想到半個月后拗盒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡锥债,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年陡蝇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哮肚。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡毅整,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绽左,到底是詐尸還是另有隱情,我是刑警寧澤艇潭,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布拼窥,位于F島的核電站,受9級特大地震影響蹋凝,放射性物質發(fā)生泄漏鲁纠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一鳍寂、第九天 我趴在偏房一處隱蔽的房頂上張望改含。 院中可真熱鬧,春花似錦迄汛、人聲如沸捍壤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹃觉。三九已至,卻和暖如春睹逃,著一層夾襖步出監(jiān)牢的瞬間盗扇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工沉填, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疗隶,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓翼闹,卻偏偏與公主長得像斑鼻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子橄碾,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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