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

浙公网安备 33010602011771号