Android項目集成ReactNative(小白專用)Mac版

為了及時響應運營提出的需求,經(jīng)各方討論,決定把現(xiàn)有App的首頁,部分地方用ReactNative來實現(xiàn).前期的集成工作,已經(jīng)順利完成.
iOS端的App,采用cocoapod管理第三方庫的方式,實現(xiàn)方式比較簡單,網(wǎng)上正確教程很多.而Android集成中,需要注意的地方很多,而且網(wǎng)絡上大部分教程,省略了很多需要注意的細節(jié).剛剛開始Android學習的我,搜索不到詳細入微的合適教程,糾結了良久,記錄步驟如下.
首先,將npm創(chuàng)建項目的package.json文件和node_modules文件夾,拷貝到Android項目的根目錄下,省略使用npm命令創(chuàng)建文件和重新下載模塊的時間.文件層級如下圖:

文件層級

修改最外層的build.gradle文件,添加ReactNative的支持文件.

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        jcenter()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
    }
}

注意gradle:2.3.2版本號,要和Android Studio的版本一致(使用版本為2.3.2).
修改App文件夾內的build.gradle文件,修改用處說明如下圖:

build.gradle

具體代碼:

apply plugin: 'com.android.application'
apply from: "../../node_modules/react-native/react.gradle"

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.example.zhudong.rntest"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
    splits {
        abi {
            reset()
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
}
}

dependencies {
    compile "com.facebook.react:react-native:+" // From node_modules.
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
}

其中applicationId需要結合實際項目修改.注意,需要保證minSdkVersion最小值為16.
同步工程,可以在工程的External Libraries中看到添加成功的支持庫react-native.

react-native

在和MainActivity同一級下新建繼承至Application的類RNApplication,并實現(xiàn)接口ReactApplication.(包名和工程保持一致)

package com.example.zhudong.rntest;

import android.app.Application;

import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;

import java.util.Arrays;
import java.util.List;
/**
 * Created by zhudong on 2017/6/6.
 */

public class RNApplication extends Application implements ReactApplication {

    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
        @Override
        public boolean getUseDeveloperSupport() {
            return true;
        }

        @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);
    }
}

修改MainActivity繼承至ReactActivity,并實現(xiàn)尋找ReactNative模塊的方法,return后的名字,需要和index.android.js文件中導出的模塊名一致.

package com.example.zhudong.rntest;

import com.facebook.react.ReactActivity;

public class MainActivity extends ReactActivity {

    @Override
    protected String getMainComponentName() {
        return "navigation";
    }
}

最后在AndroidMainfest.xml中使用創(chuàng)建的RNApplication,并添加相應的權限.

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

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

    <application
        android:name=".RNApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    </application>

</manifest>

ok,到此就Android項目集成ReactNative已經(jīng)大功告成.
回到項目根目錄,用npm start命令啟動RN接口,然后運行Android項目,就能看到index.android.js文件中設置的界面了.
如果是Android真機調試,需要保證手機和電腦共用一個網(wǎng)絡,并將手機端口指向電腦的8081端口,設置參考React-Native開發(fā)(三)在Android真機上調試

iOS設備調試時,使用RN的Button控件點擊后,出現(xiàn)如下警告:

`useNativeDriver` is not supported because the native animated module is missing. Falling back to JS-based animation. To resolve this, add `RCTAnimation` module to this app, or remove `useNativeDriver`.

解決方式:react-native 調用 TouchableOpacity (觸摸透明) 時報了一個警告
遇到問題,請留言交流~

關注和喜歡都是對我的支持和鼓勵~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子皆撩,更是在濱河造成了極大的恐慌垃喊,老刑警劉巖铺敌,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舱痘,死亡現(xiàn)場離奇詭異,居然都是意外死亡护昧,警方通過查閱死者的電腦和手機莫其,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門癞尚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耸三,“玉大人,你說我怎么就攤上這事浇揩∫亲常” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵胳徽,是天一觀的道長积锅。 經(jīng)常有香客問我,道長膜廊,這世上最難降的妖魔是什么乏沸? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任淫茵,我火速辦了婚禮爪瓜,結果婚禮上,老公的妹妹穿的比我還像新娘匙瘪。我一直安慰自己铆铆,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布丹喻。 她就那樣靜靜地躺著薄货,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碍论。 梳的紋絲不亂的頭發(fā)上谅猾,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音鳍悠,去河邊找鬼税娜。 笑死,一個胖子當著我的面吹牛藏研,可吹牛的內容都是我干的敬矩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蠢挡,長吁一口氣:“原來是場噩夢啊……” “哼弧岳!你這毒婦竟也來了?” 一聲冷哼從身側響起业踏,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤禽炬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勤家,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腹尖,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年却紧,在試婚紗的時候發(fā)現(xiàn)自己被綠了桐臊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胎撤。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖断凶,靈堂內的尸體忽然破棺而出伤提,到底是詐尸還是另有隱情,我是刑警寧澤认烁,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布肿男,位于F島的核電站,受9級特大地震影響却嗡,放射性物質發(fā)生泄漏舶沛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一窗价、第九天 我趴在偏房一處隱蔽的房頂上張望如庭。 院中可真熱鬧,春花似錦撼港、人聲如沸坪它。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽往毡。三九已至,卻和暖如春靶溜,著一層夾襖步出監(jiān)牢的瞬間开瞭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工罩息, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嗤详,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓扣汪,卻偏偏與公主長得像断楷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子崭别,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容