史上最详细的Android原生APP中添加ReactNative进行混合开发教程

   2016-12-23 0
核心提示:背景React Native出来已经一段时间了,相对来说也算稳定了,在很多的企业中都实际使用他们,混合开发已经是未来的一种趋势,混合开发中使用的技术很多,不外乎Html5、JS框架通过一定的技术和原始交互,目前主流混合开发React Native、Cordova、APICloud、MUI

背景

React Native出来已经一段时间了,相对来说也算稳定了,在很多的企业中都实际使用他们,混合开发已经是未来的一种趋势,混合开发中使用的技术很多,不外乎Html5、JS框架通过一定的技术和原始交互,目前主流混合开发React Native、Cordova、APICloud、MUI、AppCan、Sencha Touch、jQuery Mobile等等(其他的小伙伴们自己收集),目前网上写教程的人很多,但是React Native更新速度很快,根据他们的教程,中间会遇到各种问题,今天我和大家一起踩踩各种坑,让小伙伴们快速集成到自己的APP中。

集成的小伙伴一定要注意图片中标注和备注哦,不然有可能会走弯路哦

集成步骤

参考官方文档->react native 文档

本文使用开发环境 Android studio

注意最新的React Native支持的最新的SDK为16(android4.1)

npm环境,小伙伴们自己安装 nodeJS自己安装,可以参考官方文档安装环境,有问题可以发411437734@qq.com沟通

创建Android项目(已有项目跳过)

1.打开Android studio

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

2.输入项目名称,选择项目目录,点击next

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

至此项目创建完成(需要注意的是最新的React Native支持最新SDK版本为16 android4.1)

React Native集成到上面我们创建的ReactNativeAPPDemo中

参考Facebook react native文档

1.进入项目根目录,添加JS到项目中-点击Android studio中的Terminal(如下图)

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

分别执行一下语句

npm init 
npm install --save react react-native 
curl -o .flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig  

init 主要根据提醒生成package.json文件

install --save react react-native 安装React 和React Native

curl -o .flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig 下载.flowconfig文件

参考图片

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

查看项目中有node_modules,说明react和react native 安装完成

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

在项目根目录添加.flowconfig

参考下图

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

也可以手动创建在浏览器打开 https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig 网址复制内容创建文件  

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

ReactNativeAppDemo配置相关内容

1.添加"start": "node node_modules/react-native/local-cli/cli.js start" 到package.json 文件下 scripts标签 修改前

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

修改后

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

2.添加index.android.js文件到项目中

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

'use strict'; import React from 'react'; import { 
  AppRegistry, 
  StyleSheet, 
  Text, 
  View 
} from 'react-native'; class HelloWorld extends React.Component { 
  render() {     return (       <View style={styles.container}> 
        <Text style={styles.hello}>Hello, World</Text> 
      </View> 
    ) 
  } 
} var styles = StyleSheet.create({ 
  container: { 
    flex: 1, 
    justifyContent: 'center', 
  }, 
  hello: { 
    fontSize: 20, 
    textAlign: 'center', 
    margin: 10, 
  }, 
}); 
AppRegistry.registerComponent('HelloWorld', () => HelloWorld);  

至此React native配置基本完成

3.App build.gradle配置

