react-native-track-player icon indicating copy to clipboard operation
react-native-track-player copied to clipboard

Duplicate package names

Open mpivchev opened this issue 2 years ago • 11 comments

Hi, thanks for this great library. I am working in a project that uses a other players that use old exoplayer dependencie and I having these kind of errors:

 Duplicate class com.google.android.exoplayer2.ui.WebViewSubtitleOutput$1 found in modules jetified-exoplayer-ui-2.14.2-runtime (com.google.android.exoplayer:exoplayer-ui:2.14.2) and jetified-exoplayer-ui-r2.16.4-runtime (com.github.DoubleSymmetry.ExoPlayer:exoplayer-ui:r2.16.4)

 Duplicate class com.google.android.exoplayer2.video.spherical.CameraMotionListener found in modules jetified-exoplayer-core-2.14.2-runtime (com.google.android.exoplayer:exoplayer-core:2.14.2) and jetified-exoplayer-core-r2.16.4-runtime (com.github.DoubleSymmetry.ExoPlayer:exoplayer-core:r2.16.4)

It is because Kotlin audio is using the same "com.google.android.exoplayer2" package name, maybe could be it changed for future versions to avoid the conflict ?

Originally posted by @SystemBlad in https://github.com/DoubleSymmetry/react-native-track-player/discussions/1264#discussioncomment-2185744

mpivchev avatar Feb 24 '22 14:02 mpivchev

This issue is still open in 2.2.0-rc3 version @mpivchev can you please let me know when this can be fixed. Thanks

hammadwahab12 avatar Apr 01 '22 07:04 hammadwahab12

Still facing the same issue on my end (with 2.2.0-rc3 version). Further details

rajpootathar avatar Apr 01 '22 11:04 rajpootathar

Hi, currently working on #1447. I will pick this issue up after this. If one of you wants to contribute to this issue so we can get it out sooner, we would greatly appreciate it :)

mpivchev avatar Apr 04 '22 13:04 mpivchev

Thanks man, maybe changing package name solves the problem

hammadwahab12 avatar Apr 04 '22 13:04 hammadwahab12

Hello @mpivchev, any update ?

hammadwahab12 avatar Apr 20 '22 17:04 hammadwahab12

@hammadwahab12 It's still in our to-do list. As mentioned before, if you want this resolved quicker, you are welcome to contribute.

mpivchev avatar Apr 21 '22 08:04 mpivchev

Track this PR which should ultimately resolve this issue: https://github.com/doublesymmetry/KotlinAudio/pull/33

jspizziri avatar Jul 12 '22 16:07 jspizziri

@jspizziri Thanks for all the awesome work! Is there a workaround for this currently (like downgrading) or is that PR probably coming out soon?

KrisLau avatar Jul 27 '22 16:07 KrisLau

I downgraded to 2.1.3, and it works with react-native-video v5.2.0

stereodenis avatar Jul 27 '22 16:07 stereodenis

@stereodenis So 2.1.3 was the original version I was using before upgrading React Native but after upgrading, that version gives me a different problem (Could not find com.google.android.exoplayer:exoplayer-core:2.11.4.) which was fixed in v2.2.0-rc3. Not sure what I should do here

EDIT: ended up using 2.1.3 but with this workaround: https://github.com/doublesymmetry/react-native-track-player/issues/1235#issuecomment-975590885

KrisLau avatar Jul 27 '22 17:07 KrisLau

@KrisLau I have no sound in videos on android with the workaround from the comment

stereodenis avatar Aug 06 '22 20:08 stereodenis

I saw a @dcvz mentioning that you can handle resolution conflicts with gradle, so I came up with the following fix, don't know if there's a better way than replacing one by one, but anyways this works till they move away from their fork


//Add this to the dependencies object in app/build.gradle
    modules {
        module("com.google.android.exoplayer:exoplayer") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-core") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-core", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-ui") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-ui", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-common") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-common", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-smoothstreaming") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-smoothstreaming", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-hls") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-hls", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-dash") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-dash", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        
    }

If you have more conflicts do the following:

Example of Error

