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