现有Android项目引入ReactNative--九步大法

本文详细介绍了如何在现有的Android工程中添加ReactNative,包括创建package.json,安装react和react-native模块,添加启动脚本,配置build.gradle,设置权限,添加组件,配置DevSettingsActivity,实现ReactApplication等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么写这篇文章,因为很多时候我们是需要在原Android工程中添加ReactNative,而不是直接react-native init hello来创建工程,而且官网的说明不是很详细,不是完全针对安卓的,所以本文的必要性不言而喻。
#创建Android原生工程
新建Android原生工程,这里就不详细叙述了,如下图:
这里写图片描述

这里写图片描述

点击***finish***到这里Android原生工程创建完成。

运行一下看下效果:

这里写图片描述

#动态添加ReactNative
###第一步:初始化package.json文件:
在工程根目录下的CMD中输入npm init,然后会生成package.json文件
这里写图片描述

⚠️:这里name不能使用大写,如上动图所示,填写完相应的信息后会在根目录中生成相应的package.json文件,里面内容如下:

{
  "name": "reactnativeapp",
  "version": "1.0.0",
  "description": "demo",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "libin",
  "license": "ISC"
}

###第二步:在package.json文件中添加启动脚本:

"start": "node node_modules/react-native/local-cli/cli.js start"

RNPolymerPo 是一个基于 React Native 的生活类聚合实战项目,目前由于没有 MAC 设备,所以没有适配 iOS,感兴趣的可以自行适配 app 目录下相关 JS 代码即可。 获取代码与编译调试打包 如下所有步骤及说明均为 React Native Android 的 DIY,涉及命令均为 Ubuntu 环境,Windows 类推即可。 1. 获取代码及模块安装和签名配置 执行如下命令进行代码下载及模块安装: $ git clone https://github.com/yanbober/RNPolymerPo.git $ cd RNPolymerPo $ npm install //如果觉得慢可以先切换到国内 npm 镜像源再执行此命令 配置 Gradle 个人签名路径及属性: //1. 把你个人的签名 my-release-key.keystore 文件(不知道如何生成请自行搜索)放到 RNPolymerPo 工程的 android/app 文件夹下。 //2. 编辑工程的 gradle.properties 文件,添加如下的代码(注意把其中的****替换为你自己相应密码)。 MYAPP_RELEASE_STORE_FILE=my-release-key.keystore MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=***** MYAPP_RELEASE_KEY_PASSWORD=***** 2. 编译打包 APK 文件 编译生成在线快速调试 Debug 开发包,执行如下命令: $ adb reverse tcp:8081 tcp:8081 $ react-native start //开启本地 JS 服务 $ react-native run-android //新终端的 RNPolymerPo 目录下执行 编译生成 release 包,执行如下命令: $ cd android && ./gradlew assembleRelease 拓展规划 下一个版本准备做的事情: 兼容性处理; 夜间模式; 热修复及 PHP 服务端编写; 多语言切换等问题评估;
### React Native 项目迁移到 Uni App 的最佳实践 #### 技术背景概述 Uni App 是一种跨平台开发框架,允许开发者通过一套代码构建多个平台的应用程序(如 iOS、Android 和小程序)。React Native 同样是一种流行的跨平台开发工具,专注于移动端应用的性能优化和用户体验提升。然而,两者在生态体系和技术栈上存在显著差异[^1]。 --- #### 迁移或重写的挑战分析 1. **语法与组件库的不同** React Native 使用 JavaScript/TypeScript 编写,并依赖于其特定的组件库(如 `View`、`Text` 等),而 Uni App 基于 Vue.js 生态系统,采用的是不同的组件命名方式(如 `<view>`、`<text>`)。 2. **状态管理机制的区别** React Native 可能使用 Redux 或 MobX 来管理复杂的状态逻辑,而 Uni App 更倾向于 Vuex 或 Pinia 作为状态管理解决方案[^3]。 3. **插件生态系统差异** React Native 提供了大量的第三方模块支持硬件功能访问(如相机、蓝牙等),而在 Uni App 中则需要调用官方 API 或自定义扩展插件[^2]。 4. **样式系统的不同** React Native 支持 Flexbox 样式声明并通过 JS 对象形式书写 CSS 属性;相比之下,Uni App 则完全遵循标准 Web 开发中的 CSS 文件编写方法[^1]。 --- #### 实现迁移的具体步骤 ##### 方法一:逐步重构法 如果目标是从现有React Native 工程平滑过渡到 Uni App,则可以考虑以下策略: 1. 创建一个新的空白 Uni App 工程结构; 2. 将原有业务逻辑逐一分解并重新封装为符合 Vue 单文件组件规范的形式; 3. 替换掉所有 RN 特有的 UI 组件实例化语句为对应的 uView/uParse 等替代品; 4. 调整网络请求部分以适配 axios/vuex-actions 结构而非 fetch/promise-chain 流水线模式[^3]。 ##### 方法二:全新设计法 当决定彻底抛弃旧版实现时,建议按照如下流程操作: 1. 设计统一的数据模型接口文档以便前后端对接顺畅无阻塞; 2. 构建基础模板页面布局满足视觉稿需求同时预留动态加载区域位置; 3. 引入必要的公共函数集合简化重复劳动过程比如日期格式转换器之类实用型辅助类; 4. 定义清晰的角色权限划分规则确保安全防护措施到位防止越权行为发生; 5. 最终完成整个产品的迭代上线测试验证环节确认各项指标均达到预期效果后再正式发布版本给最终用户群体试用反馈意见持续改进产品品质直至满意为止[^2]。 --- #### 示例代码片段展示 以下是将简单的列表渲染从 React Native 移植到 Uni App 的例子: 原始 React Native 代码: ```javascript import React, { useState } from 'react'; import { View, Text, FlatList } from 'react-native'; const Item = ({ title }) => ( <View> <Text>{title}</Text> </View> ); export default function App() { const [data, setData] = useState([ { id: '1', title: 'First Item' }, { id: '2', title: 'Second Item' } ]); return ( <FlatList data={data} renderItem={({ item }) => <Item title={item.title} />} keyExtractor={(item) => item.id.toString()} /> ); } ``` 对应转化后的 Uni App 代码: ```vue <template> <scroll-view class="list"> <block v-for="(item, index) in dataList" :key="index"> <view>{{ item.title }}</view> </block> </scroll-view> </template> <script> export default { data() { return { dataList: [ { id: '1', title: '第一个条目' }, { id: '2', title: '第二个条目' } ] }; } }; </script> <style scoped> .list view { padding: 10px; border-bottom-width: 1px; border-color: #ccc; } </style> ``` --- #### 注意事项总结 - 在实际执行过程中可能会遇到一些难以预料的技术难题,因此务必提前做好充分调研工作以及应急预案准备以防万一情况出现能够迅速响应处理解决问题不影响整体进度安排计划表正常推进下去直到顺利完成全部任务结束为止[^1]。 - 若涉及复杂的动画特效表现或者高度定制化的交互体验场景下,可能还需要额外投入更多精力去研究学习掌握相关技能知识点才能更好地达成既定目标要求水平线上下游客户满意度最大化原则指导下不断努力奋斗前行道路上创造更大价值回报社会大众共同进步成长壮大起来吧! ---
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值