Android原生嵌入React Native詳解_Android

來源:互聯網
上載者:User

1.首先整合的項目目錄

我使用的是直接按照react-native init Project 的格式來匯入的,也就是說,我的Android項目目錄是跟node_modules是在一個目錄下的。

我們init完項目之後,項目初始化完成了,這時候我們可以用命令react-native run-android直接運行項目,至於怎麼調試,之前已經說過。

說一下我們怎麼開發和運行分開吧,我們開發一般會選擇webstrom,開發後我們會Android和ios的編譯分開。



啟動npm

下面說一下android 嵌入RN環境吧。

編寫Android原生代碼,用來調用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);  } }}

注意要加上網路等一些許可權。

建立package.json,添加react native包

使用命令npm init,跟著步驟走就好了,給大家截個圖:


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


運行Demo

註:可能會出現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/

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.