在Windows上將ReactNative集成到現有的Android項目

 

React Natvie的官方文檔的 Integrating with Existing Apps 已經很詳細地教咱們如何將React Natvie集成到如今的Android項目。我根據官方文檔的步驟,在Windows上將React Native集成到現有的Android的過程記錄下來。html

集成到Android項目的要求:react

首先,建立一個Android的項目(這裏用來模擬現有的Andorid項目)android

image

在現有的Android的build.gradle文件中增長React Natvie的依賴git

image

點擊Maven Central 查看React Natvie的最新版本,這裏的最新版本已是0.18.0了。github

image

在build.gradle文件中加入 compile 'com.facebook.react:react-native:0.18.+'  。npm

image

在AndroidManifest.xml加入訪問網絡的權限json

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

 

image 
 
將下面的代碼複製到項目中(記得在AndroidManifest.xml註冊該類)

public class MyReactActivity extends Activity implements DefaultHardwareBackBtnHandler {

    public static void launch(Activity activity){
        Intent intent = new Intent(activity, MyReactActivity.class);
        activity.startActivity(intent);
    }

    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, "MyAwesomeApp", null);

        setContentView(mReactRootView);
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (mReactInstanceManager != null) {
            mReactInstanceManager.onResume(this, this);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (mReactInstanceManager != null) {
            mReactInstanceManager.onPause();
        }
    }

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


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

 

接下來,就要將JS增長到現有的項目
image 
在項目的根目錄打開命令行(切換到根目錄,按住Shift,右擊就會出現‘在此處打開命令窗口’)
image 
輸入npm init,竟然彈這些玩意出來(靠),一開始我覺得出錯了,後來是才知道是填東西的(生成package.json這個文件的)
機智的我在name那裏輸入了括號後面的文字,彈出下面的錯誤(不可以大寫的),而後將括號的文字所有輸入小寫就能夠了。
image 
基本按括號後面的提示填就能夠了,最後就在項目的根目錄生成package.json這個文件。
image 
最後提示Is this ok? 輸入yes
image 
 
而後,輸入npm install --save react-native
這裏須要等待……
image 
下載完了
image 
接下來,輸入curl -o .flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig
回車竟然彈出curl不是內部命令。(百度一查curl是Linux系統的小工具的用來下載文件的,Windows沒有這個工具)
image 
這裏咱們分析一下這個命令的做用。從https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig下載文件而且文件名爲.flowconfig。
image 
那咱們就用其餘的下載工具下載這個文件放到根目錄不就能夠了嗎。(不用執行上面那個命令)
這裏我用360極速瀏覽器新建下載任務將連接複製到下載任務那裏。(記住文件爲.flowconfig)
image 
下載後放到根目錄下
image 
可能有人會問不能從其餘的項目.flowconfig複製過來麼?理論上是能夠的,左邊是其餘項目的,右邊是剛下載,在文件的最下面能夠看出版本不同了。因此建議下載最新.flowconfig文件。
image 
 
接着,輸入react-native start啓動服務,發現報錯了(package.json解析不了)。
image 
打開package.json將test這行刪掉,而後保存。
image 
再運行react-native start,能夠看到服務已啓動,端口爲8081。
image 
在瀏覽器輸入地址:http://localhost:8081/index.android.bundle?platform=android
若是能夠打開,則證實服務無問題了。
image 
最後輸入gradlew installDebug命令運行項目。
image 
個人現有項目的minSdkVersion爲15,而react natvie的0.18.0版本須要minSdkVersion爲16.這裏將minSdkVersion修改成16後再運行。
image 
 編譯成功了。
image
(若是用真機調試能夠先閱讀上一篇文章)

5F27D13C7B79AED9F1B3F4EE79DC486E

 

附:
項目的GitHub地址:https://github.com/zhonghanwen/MyAwesomeApp
相關文章
相關標籤/搜索