react-native连接android原生模块

embedded/2024/9/19 23:09:59/ 标签: android, react native, react.js, android-studio

目录

搭建react-native项目

搭建node和jdk的环境

搭建Android的环境

创建React-native项目

运行react-native项目

下载夜神模拟器

使用adb连接夜神浏览器。

运行react-native项目

编写原生安卓的apk

android%20studio%E4%B8%AD%E7%BC%96%E5%86%99%E5%8E%9F%E7%94%9F%E4%BB%A3%E7%A0%81-toc" style="margin-left:40px;">android studio中编写原生代码

在React-native编写代码。


  1. 搭建react-native项目

    1. 搭建node和jdk的环境

      软件版本号测试版本命令
      node20.16.0node -version
      jdk21.0.4javac -version

      java的jdk版本(也就是java的环境),可以在以下网站进行下载。https://www.oracle.com/java/technologies/downloads/#java17
      输入javac -version有结果返回才算成功。
       

    2. 搭建Android的环境

      1. 注意:记得这一步要有稳定的代理软件,不然后面的步骤都走不下去

      2. 安装 android studio。可以通过这个网站进行下载: android studio下载链接 安装界面中选择"Custom"选项,确保选中了以下几项:

        配置
        Android SDK
        Android SDK Platform
        Android Virtual Device

        如果选择框是灰的,你也可以先跳过,稍后再来安装这些组件。

      3. 安装SDK,Android Studio 默认会安装最新版本的 Android SDK。一些Android Studio的样式是新UI,可以先设置为旧样式。

      4. 开始管理SDK。

        在 SDK Manager 中选择"SDK Platforms"选项卡,然后在右下角勾选"Show Package Details"。展开 Android 14 (UpsideDownCake) 选项,确保勾选了下面这些组件(如果你看不到这个界面,则需要使用稳定的代理软件):

        Android SDK Platform 34
        Intel x86 Atom_64 System Image(官方模拟器镜像文件,使用非官方模拟器不需要安装此组件,我使用的是夜神模拟器,所以不用配)



        然后点击"SDK Tools"选项卡,同样勾中右下角的"Show Package Details"。展开"Android SDK Build-Tools"选项,确保选中了 React Native 所必须的34.0.0版本。你可以同时安装多个其他版本。

        最后点击"Apply"来下载和安装这些组件。

      5. 通过android studio的下载的sdk可以通过下面图的图纸,进行设置位置。

      6. 设置Android_Home的环境变量。我们打开通过android studio生成的sdk的目录。

      7. 加入ANDROID_HOME的配置。设置属性:ANDROID_HOME为D:\environment_software\sdk·

      8. 加入工具目录到path里面去。

        %ANDROID_HOME%\platform-tools
        %ANDROID_HOME%\tools\bin
        %ANDROID_HOME%\tools
        %ANDROID_HOME%\emulator


    3. 创建React-native项目

      1. 如果你之前全局安装过旧的react-native-cli命令行工具,请使用npm uninstall -g react-native-cli卸载掉它以避免一些冲突:

        npm uninstall -g react-native-cli @react-native-community/cli
         
      2. 使用命令创建react-native项目

        npx @react-native-community/cli@latest init AwesomeProject
         
      3. 下载完是下面这个图:
  2. 运行react-native项目

    1. 下载夜神模拟器

      1. 下载地址: 夜神安卓模拟器-手游模拟器电脑版_夜神模拟器官网
      2. 启动夜神模拟器。
    2. 使用adb连接夜神浏览器。

      1. 配置环境变量:有配置这个目录就可以了。
      2. 输入命令: adb connect 127.0.0.1:62001
      3. 执行 npm run android
      4. 会出现以下的错误。(Unable to open connection to ADB server: java.io.IOException: Can't find adb server on port 5037, IPv4 attempt: Connection refused: connect, IPv6 attempt: Connection refused: connect)
      5. 解决方案:
        1. 到SDK的目录下。复制3个文件。下面需要复制到夜神模拟器的目录中去。
        2. 到夜神模拟器的文件夹。可以在菜单下输入“夜神模拟器”,右键打开文件位置。
        3. 覆盖文件。
        4. 然后在sdk目录下,复制一份adb.exe,并重命名为nox_adb.exe。
        5. 也拷贝到夜神模拟器的目录下。
        6. 重新启动夜神,在拷贝文件过程中,也需要先关闭夜神模拟器,不然文件不让覆盖。
    3. 运行react-native项目

      1. 在vscode输入 adb connect 127.0.0.1:62001,然后输入 npm run android命令。

      2. 夜神模拟器的界面效果。
      3. 修改代码,查看是否变化。
      4. 可以看到代码确实的变化了。
  3. 编写原生安卓的apk

    1. android%20studio%E4%B8%AD%E7%BC%96%E5%86%99%E5%8E%9F%E7%94%9F%E4%BB%A3%E7%A0%81" style="background-color:transparent;">android studio中编写原生代码

      1. 我们使用android studio进行编写代码,有一些代码可以进行提示。

      2. 使用androiid studio打开rn项目的android文件夹。

      3. 使用android studio的file下的open。

      4. 点击自动下载依赖。
      5. 下载成功后的目录是这样的。
      6. 在app下的java的com.facebook.react目录下新建一个 CalendarModule.java 文件。
      7. 在上面那个目录右键,点击New,点击Java class。
      8. 加入名字 CalendarModule。
      9. 加入代码。
        package com.your-apps-package-name; // replace your-apps-package-name with your app’s import com.facebook.react.bridge.NativeModule;
        import com.facebook.react.bridge.ReactApplicationContext;
        import com.facebook.react.bridge.ReactContext;
        import com.facebook.react.bridge.ReactContextBaseJavaModule;
        import com.facebook.react.bridge.ReactMethod;
        import java.util.Map;
        import java.util.HashMap;public class MyAppPackage implements ReactPackage {@Overridepublic List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {return Collections.emptyList();}@Overridepublic List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {List<NativeModule> modules = new ArrayList<>();modules.add(new CalendarModule(reactContext));return modules;}}
      10. 在com.facebook.react新建一个MyAppPackage.java文件。
      11. MyAppPackage的文件修改成以下内容。
        package com.facebook.react;
        import com.facebook.react.ReactPackage;
        import com.facebook.react.bridge.NativeModule;
        import com.facebook.react.bridge.ReactApplicationContext;
        import com.facebook.react.uimanager.ViewManager;import java.util.ArrayList;
        import java.util.Collections;
        import java.util.List;public class MyAppPackage implements ReactPackage {@Overridepublic List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {return Collections.emptyList();}@Overridepublic List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {List<NativeModule> modules = new ArrayList<>();modules.add(new CalendarModule(reactContext));return modules;}}
        
      12. 要注册CalendarModule包,你必须将MyAppPackage添加到 ReactNativeHost 的getPackages()方法返回的包列表中。打开MainApplication.javaMainApplication.kt文件,位于如下路径:android/app/src/main/java/com/your-app-name/

        找到 ReactNativeHost 的getPackages()方法,并将你的包添加到getPackages()返回的包列表中。如下面图:

      13. 在19行加入内容。add(MyAppPackage())
    2. 在React-native编写代码。

      1. 导入文件

        import {NativeModules} from 'react-native';
        const {CalendarModule} = NativeModules;
        
      2. 加入一个按钮,并且触发Modules的方法。
        import {Button, NativeModules} from 'react-native';
        const {CalendarModule} = NativeModules;
        function onPress() {CalendarModule.createCalendarEvent('testName', 'testLocation');
        }<Button onPress={onPress} title='按钮'></Button>
      3. 代码截图如下:
      4. 重新执行 npm run android。可以看到按钮出现了。
      5. 点击没有任何反应。
      6. android的代码中,我们执行的逻辑是打印日志。
      7. 我们需要开启adb的日志,在react-native输入 adb logcat。
      8. 查看日志,可以看到输入语句可以输入了。


http://www.ppmy.cn/embedded/113949.html

相关文章

教育政策与智能技术:构建新时代教师队伍

据最新统计&#xff0c;我国目前拥有各级各类教师共计1891.8万人&#xff0c;这一庞大的教师群体不仅支撑起了全球规模最大的教育体系&#xff0c;更成为了推动教育创新与变革的主力军。面对教育数字化的不断发展&#xff0c;育人内容、目标要求、方式方法的全面升级&#xff0…

LabVIEW机械产品几何精度质检系统

随着制造业的发展&#xff0c;对产品质量的要求越来越高&#xff0c;机械产品的几何精度成为衡量其品质的重要指标。为了提高检测效率和精度&#xff0c;开发了一套基于LabVIEW的几何精度质检系统&#xff0c;该系统不仅可以自动化地进行几何尺寸的测量&#xff0c;而且能实时分…

C++【全特化】【半特化】【继承方式权限】【继承使用】【菱形继承的探究】【组合与继承的讨论】

目录 类模板的特化 全特化 偏特化 特化部分参数 对参数类型进行一定的限制 关于*&的讨论 特化的优先级 类模板的声明和定义分离 ​编辑 继承初学 继承概念理解 继承方式 继承权限 继承切割与切片 继承的作用域 继承的默认构造成员函数 继承的默认构造 继承…

运行npm install 时,卡在sill idealTree buildDeps没有反应

一直停留在sill idealTree buildDeps 解决方法 npm config set registry https://registry.npm.taobao.org 配置后用下面命令看是否配置成功 npm config get registry 如果配置还不好使 就执行下行的ssl npm set strict-ssl false 然后执行 npm install 成功执行

python-奖金/贪心的小明

一&#xff1a;奖金 题目描述 企业发放的奖金根据利润提成。利润低于或等于 100000 元的&#xff0c;奖金可提 10%&#xff1b; 利润高于 100000 元&#xff0c;低于 200000 元&#xff08; 100000<I≤200000&#xff09;时&#xff0c;低于 100000 元的部分按 10% 提成&…

使用jackson将xml和对象、List相互转换

文章目录 Jackson Xml常用注解常用的配置属性相关依赖jackson工具类 xml和对象相互转换xml数据实体类xml转为对象对象转为xml xml和List相互转换xml数据实体类List转xmlxml转List方法1方法2JacksonXmlElementWrapper 的 useWrapping 参数区别总结 Jackson Xml Jackson 是一个广…

【C++】STL——vecot的模拟实现

目录 前言总体结构默认成员函数构造函数拷贝构造赋值重载析构函数 vector的相关容量空间以及访问的实现capacity()和size()迭代器实现operator[]reserve vector类对象的修改操作尾插尾删任意位置插入任意位置删除交换和清理 前言 前面我们已经学习了解了vector重要接口的使用&a…

【原创】java+swing+mysql长途客车售票管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片&#xff0c;希望和大家…

如何使用ssm实现基于vue.js的购物商场的设计与实现+vue

TOC ssm616基于vue.js的购物商场的设计与实现vue 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本…

「Netmarble 小镇」活动来了:踏上穿越标志性世界的旅程!

欢迎来到 Netmarble 小镇&#xff01;本次活动从 9 月 13 日持续到 10 月 11 日&#xff0c;是你们体验 Netmarble 著名游戏世界最精彩内容的入口。在为期一个月的庆祝活动中&#xff0c;你们将体验到独家内容、惊险刺激的挑战和全新人物化身的发布&#xff01; 探索 Netmarble…

(黑马点评)八、实现签到统计和uv统计

8.1 签到统计系列功能 8.1.1 认识BitMap结构 BitMap是Redis基于String实现的一种高效的二进制数位的数据结构。因此一个BItMap的最大上线为512M&#xff0c;转为bit位可表示 2^32位 常见命令 SETBIT&#xff1a;向指定位置&#xff08;offset&#xff09;存入一个0或1 GETBIT …

c语言动态内存分配

前言 我们已经掌握的内存开辟⽅式有&#xff1a; int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间 但是上述的开辟空间的⽅式有两个特点&#xff1a; • 空间开辟⼤⼩是固定的。 • 数组在申明的时候&#xff0c;必须指定数组的…

什么?blender可以云渲染了!

在数字艺术和动画制作的世界里&#xff0c;Blender一直是自由和开源软件的佼佼者。它以其强大的功能和灵活性&#xff0c;赢得了全球艺术家和设计师的青睐。但你知道吗&#xff1f;现在&#xff0c;Blender也可以通过渲染 101云渲染来提高渲染效率了&#xff01; 渲染101云渲染…

Python 数学建模——Fitter 拟合数据样本的分布

文章目录 介绍代码实例 介绍 数学建模中很多时候&#xff0c;我们有某个随机变量 X X X 的若干样本 X 1 , X 2 , ⋯ , X n X_1,X_2,\cdots,X_n X1​,X2​,⋯,Xn​&#xff0c;想要还原随机变量 X X X 的概率密度函数 f ( x ) f(x) f(x)。诚然&#xff0c;高斯核密度估计可以…

solidity-19-fallback

接收ETH receive和fallback receive和callback是solidity中两个特殊的回调函数&#xff0c;一个处理接收ETH,一个处理不存在的函数调用。本质上就是吧fallback拆成了两个回调函数。我暂时不知道什么是fallback fallback调用不存在的函数时会被调用也就是这个函数是不是等价于…

Python基础(八)——MySql数据库

一.数据库 【库——>表——>数据】 借助数据库对数据进行组织存储&#xff0c;借助SQL语言对数据库、数据进行操作管理 Mysql数据库 下载&#xff1a;https://www.mysql.com/ 查看是否安装配置成功&#xff1a; 安装DBeaver用于Mysql数据库图形化 安装&#xff1a;…

MySQL——数据库的高级操作(一)数据备份与还原(1)数据的备份

在操作数据库时&#xff0c;难免会发生一些意外造成数据丢失。例如&#xff0c;突然停电、管理员的操作失误都可能导致数据的丢失。为了确保数据的安全&#xff0c;需要定期对数据库进行备份&#xff0c;这样&#xff0c;当遇到数据库中数据丢失或者出错的情况&#xff0c;就可…

Keil MDK5学习记录

2024.9.19 1. no browse information available in ‘xxx’的问题 成功解决Keil MDK5中no browse information available in ‘xxx’的问题-CSDN博客https://blog.csdn.net/bean_business/article/details/1091894452. .c文件中显示函数列表 如何在Keil5里.c文件中显示函数列表…

LeeCode打卡第二十九天

LeeCode打卡第二十九天 第一题&#xff1a;岛屿数量&#xff08;LeeCode第200题&#xff09;: 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。岛屿总是被水包围&#xff0c;并且每座岛屿只…

Tcp三次握手四次挥手和SSL/TLS

1.Tcp三次握手四次挥手&#xff1a; 1.1基本概念&#xff1a; TCP&#xff08;三次握手和四次挥手&#xff09;是用于建立和终止可靠传输连接的过程。TCP协议是一种面向连接的传输层协议&#xff0c;确保数据在网络上可靠、有序地传输。下面详细解释三次握手和四次挥手的工作机…