1. 程式人生 > 其它 >android 原生和ReactApplication的互動

android 原生和ReactApplication的互動

 React Native建立工程,是通過在命令終端輸入 ​​react-native init 你的專案名字​​ 來建立工程的,建立的工程會從網路端,同步到你終端所在路徑的本地,生成一個和android project類似的專案,如下圖。

android資料夾,就是一個可以用android studio開啟的android專案。

android資料夾,就是一個可以用android studio開啟的android專案。
ios資料夾,是一個可以用xcode開啟的ios專案。
index.android.js,這是android的React Native入口檔案。
index.ios.js,這是ios的React Native入口檔案。
package.json,類似android studio的build.gradle,你依賴的庫都寫在裡面。
node_module資料夾,你依賴的庫下載下來都存放在裡面,屬於git的忽略檔案,你要找的依賴庫原始碼也在裡面,包括React和React Native。
--

 package.json,類似於android studio中的build.gradle新增遠端依賴,不同的是,package.json大多數時候不需要我們手動新增,我們只需要在根目錄通過命令列,​​npm install xxxxxx --save​​ 就可以依賴一個庫了。

 install之後,庫的依賴資訊,自動被寫到package.json裡面,對應的庫也會被下載到node_module資料夾中,類似android studio依賴後把aar同步到本地。

3、Android開發需要理解的React Native

 一般情況下只在一個activity上執行,一般情況下是因為,你也可以自己寫新的Activity,繼承ReactActivity來實現你想要的邏輯。

2)Application預設建立工程時,就會繼承ReactApplication

 其中getPackage()就是返回需要與原生互動的包,MainReactPackage時初始化生成,其他是你​​react-native link​​命令時幫你插入的。當然,你也可以自己寫與原生互動的模組。

 通過activity 進行互動:

package com.rn_demo;

import android.app.Application;

import com.facebook.react.ReactApplication;
import com.reactnative.ivpusic.imagepicker.PickerPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.microsoft.codepush.react.CodePush;
import com.rnfs.RNFSPackage;
import com.vinzscam.reactnativefileviewer.RNFileViewerPackage;
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;

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {

        @Override
        protected String getJSBundleFile() {
        return CodePush.getJSBundleFile();
        }
    
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
            new PickerPackage(),
            new VectorIconsPackage(),
            new CodePush(null, getApplicationContext(), BuildConfig.DEBUG),
            new RNFSPackage(),
            new RNFileViewerPackage()
      );
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}

  

推薦的資料和閱讀:

https://blog.51cto.com/u_15641473/5321413