00 ReactNative开发环境搭建(Windows+Android)

0*00

  • 很久以前折腾过一次ReactNative环境,但之后工作中也没有需要,便没有深入研究,经过一年多,混合开发愈发热门,近日在图书馆拿到一本《React Native跨平台移动应用开发》(第2版),看了下还蛮有趣的,虽然因为Facebook之前私跑条约,导致Apache、WordPress不再支持ReactNative,国内百度不再使用,阿里大力发展自己的Weex,详见如何看待百度要求内部全面停止使用 React / React Native?.这个事件对于RN的发展不是什么好事,不过小公司反正也不用太担心,基本上没可能和Facebook发生什么牵扯,即便实际用不到RN,学习下机制、原理也是不错的。

0*01

  • 后续会尽量做一个连续的文章,记录学习RN的过程。
  • 主要参考内容:
  1. 《React Native跨平台移动应用开发》(第2版) 作者:阙禧韬
  2. 图书豆瓣链接:React Native跨平台移动应用开发
  3. 作者GitHub:esr6n
  4. ReactNative中文官网:ReactNative 中文网

0*02 基础概念

  • React、ReactNative、React.js是不同的概念,Facebook后来将React框架的开源许可改成了MIT,但ReactNative还是BSD+PATENTS,所以对于大公司来说,用React框架问题不大,用ReactNative就有专利的风险。(关于开源协议参见https://github.com/phodal/licenses
  • React是基础框架,是设计理念
  • React.js 是在React框架基础上用来开发网页的。
  • ReactNative是用来开发移动应用的

0*03 环境配置(windows10+android)

  • 随着RN的更新,早期的一些配置方式已经不合适,甚至现在正在看的这本也已经不适合现在的配置方式,结合RN中文网的内容再重新记录一下。
  • 准备工作
  1. Chocolatey 这个其实不需要,单独下载node.js和python2.X就可以
  2. RN目前不支持python3.X
  3. 准备好JDK1.8 和 Android SDK(安装Android Studio下载即可 目前AS的稳定版是3.0.1)
  4. 安装好node.js就可以在命令行使用npm了,如果担心速度不好,可以设置npm镜像,通过淘宝镜像下载(个人未设置)。
npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global
  1. 安装yarn和ReactNativeCLI (-g表示global)
npm install -g yarn react-native-cli

安装完yarn之后就可以用yarn代替npm了,例如用yarn代替npm install命令,用yarn add 某第三方库名代替npm install --save 某第三方库名。(RN中文网的说法)
通常这一步不会有太大的问题,主要是下载更新。如果有问题,现将文件都更新到最新(python、JDK基本不需要更新,主要是node.js要更新到最新,AS有稳定版也更新为稳定版)
设定好JAVA_HOME(例:D:\Program Files\Java\jdk1.8.0_131)和ANDROID_HOME(例:D:\ProgramData\Android\android-sdk)

  1. 初始化项目 (名称任意)
    在想要创建项目的文件夹下打开命令行,输入以下命令。(文件夹路径不要有中文)
react-native init LearnRNDemo

这个过程会比较久,需要下载50-60M的文件,综合网络等因素,可能需要1min以上。
这一步如果失败,查看下是否有具体的错误,有的话针对性处理。如果没有或者就是uncaught exception,建议优先更新node.js,再重新初始化。
如果还不行,书中有两个建议,删除安装盘/users/用户名/.node-gyp 和 安装盘/users/用户名/AppData/Roaming/npm-cache (AppData是隐藏文件夹)。删除后重新初始化
如果还有问题,就需要自己针对性分析了

初始化后应该是这样的:


RN初始化完成.JPG
  1. 运行项目
  • init完成后的图片其实说明得挺清楚的,cd到刚创建的项目目录,运行“react-native run-ios”或者“react-native run-android”,但是不建议这么做,因为自动生成的Gradle版本太低了,下载起来太费劲。。。
  • 建议操作(只说windows下的android)
  1. 用AS打开生成的android项目
  2. 配置整个项目的build.gradle、模块的build.gradle和gradle-wrapper.properties
  • 配置compileSdkVersion 和 buildToolsVersion 尽量是最新的或者比较新的
  • 配置模块gradle文件中的插件版本(classpath 'com.android.tools.build:gradle:3.0.1')
  • 注意,AS3.0.1中远程仓库要添加google()
  • properties中配置路径(distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip
  • 注意插件版本3.0以上要和gradle-4.0以上对应
  • gradle可以单独下载再用本地地址导入,参见https://gradle.org/releases/,然后将distributionUrl=file:///D:/Gradle/gradle-4.1-all.zip
===================工程的gradle==============
apply plugin: "com.android.application"
import com.android.build.OutputFile
project.ext.react = [
    entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false

android {
    compileSdkVersion 25
    buildToolsVersion "27.0.3"

    defaultConfig {
        applicationId "com.learnrn"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    buildTypes {
        release {
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }
    }
    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def versionCodes = ["armeabi-v7a":1, "x86":2]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
}

dependencies {
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:25.4.0"
    compile "com.facebook.react:react-native:+"  // From node_modules
}

task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

===================模块的gradle===============
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

allprojects {
    repositories {
        google()
        mavenLocal()
        jcenter()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
    }
}

===================properties============
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
  1. sync一下项目,确保编译能够成功。
  2. 按道理直接用AS run应该可以,但是事实是不行,报找不到asset什么的。
  3. 在命令行运行 “react-native run-android” 也会报错,需要先把“..\LearnRN\android\app\build”中的内容全部删掉,再运行。
  4. 此时会下载比较多的东西,中间可能会因为下载导致失败,重新运行即可。
  5. 如果上面没有把gradle配置设置成最新,用默认的2.14运行,在MX4上会报错
Installing APK 'app-debug.apk`' on 'MX4 - 5.1' for app:debug
Unable to install 项目路径\android\app\build\outputs\apk\app-debug.apkcom.android.ddmlib.InstallException: Failed to install all'
  1. 正常此时就可以运行了,目前显示的内容是
Welcome to React Native!
To getstarted edit App.js
Double tap R on your keyboard to reload
Shake or press menu button for dev menu

解释得挺清楚的,可以通过编辑App.js来实现自己的需求
通过双击R、摇一摇等方式来显示开发清单。
和以前版本不同的是,没有区分index.android.js和index.ios.js,直接就是一个App.js

  1. 打开App.js,可以尝试修改下文字保存后,摇一摇手机,选择Reload,即可重新加载,无需重新编译。

如果加载中文出现乱码,请确认文档保存时选择了utf-8 +bom编码。
效果如图


rn.jpg

基本上最新的RN环境配置就是这样了。建议将这个版本打包备份起来,后续就不用再重新init和修改gradle那些了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容