RN的Android环境配置
本文参考晴明的ReactNative教程中关于Android环境配置一文,做了一些笔记。
参考文章:集成到现有原生应用 - React Native 中文网
本文源码:RNExample
1.前言
本文目的是,记录从开始新建项目,到最终项目运行成功的具体的一步步的过程。
2.建立新RN工程
第一步,使用AndroidStudio新建一个Android工程,如RNTest。

第二步,在d盘建立一个空的目录,用做rn工程的根目录,如D:\ReactNative\RNExample
其中RNExample就是根目录。
第三步,在RNExample下新建一个android文件夹(用于存放安卓工程),将之前建立的RNTest工程下的文件都copy到此处来。

第四步,在RNExample根目录下新建一个package.json文件,并附上下列内容
{
"name": "MyReactNativeApp",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start"
},
"dependencies": {
"react": "16.0.0-alpha.6",
"react-native": "0.44.3"
}
}
react版本查看命令:npm info react
react-native版本查看命令:npm info react-native
这些都是借鉴的原文的内容,主要是一些配置工程的东西。(需要注意的是,这里react-native版本是44,所以新建的是index.android.js 而不是index.js 后续会记录到)
然后,将命令行移至RNExample下,执行命令npm install ,成功后初步工作就完成了,是这样的。

3.Android工程中的配置
第一步,添加对RN的依赖,在app下的build.gradle
applyplugin:'com.android.application'
android {
省略xxx
defaultConfig {
省略xxx
//***********这里的ndk 和packagingOptions 也是避免错误添加的配置 好像是关于32位64位的错误 具体为啥 want to know
ndk {
abiFilters "armeabi-v7a","x86"
}
packagingOptions {
exclude "lib/arm64-v8a/librealm-jni.so"
}
}
省略xxx
//************添加这里,可以避免jsr305的错误(我也不确定具体是啥)
configurations.all {
resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
}
}
dependencies {
省略xxx
compile 'com.facebook.react:react-native:+'//这里是对RN的依赖
}
第二步,工程下build.gradle的配置
allprojects {
repositories {
jcenter()
maven {
// All of React Native (JS, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}
第三步,AndroidManifest.xml配置


4.建立js相关文件
第一步,在RNExample根目录下建立一个index.android.js文件(在0.49之前是index.android.js,之后是index.js),这里面就是具体的代码了,建立rn组件,添加一些显示内容。还是上图吧,具体的我会在后续附上工程。

第二步,申请悬浮框权限(主要是在调试时,会弹出一些悬浮框,所以在android的activity中需要先申请下权限)。我在android的MainActivity中添加的这些申请(注意,我没有把rn所要写的内容放到这个activity中)。另外在MainActivity中添加了一个Button,点击效果是跳转到RN编写的界面。

第三步,建立有rn内容的activity,先用截图看着



另外就是:
mReactRootView.startReactApplication(mReactInstanceManager, "HelloWorld", null);
这里的第二个参数,要与index.android.js中的
AppRegistry.registerComponent('HelloWorld', () => HelloWorld);第一个参数相同
第四步,在AndroidManifest.xml中注册这个Activity

第五步,建立一个application 配置下ip和端口

第六步,在AndroidManifest.xml中使用这个application

5.测试与运行
第一步,查看android工程下的main目录是否有assets,如果没有则建立(会在此assets下生产一些文件index.android.bundle 与index.android.bundle.meta),接下来,在运行工程之前需要执行js文件的打包,生成assets下的文件。命令行运行如下:
react-native bundle --platform android --dev true --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
第二步,启动服务,保证命令执行后,命令行窗口一直存在。
npm start
第三步,使用AndroidStudio直接运行工程到手机,因为在MainActivity的onCreate中添加了悬浮框的权限申请,所以直接就跳转到悬浮框权限界面了,打开权限,点击返回键,这时界面 中只显示了一个button,当前MainActivity是个原生界面,点击button跳转到由RN编写的界面了。
第四步,如果重新修改了index.android.js中的代码,那么需要在命令行,先Ctrl+C停止服务,然后重新执行上述步骤一二三。
6.结语
在尝试RN过程中,其实就是一个边学习变探索的过程,很多东西需要亲自尝试后才有真正的体会,上面所讲仅是个人的一些记录,仅供参考。