Duplicate class com.google.android.exoplayer2.upstream.crypto.AesCipherDataSink found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)

The conflict is with what is in the brackets (): (com.google.android.exoplayer:exoplayer-datasource:2.17.1)

So the conflicting module is: exoplayer-datasource

Resolve the conflict by adding another module to replace:

module("com.google.android.exoplayer:exoplayer-datasource") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-datasource", "replace exoplayer with doublesymmetry.Exoplayer")

Disclaimer

I only use expo-av (that also uses exo-player) for permissions and everything is working, so I'm not certain what they changed with their fork and if using this fork will break other packages

Hannes1 avatar Aug 12 '22 06:08 Hannes1

@Hannes1 I added you code to android/app/build.gradle. But it is still not working. Could you please post me an example?

Here's my build.gradle


import com.android.build.OutputFile
import org.apache.tools.ant.taskdefs.condition.Os

/**
 * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
 * and bundleReleaseJsAndAssets).
 * These basically call `react-native bundle` with the correct arguments during the Android build
 * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
 * bundle directly from the development server. Below you can see all the possible configurations
 * and their defaults. If you decide to add a configuration block, make sure to add it before the
 * `apply from: "../../node_modules/react-native/react.gradle"` line.
 *
 * project.ext.react = [
 *   // the name of the generated asset file containing your JS bundle
 *   bundleAssetName: "index.android.bundle",
 *
 *   // the entry file for bundle generation. If none specified and
 *   // "index.android.js" exists, it will be used. Otherwise "index.js" is
 *   // default. Can be overridden with ENTRY_FILE environment variable.
 *   entryFile: "index.android.js",
 *
 *   // https://reactnative.dev/docs/performance#enable-the-ram-format
 *   bundleCommand: "ram-bundle",
 *
 *   // whether to bundle JS and assets in debug mode
 *   bundleInDebug: false,
 *
 *   // whether to bundle JS and assets in release mode
 *   bundleInRelease: true,
 *
 *   // whether to bundle JS and assets in another build variant (if configured).
 *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
 *   // The configuration property can be in the following formats
 *   //         'bundleIn${productFlavor}${buildType}'
 *   //         'bundleIn${buildType}'
 *   // bundleInFreeDebug: true,
 *   // bundleInPaidRelease: true,
 *   // bundleInBeta: true,
 *
 *   // whether to disable dev mode in custom build variants (by default only disabled in release)
 *   // for example: to disable dev mode in the staging build type (if configured)
 *   devDisabledInStaging: true,
 *   // The configuration property can be in the following formats
 *   //         'devDisabledIn${productFlavor}${buildType}'
 *   //         'devDisabledIn${buildType}'
 *
 *   // the root of your project, i.e. where "package.json" lives
 *   root: "../../",
 *
 *   // where to put the JS bundle asset in debug mode
 *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
 *
 *   // where to put the JS bundle asset in release mode
 *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in debug mode
 *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in release mode
 *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
 *
 *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
 *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
 *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
 *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
 *   // for example, you might want to remove it from here.
 *   inputExcludes: ["android/**", "ios/**"],
 *
 *   // override which node gets called and with what additional arguments
 *   nodeExecutableAndArgs: ["node"],
 *
 *   // supply additional arguments to the packager
 *   extraPackagerArgs: []
 * ]
 */

project.ext.react = [
    enableHermes: false,  // clean and rebuild if changing
]

apply from: "../../node_modules/react-native/react.gradle"
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"

/**
 * Set this to true to create two separate APKs instead of one:
 *   - An APK that only works on ARM devices
 *   - An APK that only works on x86 devices
 * The advantage is the size of the APK is reduced by about 4MB.
 * Upload all the APKs to the Play Store and people will download
 * the correct one based on the CPU architecture of their device.
 */
def enableSeparateBuildPerCPUArchitecture = false

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = false

/**
 * The preferred build flavor of JavaScriptCore.
 *
 * For example, to use the international variant, you can use:
 * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
 *
 * The international variant includes ICU i18n library and necessary data
 * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
 * give correct results when using with locales other than en-US.  Note that
 * this variant is about 6MiB larger per architecture than default.
 */
