#  SDK接入指南

请仔细阅读本文档，以便您后续以正确的方式接入SDK的其他功能

- [Android_Play_SDK 接入指南](#android_play_sdk-接入指南)
  - [1. 概述](#1-概述)
    - [1.1阅读对象](#11阅读对象)
    - [1.2 术语和缩写解释](#12-术语和缩写解释)
    - [1.3 最低版本要求](#13-最低版本要求)
  - [2. 开发准备](#2-开发准备)
    - [2.1 开发环境](#21-开发环境)
    - [2.2 混淆配置](#22-混淆配置)
    - [2.3 权限配置](#23-权限配置)
  - [3. 快速集成](#3-快速集成)
    - [3.1 maven集成](#31-maven集成)
    - [3.2 本地集成](#32-本地集成)
    - [3.3 配置动态库](#33-配置动态库)
    - [3.4 初始化SDK](#34-初始化sdk)
      - [3.4.1 主动调用api](#341-主动调用api)
      - [3.4.2 关键代码示例](#342-关键代码示例)
  - [4. 集成说明](#4-集成说明)

## 1. 概述

Android Live SDK 是适用于Android平台的云直播SDK，使用此SDK可以与HD视频云直播服务进行对接

### 1.1阅读对象

本文档为技术文档，需要阅读者：

- 具备基本的Android开发能力
- 准备接入HD视频直播或者回放功能
- 对HD云直播产品使用方法有基础的了解，[使用帮助地址](http://doc.bokecc.com/live)。

### 1.2 术语和缩写解释

无

### 1.3 最低版本要求
Android 5.0

## 2. 开发准备

### 2.1 开发环境

- Android Studio  3.0之上
- Android SDK   官方SDK
- targetSdkVersion版本 不高于29，minSdkVersion不小于19（>=4.14.0或>=3.23.0，为21-33）

### 2.2 混淆配置

SDK代码已经过混淆，如果需要对接入应用进行代码混淆，需要在配置文件中增加如下代码，防止SDK的二次混淆

```groovy
-keep class com.bokecc.**{*;}
-keep interface com.bokecc.**{*;}
-keep class org.apache.http.**{*;}
-keep interface org.apache.http.**{*;}

-keep class tv.**{*;}
-keep interface tv.**{*;}

-keep class org.webrtc.**{*;}
-keep interface org.webrtc.**{*;}
-keep class com.intel.webrtc.base.**{*;}
-keep interface com.intel.webrtc.base.**{*;}

-keep class com.tencent.smtt.**{*;}
-keep interface com.tencent.smtt.**{*;}
-keep class com.tencent.tbs.** {*;}
-keep interface com.tencent.tbs.** {*;}

-dontwarn com.bokecc.sdk.mobile.**
-dontwarn com.hd.http.**
-keep class com.hd.http.**{ *;}
-keep interface com.hd.http.**{ *;}
-keep class io.agora.**{*;}
-keep interface io.agora.**{*;}
-keep class com.aliyun.**{*;}
-keep interface com.aliyun.**{*;}
-keep class com.cicada.**{*;}
-keep interface com.cicada.**{*;}
-keep class com.alibaba.**{*;}
-keep interface com.alibaba.**{*;}
-keep class com.alivc.**{*;}
-keep interface com.alivc.**{*;}
```

### 2.3 权限配置

AndroidManifest.xml中manifest节点下添加权限

```xml
<!--观看直播需要权限-->   
<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />   
<!--连麦需要权限-->  
<uses-permission android:name="android.permission.VIBRATE" />       
<uses-permission android:name="android.permission.CAMERA" />         
<uses-permission android:name="android.permission.RECORD_AUDIO" />   
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
```

如果targetSdkVersion>=29在manifest 中application节点添加

```xml
android:usesCleartextTraffic="true"
```

如果targetSdkVersion>=30在manifest 中application节点添加

```
android:allowNativeHeapPointerTagging="false"
```



## 3. 快速集成

### 3.1 maven集成

从3.8.0版本开始提供maven集成方式，如果需要使用maven远程引用需要在项目根目录build.gradle中的repositories节点添加

```groovy
        maven {
            url 'http://nexus-app.bokecc.com/repository/sdk-group/'
        }
        maven {
            url "https://maven.aliyun.com/repository/public/"
        }
        maven {
            url "https://maven.aliyun.com/repository/releases/"
        }
        maven { url 'https://jitpack.io' }
```

然后在需要引用的模块路径下的build.gradle中添加

3.x版本：

```groovy
dependencies {
    implementation 'com.bokecc:dwlivesdk:${version}'
}
```

4.x版本：

```groovy
dependencies {
  	//docsdk为文档模块，内部依赖dwlivesdk，无需再次引入dwlivesdk
    implementation 'com.bokecc.doc:docsdk:${version}'
}
```

说明：4.x版本将文档UI独立成模块，内部依赖同版本dwlivesdk，参考 [文档SDK接入指南](其他/文档SDK接入指南)

### 3.2 本地集成

v3.17.6版本以下的Release包中包含离线集成的文件，下载地址为：[Live_Android_Play_SDK](https://hdgit.bokecc.com/ccvideo/Live_Android_Play_SDK/-/releases)

参考demo将libs文件夹下的jar包和so包导入到项目相应位置

v3.17.6及其后续版本不再提供本地依赖，如有需要，请联系客服


### 3.3 配置动态库

在app的build.gradle里面的defaultConfig中配置so库cpu平台：

```groovy
ndk {
    abiFilters 'armeabi-v7a', 'arm64-v8a'
}
```

### 3.4 初始化SDK

#### 3.4.1 主动调用api

直播需要主动调用的方法在DWLiveEngine.java (DWLiveEngine为单例) 中，如下：

| 方法                                     | 说明                         |
| :--------------------------------------- | :--------------------------- |
| init(Application app)                    | 初始化，默认关闭日志         |
| init(Application app, boolean enableLog) | 初始化，主动配置是否开启日志 |
| init(final Application app, boolean enableLog, boolean enableX5) | 初始化，主动配置是否开启日志，是否开启x5 |
| init(final Application app, boolean enableLog, boolean enableX5,boolean isMultiplayer) | 初始化，主动配置是否开启日志，是否开启x5，是否初始化多人连麦 |

#### 3.4.2 关键代码示例

初始化必须在登录之前进行，建议在Application在onCreate方法中

```java
if (DWLiveEngine.getInstance() == null) {
    // 初始化SDK true:开启日志,开启x5内核
  	DWLiveEngine.init(app, true, true);            
    
} else {                                                  
    Log.i(TAG, "DWLiveEngine has init");                  
}                                                         
```

## 4. 集成说明

请仔细配置上述过程，完成以上操作才可以开始集成直播和回放的功能

## 5. 注意事项

为了增加效率，在线回放和离线回放会使用sd卡进行数据缓存。缓存的路径为/data/data/包名/file/metadata2/ (对应的方法为getFilesDir)

用户可自行根据缓存区大小来清除缓存
