提问人:DDisciple 提问时间:11/18/2023 更新时间:11/18/2023 访问量:5
通过 gradle dependencySubstitution 定位项目中的特定包
targeting a specific package within a project through gradle dependencySubstitution
问:
我们的项目是一个单体的 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 配置的单独功能的情况下做到这一点?
我尝试添加一个简单的 if 语句,但这不起作用,因为替换语句本身仍将全局应用,因为一旦满足 if 语句,它就没有限制。
我尝试创建一个与“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
}
}
答: 暂无答案
评论