def jscFlavor = 'org.webkit:android-jsc:+'

/**
 * Whether to enable the Hermes VM.
 *
 * This should be set on project.ext.react and that value will be read here. If it is not set
 * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
 * and the benefits of using Hermes will therefore be sharply reduced.
 */
def enableHermes = project.ext.react.get("enableHermes", false);

/**
 * Architectures to build native code for.
 */
def reactNativeArchitectures() {
    def value = project.getProperties().get("reactNativeArchitectures")
    return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
}

android {
    ndkVersion rootProject.ext.ndkVersion

    compileSdkVersion rootProject.ext.compileSdkVersion

    dependencies {
          implementation "com.google.android.gms:play-services-cast-framework:${safeExtGet('castFrameworkVersion', '+')}"

              modules {
        module("com.google.android.exoplayer:exoplayer") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-core") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-core", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-ui") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-ui", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-common") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-common", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-smoothstreaming") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-smoothstreaming", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-hls") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-hls", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-dash") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-dash", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        
    }
    }

    defaultConfig {
        applicationId "com.megahit"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 2001
        versionName "1.0"
        buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()

        if (isNewArchitectureEnabled()) {
            // We configure the NDK build only if you decide to opt-in for the New Architecture.
            externalNativeBuild {
                ndkBuild {
                    arguments "APP_PLATFORM=android-21",
                        "APP_STL=c++_shared",
                        "NDK_TOOLCHAIN_VERSION=clang",
                        "GENERATED_SRC_DIR=$buildDir/generated/source",
                        "PROJECT_BUILD_DIR=$buildDir",
                        "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
                        "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build"
                    cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1"
                    cppFlags "-std=c++17"
                    // Make sure this target name is the same you specify inside the
                    // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
                    targets "megahit_appmodules"

                    // Fix for windows limit on number of character in file paths and in command lines
                    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                        arguments "NDK_OUT=${rootProject.projectDir.getParent()}\\.cxx",
                            "NDK_APP_SHORT_COMMANDS=true"
                    }
                }
            }
            if (!enableSeparateBuildPerCPUArchitecture) {
                ndk {
                    abiFilters (*reactNativeArchitectures())
                }
            }
        }
    }

    if (isNewArchitectureEnabled()) {
        // We configure the NDK build only if you decide to opt-in for the New Architecture.
        externalNativeBuild {
            ndkBuild {
                path "$projectDir/src/main/jni/Android.mk"
            }
        }
        def reactAndroidProjectDir = project(':ReactAndroid').projectDir
        def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) {
            dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck")
            from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
            into("$buildDir/react-ndk/exported")
        }
        def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) {
            dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck")
            from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
            into("$buildDir/react-ndk/exported")
        }
        afterEvaluate {
            // If you wish to add a custom TurboModule or component locally,
            // you should uncomment this line.
            // preBuild.dependsOn("generateCodegenArtifactsFromSchema")
            preDebugBuild.dependsOn(packageReactNdkDebugLibs)
            preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)

            // Due to a bug inside AGP, we have to explicitly set a dependency
            // between configureNdkBuild* tasks and the preBuild tasks.
            // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
            configureNdkBuildRelease.dependsOn(preReleaseBuild)
            configureNdkBuildDebug.dependsOn(preDebugBuild)
            reactNativeArchitectures().each { architecture ->
                tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure {
                    dependsOn("preDebugBuild")
                }
                tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure {
                    dependsOn("preReleaseBuild")
                }
            }
        }
    }

    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include (*reactNativeArchitectures())
        }
    }
    signingConfigs {
        debug {
            storeFile file('debug.keystore')
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
        release {
            // Caution! In production, you need to generate your own keystore file.
            // see https://reactnative.dev/docs/signed-apk-android.
            signingConfig signingConfigs.debug
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }
    }

    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            // For each separate APK per architecture, set a unique version code as described here:
            // https://developer.android.com/studio/build/configure-apk-splits.html
            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
            def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)
            }

        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])

    //noinspection GradleDynamicVersion
    implementation "com.facebook.react:react-native:+"  // From node_modules

    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"

    debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
        exclude group:'com.facebook.fbjni'
    }

    debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
        exclude group:'com.facebook.flipper'
        exclude group:'com.squareup.okhttp3', module:'okhttp'
    }

    debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
        exclude group:'com.facebook.flipper'
    }

    if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
        implementation jscFlavor
    }
}

