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

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

    • 前言
    • React Native工程目录结构
    • 从indexandroidjs开始讲起
    • 说说怎么用开源项目提供的组件
    • 如何测试
    • 总结

前言

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

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

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

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

在这段时间实践来看,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的入口,我们看下它做了哪些动作:

'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来到导入:

import AudioExample from './js/AudioExample'

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

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

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

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

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

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

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

看下我的原生工程:

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

{"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配置

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包

打包命令

 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来做。大概就这么多,感谢您的阅读。

React Native 音频录制例子来解惑入门相关推荐

  1. React Native 音频录制例子来解惑入门,真的已经讲烂了

    前言 – 本文基于开源Demo:https://github.com/zmxv/react-native-sound,通过这个例子学习怎么开发React Native App. 这段时间都掉到Reac ...

  2. 使用 Agora SDK 开发 React Native 视频通话 App

    在 React Native 的应用中,从头开始添加视频通话功能是很复杂的.要保证低延迟.负载平衡,还要注意管理用户事件状态,非常繁琐.除此之外,还必须保证跨平台的兼容性. 当然有个简单的方法可以做到 ...

  3. React Native基础入门教程:初步使用Flexbox布局

    一.长度的单位 在开始任何布局之前,让我们来首先需要知道,在写React Native组件样式时,长度的不带单位的,它表示"与设备像素密度无关的逻辑像素点". 这个怎么理解呢? 我 ...

  4. React Native 从入门到原理

    React Native 是最近非常火的一个话题,介绍如何利用 React Native 进行开发的文章和书籍多如牛毛,但面向入门水平并介绍它工作原理的文章却寥寥无几. 本文分为两个部分:上半部分用通 ...

  5. React Native 0.20官方入门教程

    最近对React Native比较有兴趣,简单把官网的入门例子做了一下,发现了很多坑,特别是watchman版本过低的问题,导致总是运行不起来.所以 这里特别下载了最新的watchman,进行了源码编 ...

  6. React Native 移动开发入门与实战

    课程简介 本课程主要讲解 React 的基础知识及应用案例,包括 props.state.生命周期函数等,样式和 Flex 布局,React Native 内置的 API 和 UI 组件介绍.路由.状 ...

  7. React Native小白入门学习路径——五

    React Native小白入门学习路径--五 序 "哦天呐!" 这句话成了我在实验室的口头禅, 老师可能觉得我们都是大神吧,都还在看着基础就给布置了那么多任务:写一个RN的TDD ...

  8. Android之React native的介绍和入门指南

    链接:http://zhuanlan.zhihu.com/FrontendMagazine/19996445 数月前,Facebook 对外宣布了正在开发的 React Native 框架,这个框架允 ...

  9. Android native音频:录制播放的实现以及低延迟音频方案

    文章目录 1. 前言 2. 工程准备 3. 低延迟音频原理及功能实现方案 4. 使用OpenSL ES 4.1 播放器实现 4.2 录音器实现 4.3 Echo实现 5. 使用AAudio 5.1 播 ...

最新文章

  1. git ssh创建分支_Git(2):在gitlab中创建开发用户,以及master分支的安全管理
  2. matplotlb添加中文字体
  3. 我的Java开发学习之旅------Java经典排序算法之希尔排序
  4. python3数据库编程_python3+PyQt5 数据库编程--增删改实例
  5. 比学习新技术更重要的是思维的改变
  6. 丑憨批的NLP笔记BERT前置:ATUO encoder,DAE
  7. linux awk 教程,linux awk使用
  8. sqlserver leftjoin出现重复数据_数据库存数据时,逻辑上防重了为啥还会出现重复记录?...
  9. c语言学习进阶-C语言程序实现生成指定区间指定个数随机数
  10. 的watch什么时候触发_Vue中computedamp;methodamp;watch的区别
  11. 在CentOS 7中安装PHP5和PHP7需要的插件
  12. 前端几个常用简单的开发手册拿走不谢
  13. 成为java高级工程师需要什么
  14. 在cmd下载清华镜像
  15. 栈——后进先出(LIFO:last in first out)
  16. 腾讯云“黑石”真相——“物理私服”
  17. 数据结构应用题大题笔记
  18. kindle导入电子书方法
  19. android郭霖博客,Runtime Permissions(郭霖CSDN公开课)
  20. [原创]记某app内购破解 – 安卓逆向菜鸟的初体验

热门文章

  1. Ubuntu 文件同步工具 rsync
  2. 回忆当年高考的一道数学证明题
  3. Flink Could not find any factory for identifier ‘json‘ that implements DeserializationFormatFactory
  4. 飞控开发--气压计MS5611
  5. 前端入门Python
  6. 微信订阅号之客服消息接口回复
  7. 关于10G/40G/100G数据中心光纤布线知识
  8. 智航学编程005(七彩虹)
  9. 阿里云何登成:云时代的IT“新”治理
  10. c语言剪刀石头布游戏程序,什么方法最简单编剪刀石头布程序