开发准备
本文主要介绍开发前的准备工作,包括开发环境的要求、SDK 的导入等。
前提条件
设备及系统要求
- 系统要求:Android 4.3 (API 18) 及以上
- Java 版本: Java 8+
下载并导入实时音视频 SDK
SDK 可通过公有 repo 下载获取。
Repo 中主要包含 demo 示例代码、SDK jar 包,以及 SDK 依赖的动态库文件。 其中,releases 目录下是需要拷贝到您的 Android 工程的所有文件,以目前主流的 armeabi-v7a 架构为例,具体如下:
文件名称 | 功能 | 大小 | 备注 |
---|---|---|---|
qndroid-rtc-x.y.z.jar | SDK 库 | 785 KB | 必须依赖 |
libqndroid_rtc.so | 连麦 | 9.36 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 目录下,最新版本可查看版本更新日志获取。
- 将动态库拷贝到您的工程对应的目录下,例如:armeabi-v7a 目录下的 so 则拷贝到工程的 jniLibs/armeabi-v7a 目录下
具体可以参考 SDK 包含的 demo 工程,集成后的工程示例如下:
修改 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 14 或更高版本为目标平台,在使用屏幕录制功能时,应用清单必须包含权限声明 mediaProjection
前台服务类型:
<manifest ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<application ...>
<service
android:name=".MyMediaProjectionService"
android:foregroundServiceType="mediaProjection"
android:exported="false">
</service>
</application>
</manifest>
从 Android 6.0 (API 23) 开始,用户需要在应用运行时授予权限,而不是在应用安装时授予,同时权限分为正常权限和危险权限两种类型。在实时音视频 SDK 中,用户需要在进入音视频通话前选择一个适当的时机动态申请 CAMERA
、RECORD_AUDIO
、BLUETOOTH_CONNECT
权限,关于权限申请,具体可参考 Android 官方文档。