if (isNewArchitectureEnabled()) {
    // If new architecture is enabled, we let you build RN from source
    // Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
    // This will be applied to all the imported transtitive dependency.
    configurations.all {
        resolutionStrategy.dependencySubstitution {
            substitute(module("com.facebook.react:react-native"))
                    .using(project(":ReactAndroid")).because("On New Architecture we're building React Native from source")
        }
    }
}

// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.implementation
    into 'libs'
}

apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

def isNewArchitectureEnabled() {
    // To opt-in for the New Architecture, you can either:
    // - Set `newArchEnabled` to true inside the `gradle.properties` file
    // - Invoke gradle with `-newArchEnabled=true`
    // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
    return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
}

def safeExtGet(prop, fallback) {
  rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
}

DennisdeWitNL avatar Aug 12 '22 06:08 DennisdeWitNL

@DennisdeWitNL What error do you get? I don't have an example app at the momement I'll see If I have time this weekend

Hannes1 avatar Aug 12 '22 06:08 Hannes1

@DennisdeWitNL What error do you get? I don't have an example app at the momement I'll see If I have time this weekend

There are the errors:

* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
   > Duplicate class com.google.android.exoplayer2.database.BuildConfig found in modules jetified-exoplayer-database-2.17.1-runtime (com.google.android.exoplayer:exoplayer-database:2.17.1) and jetified-exoplayer-database-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-database:r2.17.2)
     Duplicate class com.google.android.exoplayer2.database.DatabaseIOException found in modules jetified-exoplayer-database-2.17.1-runtime (com.google.android.exoplayer:exoplayer-database:2.17.1) and jetified-exoplayer-database-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-database:r2.17.2)
     Duplicate class com.google.android.exoplayer2.database.DatabaseProvider found in modules jetified-exoplayer-database-2.17.1-runtime (com.google.android.exoplayer:exoplayer-database:2.17.1) and jetified-exoplayer-database-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-database:r2.17.2)
     Duplicate class com.google.android.exoplayer2.database.DefaultDatabaseProvider found in modules jetified-exoplayer-database-2.17.1-runtime (com.google.android.exoplayer:exoplayer-database:2.17.1) and jetified-exoplayer-database-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-database:r2.17.2)
     Duplicate class com.google.android.exoplayer2.database.ExoDatabaseProvider found in modules jetified-exoplayer-database-2.17.1-runtime (com.google.android.exoplayer:exoplayer-database:2.17.1) and jetified-exoplayer-database-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-database:r2.17.2)
     Duplicate class com.google.android.exoplayer2.database.StandaloneDatabaseProvider found in modules jetified-exoplayer-database-2.17.1-runtime (com.google.android.exoplayer:exoplayer-database:2.17.1) and jetified-exoplayer-database-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-database:r2.17.2)
     Duplicate class com.google.android.exoplayer2.database.VersionTable found in modules jetified-exoplayer-database-2.17.1-runtime (com.google.android.exoplayer:exoplayer-database:2.17.1) and jetified-exoplayer-database-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-database:r2.17.2)
     Duplicate class com.google.android.exoplayer2.database.package-info found in modules jetified-exoplayer-database-2.17.1-runtime (com.google.android.exoplayer:exoplayer-database:2.17.1) and jetified-exoplayer-database-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-database:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.AssetDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.AssetDataSource$AssetDataSourceException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.BaseDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.BuildConfig found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.ByteArrayDataSink found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.ByteArrayDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.ContentDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.ContentDataSource$Api31 found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.ContentDataSource$ContentDataSourceException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSchemeDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSink found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSink$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSource$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSourceException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSourceInputStream found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSourceUtil found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSpec found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSpec$1 found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSpec$Builder found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSpec$Flags found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DataSpec$HttpMethod found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DefaultDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DefaultDataSource$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DefaultDataSourceFactory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DefaultHttpDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DefaultHttpDataSource$1 found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DefaultHttpDataSource$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DefaultHttpDataSource$NullFilteringHeadersMap found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.DummyDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.FileDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.FileDataSource$Api21 found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.FileDataSource$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.FileDataSource$FileDataSourceException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpDataSource$BaseFactory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpDataSource$CleartextNotPermittedException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpDataSource$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException$Type found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpDataSource$InvalidContentTypeException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpDataSource$RequestProperties found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.HttpUtil found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.PriorityDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.PriorityDataSource$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.PriorityDataSourceFactory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.RawResourceDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.RawResourceDataSource$RawResourceDataSourceException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.ResolvingDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.ResolvingDataSource$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.ResolvingDataSource$Resolver found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.StatsDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.TeeDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.TransferListener found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.UdpDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.UdpDataSource$UdpDataSourceException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.Cache found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.Cache$CacheException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.Cache$Listener found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheDataSink found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheDataSink$CacheDataSinkException found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheDataSink$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheDataSource$1 found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheDataSource$CacheIgnoredReason found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheDataSource$EventListener found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheDataSource$Factory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheDataSource$Flags found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheEvictor found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheFileMetadata found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheFileMetadataIndex found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheKeyFactory found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheSpan found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheWriter found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CacheWriter$ProgressListener found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CachedContent found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CachedContent$Range found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CachedContentIndex found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CachedContentIndex$DatabaseStorage found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CachedContentIndex$LegacyStorage found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.CachedContentIndex$Storage found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.ContentMetadata found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.ContentMetadataMutations found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.DefaultContentMetadata found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.NoOpCacheEvictor found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.ReusableBufferedOutputStream found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.SimpleCache found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.SimpleCache$1 found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.SimpleCacheSpan found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.cache.package-info found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.crypto.AesCipherDataSink found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.crypto.AesCipherDataSource found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.crypto.AesFlushingCipher found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.crypto.package-info found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     Duplicate class com.google.android.exoplayer2.upstream.package-info found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)
     
     Go to the documentation to learn how to <a href="d.android.com/r/tools/classpath-sync-errors">Fix dependency resolution errors</a>.

