human: 如何处理七牛云的实时音视频开发准备

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 快速入门 > Android >开发准备

#  开发准备

最近更新时间: 2024-08-23 18:06:05

本文主要介绍开发前的准备工作，包括开发环境的要求、SDK 的导入等。

# 前提条件

  * Android Studio 开发工具，官方[下载地址](http://developer.android.com/intl/zh-cn/sdk/index.html)
  * 有效的[开发者平台账号](https://developer.qiniu.io/rtc/9849/console)

# 设备及系统要求

  * 系统要求：Android 4.3 (API 18) 及以上
  * Java 版本: Java 8+

# 下载并导入实时音视频 SDK

SDK 可通过[公有 repo](https://github.com/pili-engineering/QNRTC-Android) 下载获取。

Repo 中主要包含 demo 示例代码、SDK jar 包，以及 SDK 依赖的动态库文件。 其中，releases 目录下是需要拷贝到您的
Android 工程的所有文件，以目前主流的 armeabi-v7a 架构为例，具体如下：

文件名称| 功能| 大小| 备注  
---|---|---|---  
qndroid-rtc-x.y.z.jar| SDK 库| 785 KB| 必须依赖  
libqndroid_rtc.so| 连麦| 9.33 MB| 必须依赖  
libqnquic.so| 信令协议| 2.2M| 建议依赖  
libqcrash.so| 崩溃搜集| 49.8 KB| 建议依赖  
libqndroid_beauty.so| 美颜| 442 KB| 不用自带美颜，可以不依赖  
libqndroid_amix.so| 混音| 335 KB| 不用混音功能，可以不依赖  
  
> 将 RTC SDK 集成到 App 后，App 的增量大小如下 (包含默认美颜包):
>
>   * armeabi-v7a : 5.4 MB
>   * arm64-v8a : 6.1 MB
>   * x86 : 6.1 MB
>

  * 将 qndroid-rtc-x.y.z.jar 包拷贝到您的工程的 libs 目录下，最新版本可查看[版本更新日志](https://developer.qiniu.com/rtc/product_dynamic/9399/update-log-android)获取。
  * 将动态库拷贝到您的工程对应的目录下，例如：armeabi-v7a 目录下的 so 则拷贝到工程的 jniLibs/armeabi-v7a 目录下

具体可以参考 SDK 包含的 demo 工程，集成后的工程示例如下：

![SDK 集成目录](https://docs.qnsdk.com/RTCDemo.jpg)

# 修改 build.gradle

打开工程目录下的 build.gradle，确保已经**添加了如下 sdk 的库依赖** ，如下所示：

    
    
    dependencies {
        implementation files('libs/qndroid-rtc-x.y.z.jar')
    }
    

**添加对 Java8 语言功能的支持：**

    
    
    android {
        ...
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    

**关于 dns 解析库的依赖，根据您使用版本的不同，需要依赖的具体版本信息如下：**

  * 如果您使用的版本是 v5.0.1+，则不再需要依赖 dns 解析库。
  * 如果您使用的版本是 v4.0.2，则需要依赖 1.0.0 版本 dns 解析库
  * 如果您使用的版本是 v2.5.0+ 以及 v5.0.0，则需要依赖 0.2.17 版本 dns 解析库

依赖示例如下：

    
    
    dependencies {
        implementation 'com.qiniu:happy-dns:1.0.0'
    }
    

# 添加混淆

如果工程中添加了混淆，则七牛的包也需要添加混淆规则。

**若您使用 v5.2.4 之前的版本** ，则混淆规则如下：

    
    
    -keep class org.webrtc.** {*;}
    -dontwarn org.webrtc.**
    -keep class com.qiniu.droid.rtc.**{*;}
    -keep interface com.qiniu.droid.rtc.**{*;}
    

**若您使用 v5.2.4 的版本** ，则混淆规则如下：

    
    
    -keep class org.qnwebrtc.** {*;}
    -dontwarn org.qnwebrtc.**
    -keep class com.qiniu.droid.rtc.**{*;}
    -keep interface com.qiniu.droid.rtc.**{*;}
    

**若您使用的是 v5.2.5 及之后的版本** ，则混淆规则如下：

    
    
    -keep class org.qnwebrtc.** {*;}
    -dontwarn org.qnwebrtc.**
    -keep class com.qiniu.droid.rtc.**{*;}
    -keep class com.qiniu.droid.qcrash.**{*;}
    -keep interface com.qiniu.droid.rtc.**{*;}
    

# 添加相关权限

在工程的 AndroidManifest.xml 中增加如下 `uses-permission` 声明：

    
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    

如果您的应用适配了 API 31 及以上的版本, 为了在通话过程中使用蓝牙耳机设备, 请以以下方式适配：

    
    
    <uses-permission android:name="android.permission.BLUETOOTH"
            android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    

从 Android 6.0 (API 23)
开始，用户需要在应用运行时授予权限，而不是在应用安装时授予，同时权限分为正常权限和危险权限两种类型。在实时音视频 SDK
中，用户需要在进入音视频通话前选择一个适当的时机动态申请 `CAMERA`、`RECORD_AUDIO`、`BLUETOOTH_CONNECT`
权限，关于权限申请，具体可参考 [Android
官方文档](https://developer.android.com/training/permissions/requesting?hl=zh-cn)。

以上内容是否对您有帮助？