通过 gradle dependencySubstitution 定位项目中的特定包

targeting a specific package within a project through gradle dependencySubstitution

提问人:DDisciple 提问时间:11/18/2023 更新时间:11/18/2023 访问量:5

问:

我们的项目是一个单体的 Android 应用程序——目前依赖于 2 个不同的库来流式传输不同的视频内容、HLS/DASH 和常规视频内容。我们面临的问题是,其中一个库实际上只是另一个库的包装器,这导致我们在 Gradle 中对依赖解析策略进行硬编码,以避免重复的库错误。

configurations.all { config ->     
    resolutionStrategy { 
        dependencySubstitution {             
            substitute module("com.google.android.exoplayer:exoplayer-core:$exoplayerVersion") with module("com.axinom.sdk:exoplayer-library-core:$axinomVersion")      
        }
        cacheChangingModulesFor 0, 'seconds' // only affects snapshots   
    } 
}

这种方法的问题在于,这将全局应用,即使在包含 HLS/DASH 功能的包中也是如此,假设此包位于“org.example.project.features.livetv”。我想有条件地将上述语句解析策略应用于除此包之外的所有位置。

如何在不将应用程序模块化为具有自己的 gradle 配置的单独功能的情况下做到这一点?

  1. 我尝试添加一个简单的 if 语句,但这不起作用,因为替换语句本身仍将全局应用,因为一旦满足 if 语句,它就没有限制。

  2. 我尝试创建一个与“livetv”包绑定的单独配置,该配置将像应用程序一样包含所有核心依赖项,但不会应用替换子句,但我从中得到了各种构建错误——可能是因为我做得不正确。见下文:


// Define a custom configuration for the livetv package
configurations {
    livetvCompile
}

// Global substitution rule
configurations.all {
    if (name != 'livetvCompile') { // Apply substitution to all configurations except 'livetvCompile'
        resolutionStrategy.dependencySubstitution {
            substitute module("com.google.android.exoplayer:exoplayer-core:$exoplayerVersion") with module("com.axinom.sdk:exoplayer-library-core:$axinomVersion")
        }
    }
}

// Dependencies for 'livetvCompile' configuration
configurations.livetvCompile {
    // Define dependencies specific to the 'livetv' package
    implementation("com.google.android.exoplayer:exoplayer-core:$exoplayerVersion")
}

// Apply 'livetvCompile' configuration to the 'livetv' package
sourceSets {
    main {
        java {
            srcDir 'src/main/java'
            exclude '**/livetv/**'
        }
    }
    livetv {
        java {
            srcDir 'src/main/java'
            include '**/livetv/**'
        }
        compileClasspath += configurations.livetvCompile
    }
}

Android Gradle 依赖项解析

评论


答: 暂无答案