DennisdeWitNL avatar Aug 12 '22 06:08 DennisdeWitNL

@DennisdeWitNL Okay so you need to replace more modules because your package uses more of exoplayers modules

For example

Duplicate class com.google.android.exoplayer2.database.BuildConfig found in modules jetified-exoplayer-database-2.17.1-runtime (com.google.android.exoplayer:exoplayer-database:2.17.1) and jetified-exoplayer-database-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-database:r2.17.2)

You'll have to replace the following com.google.android.exoplayer:exoplayer-database:2.17.1 as well with the following:

module("com.google.android.exoplayer:exoplayer-database") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-database", "replace exoplayer with doublesymmetry.Exoplayer")
}

Just go through your error logs and see what yo need to replace further

Hannes1 avatar Aug 12 '22 06:08 Hannes1

I saw a @dcvz mentioning that you can handle resolution conflicts with gradle, so I came up with the following fix, don't know if there's a better way than replacing one by one, but anyways this works till they move away from their fork

//Add this to the dependencies object in app/build.gradle
    modules {
        module("com.google.android.exoplayer:exoplayer") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-core") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-core", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-ui") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-ui", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-common") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-common", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-smoothstreaming") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-smoothstreaming", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-hls") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-hls", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-dash") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-dash", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        
    }

Disclaimer

I only use expo-av (that also uses exo-player) for permissions and everything is working, so I'm not certain what they changed with their fork and if using this fork will break other packages

Yes, this is what I was talking about 🙂 If I remember correctly we don’t make any breaking changes in Exoplayer we just extend functionality. So things should hopefully still work if the other modules are using a version of Exoplayer not so behind the one we forked from.

@jspizziri tagging you here cause this is likely something that might come up again — not sure if you were familiar with this

