React-Native项目搭建


React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用。在 JavaScript 中用 React 抽象操作系统原生的 UI 组件,代替 DOM 元素来渲染等。简而言之,如果熟练使用过React做网页开发,那么可以很容易的切换到使用React Native做移动端APP开发。React Native是React大家族的一员,在使用方式,组件生命周期上几乎一样,这对于Web开发工程师来说,无疑是一件天大的好事。PC端使用的是JS语言,而移动端的React Native使用的也是JS语言,这样Web开发工程师真正可以做到移动端,PC端的全栈开发。React Native是Facebook出品的一个革新性的跨平台UI框架,跨平台不是它最大的亮点,它背后的[React]才应该是它的神奇说在。用一两句来总结它的伟大,那就是给把web开发中的无状态开发模式通过React实现了。 那些数不清的状态组合才是桌面应用和手机应用复杂的源头。我本人是一个后端开发,当发现React不仅可以做Web开发,还能开发APP时,于是本着没事瞎折腾的劲,做一个基于React Native的APP练练手。

环境准备

  1. Node: 安装node环境配置就不多说了吧
  2. Android Studio: 安卓的集成开发工具,官网下载安装
  3. Android SDK: 安卓开发需要的运行环境

Android Studio安装

Android Studio是由谷歌提供的,不过界面风格和IDEA很像,官网下载地址。下载windows版本即可

下载完成后双击运行安装,基本无脑Next就行了,唯一要注意的地方就是安装路径,不要安装在C盘,自己选一个路径安装即可

然后一路Next,等待安装完成即可,安卓SDK一会打开Android Studio可以在里面安装,先通过命令把React Native项目建好。

初始化React Native项目

创建一个android目录,专门用来存放安卓项目,然后打开windows终端,执行下面两个命令,初始化React Native项目

npm install -g react-native-cli
react-native init myApp

react-native-cli是官方提供的快速创建React Native工程的脚手架。我在这创建了一个myApp项目,执行命令后显示如下,等待运行完即可

初始化好后结果如下

进入到myApp文件夹中,可以看到初始化好后,目录结构如下

|- tests
|- android              | android 端代码  
    |- app                  | app 模块
        |- build.gradle         | app 模块 Gradle 配置文件
        |- progurad-rules.pro   | 混淆配置文件
        |- src/main             | 源代码
            |- AndroidManifest.xml  | APK 配置信息 
            |- java                 | 源代码
                |- 包名                 | java 源代码
                    |- MainActivity.java    | 界面文件, (加载ReactNative源文件入口)
                    |- MainApplication.java | 应用级上下文, (ReactNative 插件配置)
            |- res                  | APK 资源文件
    |- gradle               | Gradle 版本配置信息
    |- keystores            | APK 打包签名文件(如果正式开发需要自己定义修改签名文件)
    |- gradlew              | Gradle运行脚本, 与 react-native run-android 有关
    |- gradlew.bat          | Gradle运行脚本, 与 react-native run-android 有关
    |- gradle.properties    | Gradle 的配置文件, 正常是 AndroidHome, NDK, JDK, 环境变量的配置
    |- build.gradle         | Gradle的全局配置文件, 主要是是配置编译 Android 的 Gradle 插件,及配置 Gradle仓库
    |- settings.gradle      | Gradle模块配置
|- ios                  | iOS 端代码
|- node_modules         | 项目依赖库
|- .buckconfig
|- .flowconfig
|- .watchmanconfig
|- index.js
|- App.js
|- app.json
|- package.json         | node配置文件, 主是要配置项目的依赖库,
|- index.android.js     | Android 项目启动入口
|- index.ios.js         | iOS 项目启动入口
复制代码

下面详细解释一下每个文件目录的作用

