Android原生嵌入React Native詳解
1.首先集成的項目目錄
我使用的是直接按照react-native init Project 的格式來導入的,也就是說,我的Android項目目錄是跟node_modules是在一個目錄下的。
我們init完項目之后,項目初始化完成了,這時候我們可以用命令react-native run-android直接運行項目,至于怎么調(diào)試,之前已經(jīng)說過。
說一下我們怎么開發(fā)和運行分開吧,我們開發(fā)一般會選擇webstrom,開發(fā)后我們會Android和ios的編譯分開。




啟動npm
下面說一下android 嵌入RN環(huán)境吧。
編寫Android原生代碼,用來調(diào)用RN
package com.reactdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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 MainActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler {
private ReactInstanceManager mReactInstanceManager;
private ReactRootView mReactRootView;
@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, "ReactDemo", null);
setContentView(mReactRootView);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) {
mReactInstanceManager.showDevOptionsDialog();
return true;
}
return super.onKeyUp(keyCode, event);
}
@Override
public void onBackPressed() {
if (mReactInstanceManager != null) {
mReactInstanceManager.onBackPressed();
} else {
super.onBackPressed();
}
}
@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);
}
}
}
注意要加上網(wǎng)絡等一些權(quán)限。
創(chuàng)建package.json,添加react native包
使用命令npm init,跟著步驟走就好了,給大家截個圖:

最后你就可以在你的RN項目里面看到一個package.json。

運行Demo
注:可能會出現(xiàn)java.lang.RuntimeException: Could not get BatchedBridge, make sure your bundle is packaged correctly這個錯誤,react-native bundle —platform android —dev false —entry-file index.android.js —bundle-output ReactDemo/app/src/main/assets/index.android.bundle —sourcemap-outpu ReactDemo/app/src/main/assets/index.android.map —assets-dest ReactDemo/app/src/main/res/
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android仿XListView支持下拉刷新和上劃加載更多的自定義RecyclerView
這篇文章主要介紹了仿XListView支持下拉刷新和上劃加載更多的自定義RecyclerView的實例代碼,非常不錯,具有參考價值,感興趣的朋友可以參考下2016-05-05
Kotlin 實現(xiàn)按鈕點擊跳轉(zhuǎn)監(jiān)聽事件方式
這篇文章主要介紹了Kotlin 實現(xiàn)按鈕點擊跳轉(zhuǎn)監(jiān)聽事件方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android CheckBox中設置padding無效解決辦法
這篇文章主要介紹了Android CheckBox中設置padding無效解決辦法的相關資料,希望通過本文能幫助到大家,讓大家解決這樣類似的問題,需要的朋友可以參考下2017-10-10
Android實現(xiàn)網(wǎng)易嚴選標簽欄滑動效果
這篇文章主要為大家詳細介紹了Android實現(xiàn)網(wǎng)易嚴選標簽欄滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07