dcvz avatar Aug 12 '22 07:08 dcvz

Edit: these are all the module replaces that should avoid the duplicate classes problem

modules {
        module("com.google.android.exoplayer:exoplayer") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-core") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-core", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-ui") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-ui", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-common") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-common", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-smoothstreaming") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-smoothstreaming", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-hls") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-hls", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-dash") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-dash", "replace exoplayer with doublesymmetry.Exoplayer")
        }

            module("com.google.android.exoplayer:exoplayer-database") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-database", "replace exoplayer with doublesymmetry.Exoplayer")
        }
            module("com.google.android.exoplayer:exoplayer-datasource") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-datasource", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        
    }

DennisdeWitNL avatar Aug 12 '22 15:08 DennisdeWitNL

@DennisdeWitNL You are probably looking at the wrong thing

Example

 Duplicate class com.google.android.exoplayer2.upstream.crypto.AesCipherDataSink found in modules jetified-exoplayer-datasource-2.17.1-runtime (com.google.android.exoplayer:exoplayer-datasource:2.17.1) and jetified-exoplayer-datasource-r2.17.2-runtime (com.github.doublesymmetry.Exoplayer:exoplayer-datasource:r2.17.2)

The problem isn't with class com.google.android.exoplayer2.upstream the conflict is with what is in the brackets (): (com.google.android.exoplayer:exoplayer-datasource:2.17.1)

So the conflicting module is: exoplayer-datasource

Hannes1 avatar Aug 12 '22 16:08 Hannes1

still facing issue with [email protected] + [email protected] https://gist.github.com/stereodenis/8ffe0a7e22a403f94746161253ec9dbb

stereodenis avatar Aug 15 '22 13:08 stereodenis

still facing issue with [email protected] + [email protected] https://gist.github.com/stereodenis/8ffe0a7e22a403f94746161253ec9dbb

See the workaround for now @stereodenis

Hannes1 avatar Aug 15 '22 13:08 Hannes1

@Hannes1 I got crash after build (build succeeded)

2022-08-15 16:51:40.042 12453-12549/ru.gid.app E/unknown:NativeModuleInitError: Failed to create NativeModule "UIManager"
    java.lang.VerifyError: Verifier rejected class com.brentvatne.exoplayer.ReactExoplayerViewManager: android.view.View com.brentvatne.exoplayer.ReactExoplayerViewManager.createViewInstance(com.facebook.react.uimanager.ThemedReactContext) failed to verify: android.view.View com.brentvatne.exoplayer.ReactExoplayerViewManager.createViewInstance(com.facebook.react.uimanager.ThemedReactContext): [0x4]  can't resolve returned type 'Reference: android.view.View' or 'Unresolved Reference: com.brentvatne.exoplayer.ReactExoplayerView' (declaration of 'com.brentvatne.exoplayer.ReactExoplayerViewManager' appears in /data/app/~~050eft-_w8E0iqx1OUND2A==/ru.gid.app-u6-UzOUf_au3XTPt8NJYqQ==/base.apk!classes18.dex)
        at com.brentvatne.react.ReactVideoPackage.createViewManagers(ReactVideoPackage.java:42)
        at com.facebook.react.ReactInstanceManager.getOrCreateViewManagers(ReactInstanceManager.java:932)
        at com.swmansion.reanimated.ReanimatedPackage.createUIManager(ReanimatedPackage.java:75)
        at com.swmansion.reanimated.ReanimatedPackage.getModule(ReanimatedPackage.java:31)
        at com.facebook.react.TurboReactPackage$ModuleHolderProvider.get(TurboReactPackage.java:159)
        at com.facebook.react.TurboReactPackage$ModuleHolderProvider.get(TurboReactPackage.java:147)
        at com.facebook.react.bridge.ModuleHolder.create(ModuleHolder.java:191)
        at com.facebook.react.bridge.ModuleHolder.getModule(ModuleHolder.java:156)
        at com.facebook.react.bridge.NativeModuleRegistry.getModule(NativeModuleRegistry.java:172)
        at com.facebook.react.bridge.CatalystInstanceImpl.getNativeModule(CatalystInstanceImpl.java:502)
        at com.facebook.react.bridge.CatalystInstanceImpl.getNativeModule(CatalystInstanceImpl.java:478)
        at com.facebook.react.uimanager.UIManagerHelper.getUIManager(UIManagerHelper.java:89)
        at com.facebook.react.uimanager.UIManagerHelper.getUIManager(UIManagerHelper.java:47)
        at com.facebook.react.ReactInstanceManager.attachRootViewToInstance(ReactInstanceManager.java:1241)
        at com.facebook.react.ReactInstanceManager.setupReactContext(ReactInstanceManager.java:1186)
        at com.facebook.react.ReactInstanceManager.access$1600(ReactInstanceManager.java:138)
        at com.facebook.react.ReactInstanceManager$5$2.run(ReactInstanceManager.java:1139)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
        at android.os.Looper.loop(Looper.java:236)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:228)
        at java.lang.Thread.run(Thread.java:923)
    
    
    --------- beginning of crash
