在Android原生应用上接入ReactNative实践

2024-05-24 07:08

本文主要是介绍在Android原生应用上接入ReactNative实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Android原生应用上接入ReactNative实践

一、安装nodejs, npm.

Linux

sudo apt install nodejs

Mac

brew install node

检查安装

node -v
npm -v

设置国内淘宝源

npm config set registry https://registry.npm.taobao.org

二、在project工程目录下添加文件package.json,然后执行npm install. 会在工程目录下生成node_modules目录。

{"name": "ReactNativeDemo","version": "0.0.1","private": true,"scripts": {"start": "yarn react-native start"},"dependencies": {"react": "16.9.0","react-native": "^0.61.5"}
}

三、在project工程目录下添加两个maven仓库

allprojects {repositories {google()jcenter()// RNmaven { url "$rootDir/node_modules/react-native/android" }// Android JSC is installed from npmmaven { url "$rootDir/node_modules/jsc-android/dist" }}
}

三、在已有的Android工程,添加如下代码:

1.在app工程下的build.gradle集成react-native库
implementation 'com.facebook.react:react-native:+'
implementation("org.webkit:android-jsc:+")
2.在AndroidMainfest.xml文件添加网络权限,调试要用
<uses-permission android:name="android.permission.INTERNET" />
3.在AndroidMainfest.xml文件添加React-native开发者调试界面,和Reactnative基类
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
<activity android:name="com.example.myapplication.ReactNativeBaseActivity"/>
4.在Application增加对ReactNative的so库的加载
SoLoader.init(this,false);

三.创建ReactNative的基类

代码如下:

package com.example.myapplication;import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactRootView;
import com.facebook.react.common.LifecycleState;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.shell.MainReactPackage;public class ReactNativeBaseActivity extends Activity implements DefaultHardwareBackBtnHandler {private ReactRootView mReactRootView;private ReactInstanceManager mReactInstanceManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mReactRootView = new ReactRootView(this);mReactInstanceManager = ReactInstanceManager.builder().setApplication(getApplication()).setJSMainModulePath("index").addPackage(new MainReactPackage()).setUseDeveloperSupport(BuildConfig.DEBUG).setInitialLifecycleState(LifecycleState.BEFORE_CREATE).build();// The string here (e.g. "MyReactNativeApp") has to match// the string in AppRegistry.registerComponent() in index.jsmReactRootView.startReactApplication(mReactInstanceManager, "ReactNativeDemo", null);setContentView(mReactRootView);}@Overridepublic void invokeDefaultOnBackPressed() {super.onBackPressed();}@Overrideprotected void onPause() {super.onPause();if (mReactInstanceManager != null) {mReactInstanceManager.onHostPause(this);}}@Overrideprotected void onResume() {super.onResume();if (mReactInstanceManager != null) {mReactInstanceManager.onHostResume(this, this);}}@Overrideprotected void onDestroy() {super.onDestroy();if (mReactInstanceManager != null) {mReactInstanceManager.onHostDestroy(this);}if (mReactRootView != null) {mReactRootView.removeAllViews();}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {mReactInstanceManager.onActivityResult(this, requestCode, resultCode, data);}
}

四、在原生工程指向这个Activity就会去加载ReactNative工程了

startActivity(Intent(this, ReactNativeBaseActivity::class.java))

五、创建ReactNative工程

1.创建ReactNativeDemo目录
2.创建文件package.json,并且运行npm install
{"name": "ReactNativeDemo","version": "0.0.1","private": true,"scripts": {"android": "react-native run-android","ios": "react-native run-ios","start": "react-native start","test": "jest","lint": "eslint ."},"dependencies": {"react": "16.9.0","react-native": "0.61.5"},"devDependencies": {"@babel/core": "^7.10.5","@babel/runtime": "^7.10.5","@react-native-community/eslint-config": "^2.0.0","babel-jest": "^26.1.0","eslint": "^7.5.0","jest": "^26.1.0","metro-react-native-babel-preset": "^0.61.0","react-test-renderer": "16.13.1"},"jest": {"preset": "react-native"}
}
3.创建index.js文件入口
import {AppRegistry} from 'react-native';
import App from './App';
AppRegistry.registerComponent('ReactNativeDemo',()=>App);

注意:这里的ReactNativeDemo的名称要和上面Android工程里面的名称一致

mReactRootView.startReactApplication(mReactInstanceManager, "ReactNativeDemo", null);

然后App.js就是React Native界面了,这个自由发挥。

demo代码仓库

这篇关于在Android原生应用上接入ReactNative实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997715

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件