React-Native集成到已有项目中的总结
安装Python
- 从官网下载并安装python 2.7.x(3.x版本不行)
安装node.js
- 从官网下载node.js的官方V6.X.X版本或更高版本。安装完成后检测是否安装成功:node -v
安装完node后建议设置npm镜像以加速后面的过程(或使用科学上网工具)。npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global
- 从官网下载node.js的官方V6.X.X版本或更高版本。安装完成后检测是否安装成功:node -v
安装react-native命令行工具
- npm install -g react-native-cli
安装完yarn后同理也要设置镜像源:yarn config set registry https://registry.npm.taobao.org --global
yarn config set disturl https://npm.taobao.org/dist --global
- npm install -g react-native-cli
在Android Studio的欢迎界面中选择Configure | SDK Manager。
- 以下为必选
- 在SDK Platforms窗口中,选择Show Package Details,然后在Android 6.0 (Marshmallow)中勾选Android SDK Platform 23
- 在SDK Tools窗口中,选择Show Package Details,然后在Android SDK Build Tools中勾选Android SDK Build-Tools 23.0.1(必须是这个版本)。然后还要勾选最底部的Android Support Repository.
- 以下为必选
配置ANDROID_HOME环境变量
- 确保ANDROID_HOME环境变量正确地指向了你安装的Android SDK的路径。
打开控制面板 -> 系统和安全 -> 系统 -> 高级系统设置 -> 高级 -> 环境变量 -> 新建,建议在系统变量中修改

- PATH设置把Android SDK的tools和platform-tools目录添加到PATH变量中:PATH -> 双击进行编辑

- 确保ANDROID_HOME环境变量正确地指向了你安装的Android SDK的路径。
集成到已有的APP中
安装组件
- 进入https://facebook.github.io/react-native/docs/integration-with-existing-apps.html
参照文档Prerequisites集成

- 在Terminal中的app根目录或者通过开始菜单,运行命令行,定位到项目所在目录
依次执行以下命令行:$ npm init
$ npm install --save react react-native
$ curl -o .flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfigps:1.npm init命令用来生成package.json文件。根据提示输入name(不能包含大写字母),版本,描述,entry point(入口文件)等,可回车使用默认值。2.npm install --save react react-native命令要花费几分钟,当前版本默认安装react-native@0.xx.x也可以安装制定版本,如执行$ npm install --save react-native@0.42.0 此命令行将生成/node_modules文件夹. 该文件夹用来存放项目中的avaScript 依赖安装完毕,按提示要求安装相应版本的react3.前面5个步骤完成后,当出现下面提示时,重启Android studio'npm' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
$ npm install react@x.0.0-alpha.x
此警告可忽略3.当出现下面提示,需安装curl,否则请跳过
https://curl.haxx.se/dlwiz/?type=bin&os=Win64&flav=-&ver=*&cpu=x86_64下载v7.54.0windows 64位 的系统,可以使用I386下的curl.exe工具在系统高级环境变量中,配置CURL_HOME ----- "你的curl目录位置\curl-7.54.0"path ---- 末尾添加 “;%CURL_HOME%\I386”
- 进入https://facebook.github.io/react-native/docs/integration-with-existing-apps.html
js配置
- 打开package.json 文件在 scripts中添加:
"start": "node node_modules/react-native/local-cli/cli.js start"
- 在工作空间新建index.android.js文件,

打开index.android.js文件,拷贝以下内容,测试“Hello, World”
1 'use strict';
2
3 import React from 'react';
4 import {
5 AppRegistry,
6 StyleSheet,
7 Text,
8 View
9 } from 'react-native';
10
11 class HelloWorld extends React.Component {
12 render() {
13 return (
14 <View style={styles.container}>
15 <Text style={styles.hello}>Hello, World</Text>
16 </View>
17 )
18 }
19 }
20 var styles = StyleSheet.create({
21 container: {
22 flex: 1,
23 justifyContent: 'center',
24 },
25 hello: {
26 fontSize: 20,
27 textAlign: 'center',
28 margin: 10,
29 },
30 });
31
32 AppRegistry.registerComponent('HelloWorld', () => HelloWorld);第二个HelloWorld是展示的页面
- 在app build.gradle文件dependencies 中添加
1 dependencies {
2 ...
3 compile "com.facebook.react:react-native:0.xx.x" // From package.json.
4 }- In your project's build.gradle中"allprojects" block:repositories下添加
1 maven {
2 // All of React Native (JS, Android binaries) is installed from npm
3 url "$rootDir/../node_modules/react-native/android"
4 }ps:/..此处官方英文文档是个坑,百度好久,用来设置node_modules的父目录,如果在根目录下直接删掉,如果你很执着,同步后,就会报错:“Failed to resolve: com.facebook.react:react-native:0.x.x"- 在主app清单文件中添加DevSettingsActivity和访问网络权限:
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/><uses-permission android:name="android.permission.INTERNET"/>
- 打开package.json 文件在 scripts中添加:
添加js入口MyReactActivity
app中页面跳转,内容如下:public class MyReactActivity extends Activity implements DefaultHardwareBackBtnHandler {
private ReactRootView mReactRootView;
private ReactInstanceManager mReactInstanceManager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModuleName("index.android")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)//true
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "HelloWorld", null);
//"HelloWorld"需和index.android.js中方法 AppRegistry.registerComponent()第一个参数保持一致
setContentView(mReactRootView);
} @Override
public void invokeDefaultOnBackPressed() {
super.onBackPressed();
}
}清单文件中声明及相关主题设置:<activity
android:name=".MyReactActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
</activity>
启动js服务器
$ npm start