2022-08-15 16:51:40.044 12453-12549/ru.gid.app E/AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
    Process: ru.gid.app, PID: 12453
    java.lang.VerifyError: Verifier rejected class com.brentvatne.exoplayer.ReactExoplayerViewManager: android.view.View com.brentvatne.exoplayer.ReactExoplayerViewManager.createViewInstance(com.facebook.react.uimanager.ThemedReactContext) failed to verify: android.view.View com.brentvatne.exoplayer.ReactExoplayerViewManager.createViewInstance(com.facebook.react.uimanager.ThemedReactContext): [0x4]  can't resolve returned type 'Reference: android.view.View' or 'Unresolved Reference: com.brentvatne.exoplayer.ReactExoplayerView' (declaration of 'com.brentvatne.exoplayer.ReactExoplayerViewManager' appears in /data/app/~~050eft-_w8E0iqx1OUND2A==/ru.gid.app-u6-UzOUf_au3XTPt8NJYqQ==/base.apk!classes18.dex)
        at com.brentvatne.react.ReactVideoPackage.createViewManagers(ReactVideoPackage.java:42)
        at com.facebook.react.ReactInstanceManager.getOrCreateViewManagers(ReactInstanceManager.java:932)
        at com.swmansion.reanimated.ReanimatedPackage.createUIManager(ReanimatedPackage.java:75)
        at com.swmansion.reanimated.ReanimatedPackage.getModule(ReanimatedPackage.java:31)
        at com.facebook.react.TurboReactPackage$ModuleHolderProvider.get(TurboReactPackage.java:159)
        at com.facebook.react.TurboReactPackage$ModuleHolderProvider.get(TurboReactPackage.java:147)
        at com.facebook.react.bridge.ModuleHolder.create(ModuleHolder.java:191)
        at com.facebook.react.bridge.ModuleHolder.getModule(ModuleHolder.java:156)
        at com.facebook.react.bridge.NativeModuleRegistry.getModule(NativeModuleRegistry.java:172)
        at com.facebook.react.bridge.CatalystInstanceImpl.getNativeModule(CatalystInstanceImpl.java:502)
        at com.facebook.react.bridge.CatalystInstanceImpl.getNativeModule(CatalystInstanceImpl.java:478)
        at com.facebook.react.uimanager.UIManagerHelper.getUIManager(UIManagerHelper.java:89)
        at com.facebook.react.uimanager.UIManagerHelper.getUIManager(UIManagerHelper.java:47)
        at com.facebook.react.ReactInstanceManager.attachRootViewToInstance(ReactInstanceManager.java:1241)
        at com.facebook.react.ReactInstanceManager.setupReactContext(ReactInstanceManager.java:1186)
        at com.facebook.react.ReactInstanceManager.access$1600(ReactInstanceManager.java:138)
        at com.facebook.react.ReactInstanceManager$5$2.run(ReactInstanceManager.java:1139)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
        at android.os.Looper.loop(Looper.java:236)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:228)
        at java.lang.Thread.run(Thread.java:923)
    
    
    --------- beginning of system