名称 解释
tests 测试文件夹,执行命令 “npm test”会调用此文件夹,在文件夹中需要引入待测试文件
android Android的原生开发目录,可以用Android Studio打开进行原生开发
ios Ios的原生开发目录,可以用Xcode打开进行原生开发
node_modules 存放项目所有依赖的库,在package.json中配置
.buckconfig buck的配置文件,buck是Facebook推出的一款高效率的App项目构建工具。
.flowconfig Flow 是 Facebook 旗下一个为 JavaScript 进行静态类型检测的检测工具。
它可以在 JavaScript 的项目中用来捕获常见的 bugs,比如隐式类型转换,空引用等等。
.watchmanconfig watchman的配置文件,watchman用于监控文件变化,辅助实现工程修改信息
index.js ios或android的入口,但是老版本中可能使用index.ios.js/index.android.js。
android中配置application文件的getJSMainModuleName()配置入口
app.json app的json文件

导入项目

打开刚刚安装好的Android Studio

然后导入刚刚初始化好的安卓项目,注意要选择build.gradle文件,即myApp目录下的android目录,而不是直接打开myApp目录。

gradle会自动下载相关依赖,等待项目初始好就行了

在此期间,可以配置一下安卓的SDK和安卓虚拟机

Android SDK安装

打开 File -> Settings... -> System Settings -> Android SDK,点击Edit

然后选择安装目录,一路Next即可

在环境变量Path中添加这两个目录

Android虚拟机配置

为了便于调试或者没有真机的情况下,可以配置一个安卓虚拟机用于开发调试,首先选择一个合适的机型

我这里选择了现在主流的6.3寸的屏幕,然后选择x86系统,安卓10.0系统,然后点击Download下载安装虚拟机

等待下载好后,选择刚刚下载好的虚拟机点击Next会进入如下界面,虚拟机实例内存选择4G,然后继续点击Next

注意:安装虚拟机需要CPU开启虚拟化支持,如果没有开启需要进入BIOS设置开启虚拟化,没有开启虚拟化或者虚拟化设置不对会报如下异常

运行React Native

安卓SDK和虚拟机都配置好后,回到项目,此时Gradle应该已经把项目初始化好了,如果没有初始化好就继续再等等吧。需要注意的是项目初始化可能会报如下异常,导致初始化失败

这实际是因为项目配置的 build-tools platforms platform-tools 和本地下载的版本存在不一致的情况,需要进入到安卓SDK的安装目录下

# 1.进入到安装目录
cd F:\WorkTool\android-sdk10.0\tools\bin

# 2.1. windows执行命令
sdkmanager --licenses

# 2.2. linux执行命令
./sdkmanager --license

更新 license 文件,执行过程需要多次确认。全部选择y即可。更新完成后再次初始化Gradle项目。好,到这里算把环境问题全搞定了,直接运行项目吧。

运行App

通过前面的配置我已经把SDK和安卓虚拟机全配置好了,现在只管运行就行了

如果顺利的话,会弹出安卓虚拟机,同时可以看到React的标志,欢迎来到React!

通过上面的提示可以看到主页是编辑App.js,于是我在App.js中加了一句话试试效果

不过令我奇怪的是重启服务后,这句话并没有加上去,而是需要点击myApp的wrapper后,再重启服务才加上了这句话

重启后效果如下,嗯,万里长征总算走完了第一步。。。


Author: 顺坚
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source 顺坚 !
评论
 Previous
H5播放视频流 H5播放视频流
由于项目需求,在公司系统中需要播放录音。前端我就采用了H5的 <audio> 标签,而后端就是常规 的输出流操作,即通过response的outPutStream输出文件,对于前端来说就是文件下载。开始测试的时候因为使用的都是一
2020-05-08
Next 
LeetCode-求两数组的中位数 LeetCode-求两数组的中位数
继续一天一个算法题,额….这个要求真的有点高 o(╥﹏╥)o ,今天这个算法题在LeetCode上是一个困难级别的题,我在看完这个题后基本上有了个大概的思路,然而理想很丰满,现实很骨感,用代码实现算法却用了一天多。这里记录一下我的解题思路
2020-04-22
  TOC