expo 解决react-native-video和@cloudflare/realtimekit-react-native 共存

浏览: 28评论: 0
发布时间: 2025-12-02

react-native-video 和 @cloudflare/realtimekit-react-native 都安装,编译android 的时候会出现错误。记录解决方案

问题很明显:该库的 AndroidManifest.xml 引用了 @string/blob_provider_authority,但没有提供对应的资源文件。需要创建资源文件或修改 AndroidManifest.xml。 最简单的解决方案是创建缺失的字符串资源:

1.创建文件夹

mkdir -p /project/node_modules/@cloudflare/realtimekit-react-native/android/src/main/res/values

2.然后添加strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="blob_provider_authority">com.cloudflare.realtimekit.blob</string>
</resources>

问题原因: @cloudflare/realtimekit-react-native 库的 AndroidManifest.xml 第 27 行引用了 @string/blob_provider_authority,但该库没有提供这个字符串资源。 解决方案: 创建了 strings.xml 文件,定义了缺失的 blob_provider_authority 字符串资源。 现在可以重新编译了。

3.后面出现androidx.media3.exoplayer.dash 冲突问题

这是依赖冲突错误。androidx.media3.exoplayer.dash.DashMediaSource$Factory 被重复定义了,说明有多个库包含了相同的 Media3 依赖。需要排除重复的依赖。 有三个模块都在使用 media3-exoplayer-dash:expo-video、react-native-video 和 expo-audio。需要在 app/build.gradle 中排除重复的依赖

android/app/build.gradle 文件的 android 代码块之后,dependencies 代码块之前 添加:

configurations.all {
    exclude group: 'androidx.media3', module: 'media3-exoplayer-dash'
    exclude group: 'androidx.media3', module: 'media3-exoplayer-hls'
    exclude group: 'androidx.media3', module: 'media3-exoplayer-smoothstreaming'
    exclude group: 'androidx.media3', module: 'media3-exoplayer-rtsp'
}
1. **问题原因**
你的项目中有多个库同时依赖 `androidx.media3` 的 Exoplayer 模块:
- `react-native-video`
- `expo-video`
- `expo-audio`

它们都引入了相同的类(如 `DashMediaSource$Factory`),导致 DEX 合并时出现 "Type is defined multiple times" 错误。
### 2. **代码含义**

- **`configurations.all { ... }`**: 对项目中的所有 Gradle 配置生效
- **`exclude group: 'androidx.media3', module: 'media3-exoplayer-dash'`**: 
  - `group`: Maven 依赖的组名(类似于 npm 包的 scope)
  - `module`: 具体的模块名
  - 这行代码表示:从所有依赖中排除 `androidx.media3:media3-exoplayer-dash` 这个模块

### 3. **为什么要排除这些模块**

在你的 `gradle.properties` 中已经设置了:
```textmate
RNVideo_useExoplayerRtsp=false
RNVideo_useExoplayerSmoothStreaming=false
RNVideo_useExoplayerDash=false
RNVideo_useExoplayerHls=false

4.设置gradle.propertiesMetaspaceSize

  • 打开android/gradle.properties 文件,搜索MaxMetaspaceSize 关键字
  • 这一行代码设置成如下
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m