在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

相关文章

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使