- 原因:没有找到执行的bundle文件。两种解决方式:
- 修改项目中的package.json文件
在scripts模块,添加bundle-android,如图

1 "bundle-android": "react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/.../src/main/assets/index.android.bundle --assets-dest android/.../src/main/res/"
ps:/...为你的app,“--”为两个“-”
- 使用命令行直接生成
不用修改package.json,不管有没有bundle-android模块
在Terminal窗口直接执行下面命令:
"react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output .../src/main/assets/index.android.bundle --assets-dest .../src/main/res/"
当出现下面提示后,说明ok


附:查询电脑ip地址命令:ipconfig/all


补充:
Q:Caused by: java.lang.IllegalAccessError: tried to access method android.support.v4.net.ConnectivityManagerCompat.:(Lcom/facebook/react/bridge/ReactApplicationContext;)V from class com.facebook.react.modules.netinfo.NetInfoModule
安装老版导航命令
安装最新导航组件
如果真实设备白屏但没有弹出任何报错,可以在安全中心里看看是不是应用的“悬浮窗”的权限被禁止了。
React-Native集成到已有项目中的总结的更多相关文章
- 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结
将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...
- 将React Native集成至Android原生应用
将React Native集成至Android原生应用 Android Studio 2.1 Preview 4生成的空项目 react-native 环境 0.22.2 初次编译后apk有1.1M, ...
- Angular团队公布路线图,并演示怎样与React Native集成
本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/angular-2-react-native-roadmap 前不久在旧 ...
- React Native集成Redux框架讲解与应用
学过React Native的都知道,RN的UI是根据相应组件的state进行render的,而页面又是由大大小小的组件构成,导致每个组件都必须维护自身的一套状态,因此当页面复杂化的时候,管理stat ...
- React Native环境配置、初始化项目、打包安装到手机,以及开发小知识
1.前言 环境:Win10 + Android 已经在Windows电脑上安装好 Node(v14+).Git.Yarn. JDK(v11) javac -version javac 11.0.15. ...
- ios -Unity3D的EasyAR集成到已经有项目中。
近期 在做AR这一块,用EasyAR集成到iOS端,由于现在到项目已经上线,下一版本要做一个AR功能,于是迫于需求需要,自己研究和翻阅读好多集成到资料. 通过整理分出几个重要到模块,其中在这里指出Xc ...
- react native定报预披项目知识点总结
1.TextInput组件对安卓的适配问题 textInput 在iOS 显示正常,但是在android下会出现下横线,并且字会被遮盖 因此一般都这么用该组件 <TextInput style= ...
- React Native技术做的一个项目“微笑阅读”
最近用React Native做了一个APP应用,有点心得: React Native确实比Hybrid应用渲染快,响应快,用户体验更好: React Native比原生简单多了,会Js就可以了,开发 ...
- java使用elasticsearch进行模糊查询-已在项目中实际应用
java使用elasticsearch进行模糊查询 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路 ...
随机推荐
- java复习(9)---数据库JDBC
java写工程当然需要连接数据库.JDBC技术是连接数据库和应用程序的纽带,本节主要说明如何连接数据库. java中提供sql类. package re09; import java.sql.*; p ...
- C++queue容器学习(详解)
一.queue模版类的定义在<queue>头文件中. queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是 ...
- java接收数据接口
1.数据接收接口: 这个可以考虑最简单的Servlet方法,而且效率较高: import java.io.PrintWriter;import java.text.SimpleDateFormat;i ...
- 远程SSH连接服务与基本排错
为什么要远程连接Linux系统?? 在实际的工作场景中,虚拟机界面或物理服务器本地的窗口都是很少能够接触到的,因为服务器装完系统后,都要拉到IDC机房托管,如果是购买了云主机,更碰不到服务器本地显示器 ...
- php生成二维码的几种方式整理及使用实例
hp生成二维码的方式:1.google开放api:2.php类库PHP QR Code:3.libqrencode:4.QRcode Perl CGI & PHP scripts感兴趣的朋友可 ...
- mysql 中文出现?,设置utf8
windows系统下的mysql: 1.找到mysql的配置文件:文件名可能不是my.ini(如my-default.ini),修改成my.ini. 打开配置文件,并编辑如下:(若是没有[client ...
- hammer的初始化及移动端各种滑动
前言:本人对hammer了解不是很多,早做项目时遇到了手机端的一些滑动事件,特此分析下hammer的某些属性. hammer.js是一款开源的移动端脚本框架,他可以完美的实现在移端开发的大多数事件,如 ...
- 【css笔记(2)】如何给元素应用规则?
css选择器 在介绍之前我么你先来看看css大致分为几种选择器: 1.类型选择器(元素选择器) 2.后代选择器(元素的所有后代) 3.伪类(:active, :hover, :focus, :link ...
- Potato(邪恶土豆)–windows全版本猥琐提权
工作原理: Potato利用已知的Windows中的问题,以获得本地权限提升,即NTLM中继(特别是基于HTTP > SMB中继)和NBNS欺骗.使用下面介绍的技术,它有可能为一个非特权用户获得 ...
- 【linux命令】打开关闭防火墙iptables
防火墙关闭 关闭防火墙(linux) 经过自己的实验,发现在ubuntu中service iptables 无法使用. 同时,在init.d中并没有iptables的程序,iptables程序在/sb ...