Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React Native 音频录制例子来解惑入门

React Native 音频录制例子来解惑入门

作者头像
巫山老妖
发布于 2018-07-20 03:05:42
发布于 2018-07-20 03:05:42
1.5K00
代码可运行
举报
文章被收录于专栏:小巫技术博客小巫技术博客
运行总次数:0
代码可运行

前言

本文基于开源Demo:https://github.com/zmxv/react-native-sound,通过这个例子学习怎么开发React Native App.

这段时间都掉到React Native的坑,踩了不少坑,基本也是别人踩过的坑,既然是别人踩过的坑,那么一般情况下都能找到解决方案,所以前期该踩的一些低级坑都踩了,不过这也让笔者对RN有了新的认识,那就是RN有入门门槛,在新项目考虑用它的时候要慎重。

既然要快速掌握RN,那就先从实际需求出发了,我们要用它来做些什么事情,笔者这里有以下需求:

  • AndroidiOS能够用同一套模板页面,不需要各自开发
  • 能够动态更新,类似热更新的能力
  • 能够使用原生组件实现一些能力,比如音频采集和播放

在这段时间实践来看,RN是能够满足我的需求的,今天就通过一个例子来认识下RN是如何进行开发的。

React Native工程目录结构

首先我们分析下RN的目录结构是怎样的,以我创建的工程为例,如下图:

注:这个是Visual Studio Code,非常好用,用来开发RN也是蛮适合的,推荐一下。

目录结构解析:

  • android (原生Android工程,AS)
  • img(这是我自己创建的,放图片)
  • js(这是我自己创建,js源代码)
  • node_modules(RN依赖的所有模块,需要通过npm去安装)
  • .flowconfig(配置文件,这个文件用于约束js代码的写法,非必须)
  • index.android.js(RN Android的入口,这里注册开发的组件)
  • package.json(RN的全局配置文件,npm init的时候会提示填入内容)

以上,没有接触过的同学可能比较蒙,具体如何搭建React Native开发环境参考:http://reactnative.cn/docs/0.46/getting-started.html#content

从index.android.js开始讲起

关于开发环境的搭建,笔者这里不多说,这个是每个要入门RN的同学都要跨过的一道坎,没有这一步后面的开发调试都是坑,你会发现非常得痛苦。

index.android.js 是Android的入口,我们看下它做了哪些动作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'use strict';

import React from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';

import AudioExample from './js/AudioExample'

class HelloWorld extends React.Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.hello}>Hello, bugly</Text>
      </View>
    )
  }
}
var styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
  },
  hello: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
});

AppRegistry.registerComponent('android', ()=> AudioExample);

稍微解析下,最前面有import的动作,跟java导包是类似,导入工程中需要用到的组件,比如AppRegistry,如果是导入自己开发的组件,也是通过import来到导入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import AudioExample from './js/AudioExample'

导入当前目录下的js目录下的AudioExample.js文件.

然后,我们需要将这个组件注册到我们的App中,那么就有了这一句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AppRegistry.registerComponent('android', ()=> AudioExample);

ok,这样我们就完成了组件注册的操作,以后我们打开RN界面就是以index.android.js注册的组件为入口的。

说说怎么用开源项目提供的组件

我们先看下集成后的效果图:

这个开源组件实现了,录制音频,对音频进行播放、停止、暂停等操作。

看下我的原生工程:

引入了两个library,这两个library都是通过npm install更新下来的,我们看下package.json这个文件的配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "name": "reactnativedemoforandroid",
  "version": "1.0.0",
  "description": "react native demo for android",
  "main": "index.android.js",
  "scripts": {
    "test": "jtest",
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },
  "repository": {
    "type": "git",
    "url": "http://git.code.oa.com/wenjiewu/ReactNativeDemoForAndroid.git"
  },
  "keywords": [
    "android"
  ],
  "author": "wenjiewu",
  "license": "ISC",
  "dependencies": {
    "react": "16.0.0-alpha.6",
    "react-native": "0.44.2",
    "react-native-audio": "^3.2.2",
    "react-native-sound": "^0.8.3"
  }
}

可以看到在依赖里面就引入了具体的组件,我们通过npm命令就能更新下来,具体在node_modules可以看到,down下来之后,我们需要引入到Android工程中:

