目录
搭建react-native项目
搭建node和jdk的环境
搭建Android的环境
创建React-native项目
运行react-native项目
下载夜神模拟器
使用adb连接夜神浏览器。
运行react-native项目
编写原生安卓的apk
android studio中编写原生代码
在React-native编写代码。
-
搭建react-native项目
-
搭建node和jdk的环境
软件 版本号 测试版本命令 node 20.16.0 node -version jdk 21.0.4 javac -version java的jdk版本(也就是java的环境),可以在以下网站进行下载。https://www.oracle.com/java/technologies/downloads/#java17
输入javac -version有结果返回才算成功。
-
搭建Android的环境
-
注意:记得这一步要有稳定的代理软件,不然后面的步骤都走不下去
-
安装 android studio。可以通过这个网站进行下载: android studio下载链接 安装界面中选择"Custom"选项,确保选中了以下几项:
配置 Android SDK
Android SDK Platform
Android Virtual Device
如果选择框是灰的,你也可以先跳过,稍后再来安装这些组件。
-
安装SDK,Android Studio 默认会安装最新版本的 Android SDK。一些Android Studio的样式是新UI,可以先设置为旧样式。
-
开始管理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"来下载和安装这些组件。 -
通过android studio的下载的sdk可以通过下面图的图纸,进行设置位置。
-
设置Android_Home的环境变量。我们打开通过android studio生成的sdk的目录。
-
加入ANDROID_HOME的配置。设置属性:ANDROID_HOME为D:\environment_software\sdk·
-
加入工具目录到path里面去。
%ANDROID_HOME%\platform-tools %ANDROID_HOME%\tools\bin %ANDROID_HOME%\tools %ANDROID_HOME%\emulator
-
-
创建React-native项目
- 如果你之前全局安装过旧的
react-native-cli
命令行工具,请使用npm uninstall -g react-native-cli
卸载掉它以避免一些冲突:
npm uninstall -g react-native-cli @react-native-community/cli
- 使用命令创建react-native项目
npx @react-native-community/cli@latest init AwesomeProject
- 下载完是下面这个图:
- 如果你之前全局安装过旧的
-
-
运行react-native项目
-
下载夜神模拟器
- 下载地址: 夜神安卓模拟器-手游模拟器电脑版_夜神模拟器官网
- 启动夜神模拟器。
-
使用adb连接夜神浏览器。
- 配置环境变量:有配置这个目录就可以了。
- 输入命令: adb connect 127.0.0.1:62001
- 执行 npm run android
- 会出现以下的错误。(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)
- 解决方案:
- 到SDK的目录下。复制3个文件。下面需要复制到夜神模拟器的目录中去。
- 到夜神模拟器的文件夹。可以在菜单下输入“夜神模拟器”,右键打开文件位置。
- 覆盖文件。
- 然后在sdk目录下,复制一份adb.exe,并重命名为nox_adb.exe。
- 也拷贝到夜神模拟器的目录下。
- 重新启动夜神,在拷贝文件过程中,也需要先关闭夜神模拟器,不然文件不让覆盖。
- 到SDK的目录下。复制3个文件。下面需要复制到夜神模拟器的目录中去。
- 配置环境变量:有配置这个目录就可以了。
-
运行react-native项目
-
在vscode输入 adb connect 127.0.0.1:62001,然后输入 npm run android命令。
- 夜神模拟器的界面效果。
- 修改代码,查看是否变化。
- 可以看到代码确实的变化了。
-
-
-
编写原生安卓的apk
-
android studio中编写原生代码
-
我们使用android studio进行编写代码,有一些代码可以进行提示。
-
使用androiid studio打开rn项目的android文件夹。
-
使用android studio的file下的open。
- 点击自动下载依赖。
- 下载成功后的目录是这样的。
- 在app下的java的com.facebook.react目录下新建一个 CalendarModule.java 文件。
- 在上面那个目录右键,点击New,点击Java class。
- 加入名字 CalendarModule。
- 加入代码。
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 { @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); } @Override public List<NativeModule> createNativeModules( ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); modules.add(new CalendarModule(reactContext)); return modules; } }
- 在com.facebook.react新建一个MyAppPackage.java文件。
- 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 { @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); } @Override public List<NativeModule> createNativeModules( ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); modules.add(new CalendarModule(reactContext)); return modules; } }
-
要注册
CalendarModule
包,你必须将MyAppPackage
添加到 ReactNativeHost 的getPackages()
方法返回的包列表中。打开MainApplication.java
或MainApplication.kt
文件,位于如下路径:android/app/src/main/java/com/your-app-name/
。找到 ReactNativeHost 的
getPackages()
方法,并将你的包添加到getPackages()
返回的包列表中。如下面图: - 在19行加入内容。add(MyAppPackage())
-
-
在React-native编写代码。
-
导入文件
import {NativeModules} from 'react-native'; const {CalendarModule} = NativeModules;
- 加入一个按钮,并且触发Modules的方法。
import {Button, NativeModules} from 'react-native'; const {CalendarModule} = NativeModules; function onPress() { CalendarModule.createCalendarEvent('testName', 'testLocation'); } <Button onPress={onPress} title='按钮'></Button>
- 代码截图如下:
- 重新执行 npm run android。可以看到按钮出现了。
- 点击没有任何反应。
- 在android的代码中,我们执行的逻辑是打印日志。
- 我们需要开启adb的日志,在react-native输入 adb logcat。
- 查看日志,可以看到输入语句可以输入了。
-
-