I've added only two module replacements

dependencies {
    modules {
        module("com.google.android.exoplayer:exoplayer") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer", "replace exoplayer with doublesymmetry.Exoplayer")
        }
        module("com.google.android.exoplayer:exoplayer-common") {
            replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-common", "replace exoplayer with doublesymmetry.Exoplayer")
        }
    }
}

stereodenis avatar Aug 15 '22 13:08 stereodenis

@stereodenis mmm this might be a react native video issue, it mentions turbomodules does the package support turbomodules?

Or does react native video work without react native track player changes?

Hannes1 avatar Aug 15 '22 14:08 Hannes1

@Hannes1 it works for me on 6.0.0-alpha1, but not on 5.2.0

stereodenis avatar Aug 15 '22 16:08 stereodenis

If anyone needs to do this in a Managed Expo project, here's a config plugin that will replace the dependencies:

const { withAppBuildGradle } = require('@expo/config-plugins');

const replaceDependencies = (fileContent) => {
  const insertString = `
    dependencies {
        modules {
            module("com.google.android.exoplayer:exoplayer") {
                replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer", "replace exoplayer with doublesymmetry.Exoplayer")
            }
            module("com.google.android.exoplayer:exoplayer-core") {
                replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-core", "replace exoplayer with doublesymmetry.Exoplayer")
            }
            module("com.google.android.exoplayer:exoplayer-ui") {
                replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-ui", "replace exoplayer with doublesymmetry.Exoplayer")
            }
            module("com.google.android.exoplayer:exoplayer-common") {
                replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-common", "replace exoplayer with doublesymmetry.Exoplayer")
            }
            module("com.google.android.exoplayer:exoplayer-smoothstreaming") {
                replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-smoothstreaming", "replace exoplayer with doublesymmetry.Exoplayer")
            }
            module("com.google.android.exoplayer:exoplayer-hls") {
                replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-hls", "replace exoplayer with doublesymmetry.Exoplayer")
            }
            module("com.google.android.exoplayer:exoplayer-dash") {
                replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-dash", "replace exoplayer with doublesymmetry.Exoplayer")
            }
            module("com.google.android.exoplayer:exoplayer-database") {
                replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-database", "replace exoplayer with doublesymmetry.Exoplayer")
            }
            module("com.google.android.exoplayer:exoplayer-datasource") {
                replacedBy("com.github.doublesymmetry.Exoplayer:exoplayer-datasource", "replace exoplayer with doublesymmetry.Exoplayer")
            }
        }
    }
`;
  const startIndex = fileContent.indexOf('splits {');
  return `${fileContent.slice(0, startIndex)}${insertString}\n\t${fileContent.slice(startIndex)}`;
}

const withRNTP = (initialConfig) =>
  withAppBuildGradle(initialConfig, (config) => {
    const updatedFile = replaceDependencies(config.modResults.contents);
    config.modResults.contents = updatedFile;
    return config;
  });

module.exports = withRNTP;

I put that file in a folder called plugins and then used it in my app.config.ts file like so:

...
    plugins:
      [
        ['./plugins/withAdapty'],
        ['./plugins/withRNTP'],
      ],
...

russriser avatar Aug 18 '22 08:08 russriser

@russriser the changes that fix this are merged in https://github.com/doublesymmetry/KotlinAudio/pull/38. Just need to wait for it to be included in a new version

KrisLau avatar Aug 18 '22 13:08 KrisLau

This should be fixed in 3.1.0. If you still have issues, please reopen this.

mpivchev avatar Aug 22 '22 09:08 mpivchev

@mpivchev still facing the issue in 3.2.0.

waheedakhtar694 avatar Nov 14 '22 12:11 waheedakhtar694

+1 me too, using rntp ^3.2.0 and react-native-video ^5.2.1 .

In react-native-video I had to add these two lines in settings.gradle to play my encrypted video

include ':react-native-video'
project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android-exoplayer')

but after these lines I am getting above conflict , RNV package is using exoplayer:2.13.3

ahmadsyed avatar Sep 13 '23 19:09 ahmadsyed