# SDK接入指南

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

- Android_Play_SDK 接入指南

  - 1. 概述

    - 1.1阅读对象
    - 1.2 术语和缩写解释
    - 1.3 最低版本要求

  - 2. 开发准备

    - 2.1 开发环境
    - 2.2 混淆配置
    - 2.3 权限配置

  - 3. 快速集成

    - 3.1 maven集成

    - 3.2 本地集成

    - 3.3 配置动态库

    - 3.4 初始化SDK

      - 3.4.1 主动调用api
      - 3.4.2 关键代码示例

  - 4. 集成说明

## 1. 概述

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

### 1.1阅读对象

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

- 具备基本的Android开发能力
- 准备接入HD视频直播或者回放功能
- 对HD云直播产品使用方法有基础的了解，使用帮助地址。

### 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的二次混淆

    -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节点下添加权限

    <!--观看直播需要权限-->   <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节点添加

    android:usesCleartextTraffic="true"

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

    android:allowNativeHeapPointerTagging="false"

## 3. 快速集成

### 3.1 maven集成

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

            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版本：

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

4.x版本：

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

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

### 3.2 本地集成

v3.17.6版本以下的Release包中包含离线集成的文件，下载地址为：Live_Android_Play_SDK

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

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

### 3.3 配置动态库

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

    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方法中

    xxxxxxxxxxif (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)

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