## 云直播lib包冲突问题自查手册


- [云直播lib包冲突问题自查手册](#云直播lib包冲突问题自查手册)
- [一、说明](#一说明)
- [二、具体冲突解决方案](#二具体冲突解决方案)
  - [1、hdplayer](#1hdplayer)
  - [2、drm](#2drm)
  - [3、io.agora.rtc](#3ioagorartc)
  - [4、commonLib](#4commonlib)
  - [5、腾讯tbs](#5腾讯tbs)
  - [6、云课堂](#6云课堂)


## 一、说明
云直播SDK为客户提供了远程maven引用来方便用户解决由于lib包相同导致的冲突问题

冲突问题分类如下：

1. 云直播lib库和本公司其他产品libs库的冲突问题
2. 云直播lib库和客户引用的三方库的冲突问题
3. 远程和本地冲突的问题

针对第一种情况，优先保留云直播libs库

针对第二种情况，根据不同情况可选择性保留一个

针对第三种情况，建议使用远程引用，删除本地引用



## 二、具体冲突解决方案

下面具体介绍会产生冲突的几个库

 

### 1、hdplayer

云直播中引用如下

```java
 api('com.bokecc:hdplayer:1.1.0')
```

- **如果用户集成了本公司的点播功能**，可通过删除点播的引用来解决冲突

  ```java
  // 和点播冲突的库如下，可删除该引用
  com.bokecc:speedplay:2.19.3
  ```

- **如用户集成了三方库包含了ijkplayer**，可通过exclude的方式去除三方库中的引用

  以客户引用了GSYVideoPlayer为例，可通过下面的方式将三方库中ijkplayer排除掉

  ```java
  api ('com.shuyu:GSYVideoPlayer:7.1.4'){
      exclude group: 'com.shuyu', module: 'gsyVideoPlayer-java'
      exclude group: 'com.shuyu', module: 'gsyVideoPlayer-armv7a'
      exclude group: 'com.shuyu', module: 'gsyVideoPlayer-arm64'
      exclude group: 'com.shuyu', module: 'gsyVideoPlayer-x86'
  }
  ```

  

### 2、drm

云直播中引用库如下

```java
implementation 'com.bokecc:drm:1.2.1'
```

- **如果集成了本公司的点播功能**，可通过排除的方式去除云直播里的drm库

  排除方式如下所示：

  ```java
  api('com.bokecc:dwlivesdk:3.14.0') {
      exclude group: 'com.bokecc', module: 'drm'
  }
  ```

  也可删除点播库里相同的引用，云直播不做任何处理

- **针对旧版本的兼容** 

  由于旧版点播的drm库使用到了org.apache.http.legacy包， 如用户使用的三方库中包含org.apache.http.legacy，和项目中的com.bokecc:http出现冲突，需要去除项目中使用到的httplib或者org.apache.http.legacy.jar

  和点播旧版冲突的包如下，

  ```java
  // 云直播
  com.bokecc:drm:1.1.0 
  // 云点播
  com.bokecc:http:1.2.0 
  com.bokecc:drmv6:2.19.0 
  ```

  

### 3、io.agora.rtc

云直播引用远程库如下

```java
 implementation 'io.agora.rtc:full-sdk:2.4.1'
```

- **如果集成了本公司的云课堂（小班课）功能**，可通过排除云直播中的库

  排除方式如下

  ```groovy
   api('com.bokecc:dwlivesdk:3.14.0') {
       // agora连麦库冲突  兼容小班课
       exclude group: 'io.agora.rtc', module: 'full-sdk'
  }
  ```
  
  小班课中引用到该库的远程包如下
  
  ```java
  com.bokecc:ClassBaseLib:6.1.10  // 里面用到了上述库
  ```
  
  

- **如果用户集成了agora更高版本的库**，可通过排除云直播中的库

  ```java
  api('com.bokecc:dwlivesdk:3.14.0') {
       // agora连麦库冲突  兼容小班课
       exclude group: 'io.agora.rtc', module: 'full-sdk'
  }
  
  // 引用更高版本的库
   implementation 'io.agora.rtc:full-sdk:x.y.z'
  ```

  目前云直播只使用到了该库的部分功能，经测试agora新版本是兼容老版本的，升级之后连麦功能可正常使用



### 4、commonLib

云直播引用远程库如下

```java
implementation('com.bokecc:commonLib:0.1.15') {
     exclude group: "com.tencent.mars"
}
```

- **如果集成了本公司的云课堂（小班课）功能**，可通过排除云直播中的库

  排除方式如下

  ```java
   api('com.bokecc:dwlivesdk:3.14.0') {
       // 冲突  兼容小班课
      exclude group: 'com.bokecc', module: 'commonLib'
  }
  ```

### 5、腾讯tbs

云直播引用远程库如下

```java
 implementation 'com.tencent.tbs.tbssdk:sdk:43903'
```

3.14.0版本之后用户可根据需要控制是否开启 x5内核，如果开启了x5内核，需要关注冲突的问题

- **如果用户集成了腾讯tbs更高版本的库** ，可根据具体场景排除相应的库

  排除云直播里tbs库

  ```java
  api('com.bokecc:dwlivesdk:3.14.0') {
       // 冲突  兼容小班课
      exclude group: 'com.tencent.tbs.tbssdk', module: 'sdk'
  }
  ```

  

### 6、云课堂

云直播引用远程库如下

```java
 implementation ('com.bokecc:ClassBaseLib:last-version')
```

- **如果用户同时集成了云课堂**，可根据具体场景排除相应的库

  排除云直播里云课堂库

  ```java
  api('com.bokecc:dwlivesdk:4.x.x') {
       // 冲突  兼容云课堂
      exclude group: 'com.bokecc', module: 'ClassBaseLib'
  }
  ```

  
