【发布时间】:2015-01-25 02:00:05
【问题描述】:
我有一个 Android 项目,它依赖于不同的模块,每个模块都依赖于 android support-v4 库的不同版本
1) 我的应用还依赖于最新的 android support-v4 库(修订版 21),所以在这个 build.gralde 中我写了这样一行:
dependencies {
compile 'com.android.support:support-v4:21.0.0'
}
2) Facebook SDK (v.3.15) 模块也依赖于 android 支持库 v4,但修订版 13 及其 build.gradle 文件显示:
dependencies {
compile 'com.android.support:support-v4:13.0.+'
compile files('../libs/bolts.jar')
}
3) 以及另外一个模块,在这种情况下我们可以调用 Module3,它也依赖于 support-v4,但与其他模块的修订版不同,如下所示:
dependencies {
compile 'com.android.support:support-v4:19.0.+'
compile files('../libs/bolts.jar')
}
问题:
1) gradle 如何处理不同的 support-v4 库版本?
2) 它到底是做什么的?
3) 就 apk 大小而言是什么意思?
【问题讨论】:
-
"gradle 如何处理不同的 support-v4 库版本?" -- 根据
build.gradlecompile设置,它要么使用匹配所有内容的设置,要么构建失败。应用程序中的任何给定依赖项只能有一个副本,否则会在类名上发生冲突。 -
您能否为这个例子更好地解释一下,好吗?这是否意味着 gradle 使用这个示例的最新版本?
-
我的直觉是它会导致构建失败,因为该库没有同时具有三个不同版本的版本。但是,我没有玩过这个场景。如果你已经设置好了,运行一个 Gradle 依赖关系报告来看看它到底会使用什么:gradle.org/docs/current/userguide/…(参见“列出项目依赖关系”)
-
我没有带我的笔记本电脑,我可以试试看它是否失败。无论如何,我的意图是强制每个模块使用最新版本。但我害怕破坏这些模块中的某些东西。你有什么建议?
-
“无论如何,我的意图是强制每个模块使用最新版本”——有办法做到这一点,使用
exclude选项表示你想要一个依赖项(例如,Facebook SDK)但是要排除某些传递依赖项,您将在其他地方感到满意。 “你有什么建议?” ——大量的测试。 :-)
标签: android gradle android-gradle-plugin android-support-library