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

简介:

背景

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 studio

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

输入项目名称   

选择项目目录,点击next   

   

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

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

参考Facebook react native文档

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

进入项目根目录,添加JS到项目中-点击Android studio中的Terminal

分别执行一下语句

 
 
  1. npm init 
  2. npm install --save react react-native 
  3. 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文件

参考图片  

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

查看项目中有node_modules

在项目根目录添加.flowconfig

参考下图  

在项目根目录添加.flowconfig

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

ReactNativeAppDemo配置相关内容

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

修改后  

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

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

 
 
  1. 'use strict'; import React from 'react'; import { 
  2.   AppRegistry, 
  3.   StyleSheet, 
  4.   Text, 
  5.   View 
  6. from 'react-native'; class HelloWorld extends React.Component { 
  7.   render() {     return (       <View style={styles.container}> 
  8.         <Text style={styles.hello}>Hello, World</Text> 
  9.       </View
  10.     ) 
  11.   } 
  12. } var styles = StyleSheet.create({ 
  13.   container: { 
  14.     flex: 1, 
  15.     justifyContent: 'center'
  16.   }, 
  17.   hello: { 
  18.     fontSize: 20, 
  19.     textAlign: 'center'
  20.     margin: 10, 
  21.   }, 
  22. }); 
  23. AppRegistry.registerComponent('HelloWorld', () => HelloWorld);  

至此React native配置基本完成

3.App build.gradle配置

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

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

整个工程build.gradle配置

 
 
  1. allprojects { 
  2. repositories { 
  3.     ... 
  4.     maven {         // All of React Native (JS, Android binaries) is installed from npm 
  5.         url "$rootDir/node_modules/react-native/android" 
  6.     } 
  7. ... 
  8.    

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

确定External Libraries  

   

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

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

添加native code

官方给出的  

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

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

   

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

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

运行以后发现如下错误  

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目录。执行以下命令

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

在项目根目录下执行

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

把创建的apk安装到android设备

方法二

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

启动服务器

 
 
  1. $>react-native start 
  2. $>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中配置下面代码

 
 
  1. "scripts": { 
  2.     "start""node node_modules/react-native/local-cli/cli.js start"
  3.     "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/" 
  4.   }, 

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

修改刚刚的package.json文件 

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

 
 
  1. adb reverse tcp:8081 tcp:8081 

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

 

开心的进行开发吧!

其他可能遇到的问题

ReactNative兼容64位Android手机

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

解决方法

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

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

先检查是否连接到网络

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

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





作者:天空oo7
来源:51CTO
目录
相关文章
|
14天前
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
33 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
|
21天前
|
Web App开发 5G Linux
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
52 6
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
|
20天前
|
编解码 Java Android开发
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。SRT Streamer支持的视频编码包括H264、H265等等,支持的音频编码包括AAC、OPUS等等,可谓功能强大的APP直播框架。另一款APP直播框架RTMP Streamer支持RTMP直播和RTSP直播,不支持SRT协议的直播。而本文讲述的SRT Streamer支持RTMP直播和SRT直播,不支持RTSP协议的直播。有关RTMP Streamer的说明参见之前的文章《使用RTMP Streamer开启APP直播推流》,下面介绍如何使用SRT Streamer开启手机直播。
45 4
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
|
3天前
|
API Android开发
Android P 性能优化:创建APP进程白名单,杀死白名单之外的进程
本文介绍了在Android P系统中通过创建应用进程白名单并杀死白名单之外的进程来优化性能的方法,包括设置权限、获取运行中的APP列表、配置白名单以及在应用启动时杀死非白名单进程的代码实现。
15 1
|
7天前
|
IDE Java 开发工具
探索安卓开发之旅:打造你的第一款App
【8月更文挑战第24天】在这篇文章中,我们将一起踏上激动人心的安卓开发之旅。不论你是编程新手还是希望扩展技能的老手,本文将为你提供一份详尽指南,帮助你理解安卓开发的基础知识并实现你的第一个应用程序。从搭建开发环境到编写“Hello World”,每一步都将用浅显易懂的语言进行解释。那么,让我们开始吧!
|
18天前
|
开发工具 Android开发
|
18天前
|
Android开发
将AAB(Android App Bundle)转换为APK
将AAB(Android App Bundle)转换为APK
28 1
|
18天前
|
开发工具 Android开发
上架Google Play报错:For new apps, Android App Bundles must be signed with an RSA key.
上架Google Play报错:For new apps, Android App Bundles must be signed with an RSA key.
58 1
|
19天前
|
Android开发
Cannot create android app from an archive...containing both DEX and Java-bytecode content
Cannot create android app from an archive...containing both DEX and Java-bytecode content
16 2
|
29天前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
61 12
下一篇
云函数