dependencies { 
... 
compile "com.facebook.react:react-native:+" // From node_modules.}  

这里注意不要使用maven中的,因为我们使用的是我们本地node_modules中的,注意最新版本中支持的是23,appcompat-v7:23.0.1,暂时没有试24的api

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

整个工程build.gradle配置

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

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

添加<uses-permission android:name="android.permission.INTERNET" />到AndroidManifest.xml:

确定External Libraries

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

确定是下是最新的,例如确定是0.34.1而不是0.20.1,如果出现请检查

maven { 
           `url "$rootDir/../node_modules/react-native/android"`//地址是否正确 
       }  
修改url "$rootDir*/..*/node_modules/react-native/android"为url "$rootDir/node_modules/react-native/android"  

添加native code

官方给出的

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

到时最新版本中提供了更加简单的方式,没错就是继承。

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

在这里我们也需要自定义一个Application否则 运行时会报错,不信的小伙伴可以试一试

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

到此为止,ReactNative 集成到已有项目中完成!!!迫不及待的运行试试吧!!

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

在Terminal中运行 npm start,看到下图表示启动成功

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

运行以后发现如下错误

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

react-native报错:Could not get BatchedBridge, make sure your bundle is packaged correctly

莫紧张,这是因为bundle没有打包好。找不到编译打包后的js文件。其实就是android studio默认的寻找js文件地址和react-native自己的工具编译所使用的地址不同。

解决方法

方法一

进入项目,在android/app/src/main下新建assets目录。执行以下命令

$> react-native start > /dev/null 2>&1 &   
$> curl "http://localhost:8081/index.android.bundle?platform=android" -o 
> "app/src/main/assets/index.android.bundle"  

在项目根目录下执行

<!--$> (cd android/ && ./gradlew assembleDebug)-->$> (cd 项目名称/ && ./gradlew assembleDebug) 

把创建的apk安装到android设备

方法二

进入项目,在android/app/src/main下新建assets目录

启动服务器

$>react-native start 
$>react-native bundle --platform android --dev false --entry-file index.android.js --bundl  

在assets文件夹下会生成index.android.bundle文件,把创建的apk文件安装到android设备

方法三

进入项目,在android/app/src/main下新建assets目录

在package.json中配置下面代码

"scripts": { 
    "start": "node node_modules/react-native/local-cli/cli.js start", 
    "bundle-android": "react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output app/src/main/assets/index.android.bundle --sourcemap-output app/src/main/assets/index.android.map --assets-dest android/app/src/main/res/" 
  }, 

个人推荐使用方法三,方法三解决不了推荐方法二 手动执行

修改刚刚的package.json文件

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

如果真机(模拟器)需要执行

adb reverse tcp:8081 tcp:8081 

一定要确定连接网络哦!!

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

开心的进行开发吧!

其他可能遇到的问题

ReactNative兼容64位Android手机

libgnustl_shared.so" is 32-bit instead of 64-bit类似错误

解决方法

  1. 在项目的根目录的 gradle.properties 里面添加一行android.useDeprecatedNdk=true.
  2. 在 build.gradle 文件里添加以下代码
 android { 
... 
defaultConfig { 
   ... 
   ndk { 
       abiFilters "armeabi-v7a", "x86" 
   } 
 
   packagingOptions { 
       exclude "lib/arm64-v8abrealm-jni.so" 
   } 
} 
}   

Genymotion模拟器运行显示没有连接到developement server如下图

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

先检查是否连接到网络

点击模拟器中Menu菜单弹出下面图片,点击Dev Settings

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

4.点击Debugging 下面的Debug Server host & port for device填写地址和端口

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

史上最详细的Android原生APP中添加ReactNative进行混合开发教程

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • React Native 中调用原生 android 模块 Toast 例子及说明
    React Native 中调用原生 android 模块 Toast
    react-native-android-toast react-native 调用原生 android 模块 Toast 学习笔记 参考官方文档初始化一个react-native项目 初始化项目 react-native init androidToast 生成如下目录: 运行命令查看项目react-native run-android如图:接入Android原生模块
  • 基础篇章:关于 React Native 之 ListView 组件的讲解
    基础篇章:关于 React Native 之 ListView 组件
    我们讲完ScrollView组件,其实顺其自然的就应该讲解ListView,对于前段和移动端的开发人员应该非常熟悉这样的控件吧,具体是做什么的,我感觉不用我讲了吧。我们来看看它怎么使用吧。大家好,我是ListView,我是React Native大家族中基础组件中,一个核心组件
  • [原]Mac上搭建React Native Android开发环境并运行
    [原]Mac上搭建React Native Android开发环境并
    react-native目前是越来越火,很多人都开始接触,环境搭建就显得比较重要,具体方法可以看一下这两篇文章 1、mac上搭建步骤 2、Mac OSX 安装nvm(node.js版本管理器)在执行命令 需要使用vpn,才能安装成功,国内网络受限。nvm install node最后执行命令npm i
  • React Native填坑之旅--ListView篇
    列表显示数据,基本什么应用都是必须。笔者写作的时候RN版本是0.34。今天就来从浅到深的看看React Native的ListView怎么使用。首先是使用写死的数据,之后会使用网络请求的数据在界面中显示。最后加上一个ActivityIndicator,网络请求的过程中显示Loading图标
  • 基础篇章:React Native之 ScrollView 的讲解
    基础篇章:React Native之 ScrollView 的讲解
    大家好,我是ScrollView,相信做过移动或者前端开发的人肯定都很熟悉我,对,我就是那个可以滚动的容器,滚有点难听,我是可以滑动的容器,我滑动起来,摩擦摩擦,似魔鬼的步伐。我不仅可以上下滚动,就是垂直,还可以左右滚动,这叫有水平。我厉不厉害?我这
  • 解决React-Native bug:about DialogModule onHo
    问题是这样的,线上的Bugly爆出这样一个错误,而且延续了好多个版本,一直没有解决,崩溃次数已经上千次,因为刚看过RN源码所以斗胆尝试解决一下。Attached DialogModule to host with pending alert but no FragmentManager (not attached to an Activity).c
  • [工具资源] react-native-easy-toast, 一款简单易用的 Toast 组件,支持 Android&iOS.
    [工具资源] react-native-easy-toast, 一款简单
    react-native-easy-toastA react native module to show toast like android, it works on iOS and Android.ContentInstallation Demo Getting started API Contribution Installation1.Run npm i react-native-easy-toast --save 2. import Toast, {DURATION
  • 修改 React-Native Android App 包名
    修改 React-Native Android App 包名
    ReactNative 不知道是为什么(大概是依赖太多?),每次执行 react-native init 创建新项目的时候,总是要等个将近 10 分钟的样子…… 对于初学者来说,需要在短时间内创建好多好多好多的项目,这样每次 init 就要浪费好长的时间。用 verbose 模式一看,其实
点击排行