android/seetings.gradle配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
include ':app'

include ':react-native-sound'
project(':react-native-sound').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sound/android')
include ':react-native-audio'
project(':react-native-audio').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-audio/android')

然后在app工程中的build.gradle进行依赖:

这样就大功告成了? no,还有一步:

需要我们在Application类中添加具体的package到list中:

这样就完整的将开源组件引入到我们工程中了。

如何测试?

如果要在Android原生工程中去运行RN页面,你需要打一个离线的js包

打包命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

具体路径根据你的工程来配.

打包成功的效果如下:

如果你打包的时候就已经报错,说明你的一些依赖环境或者js代码没弄好,需要仔细检查下,打包是影响你最终运行程序的最后一步。

打包成功之后,运行npm start,启动开发服务器(Packager):

最后,直接在Android Studio像正常运行你的程序一样执行run,最后就可以看到效果了。

总结

这段时间入门实践React Natvie最大的感受就是坑多,这个需要比较多耐心去查资料和思考,笔者为了搞定这个都有点上火了,基本后面的障碍就不会是这些边缘性问题,另外RN实时性调试还是蛮爽的,修改js重新加载就能够实时看到效果,对后面调试有很大的帮助。前面说了,RN是有一定的学习门槛的,需要掌握js,一些css、html的基础,在做技术选型的时候应该考虑下你的项目是否适合完全用RN来做,或者一部分用RN来做。大概就这么多,感谢您的阅读。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小巫技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React Native移植原生Android
(一)前言 之前已经写过了有关React Native移植原生Android项目的文章,不过因为RN版本更新的原因吧,跟着以前的文章可能会出现一些问题,对于初学者来讲还是会有很多疑难的困惑的,而且官方的文档移植没有更新,最新版本集成方法已经发生很大变化啦~OK,今天我们用新版本进行走一遍流程,具体原来就不讲了,直接看移植步骤。 (二)前提准备工作 ①.首先我们有一个采用Gradle构建的Android应用项目,这个大家直接采用Android Studio进行创建一个项目即可。我这边新建一个目录TestInt
xiangzhihong
2018/02/05
1.7K0
React Native移植原生Android
React Native 混合开发(iOS篇)
在React Native的应用场景中,有时候一个APP只有部分页面是由React Native实现的,比如:我们常用的携程App,它的首页下的很多模块都是由React Native实现的,这种开发模式被称为混合开发。
CrazyCodeBoy
2018/09/26
8.4K0
新版React Native 混合开发(iOS篇)
在React Native的应用场景中,有时候一个APP只有部分页面是由React Native实现的,比如:我们常用的携程App,它的首页下的很多模块都是由React Native实现的,这种开发模式被称为混合开发。
CrazyCodeBoy
2020/04/24
5.8K0
新版React Native 混合开发(Android篇)
在React Native的应用场景中,有时候一个APP只有部分页面是由React Native实现的,比如:我们常用的携程App,它的首页下的很多模块都是由React Native实现的,这种开发模式被称为混合开发。
CrazyCodeBoy
2020/04/24
7.5K0
React Native 混合开发(Android篇)
在React Native的应用场景中,有时候一个APP只有部分页面是由React Native实现的,比如:我们常用的携程App,它的首页下的很多模块都是由React Native实现的,这种开发模式被称为混合开发。
CrazyCodeBoy
2018/09/26
4.1K0
React Native和Android整合详解
前言 按照React Native的迭代速度,使用官网的文档,已经不能很顺利的实现React Native和Android的有效整合。React Native最新版本 已经是0.39。为了更好的讲解React Native和Android的整合我这里列出我本地的环境: Android Stuidio 2.2稳定版 64位win7操作系统 红米note3双网通普配版 React Native 0.39 具体实践 创建项目 这一步按照AS新建项目向导一步步完成即可,完成后。 在app module下的build
xiangzhihong
2018/02/05
1.6K0
React Native和Android整合详解
从Android到React Native开发(四、打包流程解析和发布为Maven库)
 作为失踪人口,本篇是对前三篇React Native文章的番外补充,主要实现把React Native项目,打包为完整aar库发布到maven,提供库支持的功能,算是小众化的需求吧,不过通过本篇你可以了解:
GSYTech
2018/08/11
2.1K0
从Android到React Native开发(四、打包流程解析和发布为Maven库)
android 添加React Native支持更新版
前言 之前已经写过了有关React Native移植原生Android项目的文章,不过因为RN版本更新的原因吧,跟着以前的文章可能会出现一些问题,对于初学者来讲还是会有很多疑难的困惑的,这里针对最新的
xiangzhihong
2018/02/06
1.2K0
android 添加React Native支持更新版
react-native学习之入门app
1、项目初始化: react-native init MyProject 2、启动项目: cd MyProject react-native start 新开cmd窗口: react-native r
用户1141560
2017/12/26
1.1K0
iOS React Native 混合开发集成React Native
   有时候我们并不是需要全部使用React Native,我们想和原生混合开发,那我们应该怎么办呢。
星宇大前端
2019/01/15
2.1K0
现有Android项目引入ReactNative--九步大法
为什么写这篇文章,因为很多时候我们是需要在原Android工程中添加ReactNative,而不是直接react-native init hello来创建工程,而且官网的说明不是很详细,不是完全针对安卓的,所以本文的必要性不言而喻。
先知先觉
2019/01/21
1.2K0
RN集成到Android原生项目实践
1.新建普通Android项目 新建一个普通的Android项目即可,打开Android Studio -> File -> New -> New Project… 按步骤执行即可。
用户1269200
2018/12/06
2.9K0
React Native热更新方案
随着 React Native 的不断发展完善,越来越多的公司选择使用 React Native 替代 iOS/Android 进行部分业务线的开发,也有不少使用 Hybrid 技术的公司转向了 React Native 。虽然React Native在目前来说仍有不少的坑,不过对于以应用开发为主的App来说完全可以胜任。 概述 在iOS应用开发中,由于Apple严格的审核标准和低效率,iOS应用的发版速度极慢,这对于大多数团队来说是不能接受的,所以热更新对于iOS应用来说就显得尤其重要。而就在前不久,苹果
xiangzhihong
2018/02/06
9.6K0
React Native热更新方案
xcode工程集成 React-native步骤
跟着网上博客步骤来集成RN发现了很多坑,但是博客内容里面却没有记录这些坑,百度了很久都没找到解决方案,最后还是在谷歌搜索里面的一篇文章找到解决办法,在此记录下方便别人快速集成RN。
conanma
2021/11/02
2.4K0
iOS 嵌入React Native 0.55版本
https://facebook.github.io/react-native/docs/integration-with-existing-apps
井九
2024/10/12
1170
React Native(一):基础
React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的UI框架 React 在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用。(来自百度百科)
Helloted
2022/06/07
4190
React Native(一):基础
React-Native入门指南(三)
在不断深入的过程中,发现React-Native布局和样式的坑还有很多,他没有像浏览器那样灵活和有规律可循,其中的规律需要我自己踩坑的时候发现。比如:不存在zIndex,后面的元素覆盖前面的元素;内层元素覆盖外层元素等等,borderRadius的设置,需要考虑到内层元素的位置等等。
疯狂的技术宅
2019/03/28
1.2K0
React-Native入门指南(三)
react-native-web
如果使用了 ART,需要安装 react-art(比如,使用了 react-native-svg 来做RN端icon方案,这就是基于 react-art)
conanma
2021/11/02
3K0
React Native在Android当中实践(四)——代码集成
首先在项目根目录中创建一个空的index.js文件。(注意在0.49版本之前是index.android.js文件) index.js是React Native应用在Android上的入口文件。而且它是不可或缺的!
Demo_Yang
2018/10/15
9540
React-Native入门指南(一)
最近手头的工作繁多,有研究性的项目和系统研发,正好遇到同事离职,接手了框架的UI组件,不仅需要维护和填坑,还需要开发新的功能组件。因为身在H5-Hybird的框架部门,最近团队开始尝试使用React-Native来做些东西。之前也有过开发iOS App的冲动,学了点Object-c,这次正好借此机会进入App开发,以弥补自己在Native-App上的经验不足。
疯狂的技术宅
2019/03/28
2.4K0
React-Native入门指南(一)
相关推荐
React Native移植原生Android
更多 >
LV.0
腾讯Android开发工程师
作者相关精选
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验