【发布时间】:2017-07-29 19:43:54
【问题描述】:
催化剂
我将 Android Studio 升级到 2.3,将 Gradle 插件升级到 3.3
最初的问题
将 Gradle 插件更新到 3.3 后,我收到错误消息“错误:SDK 构建工具修订版 (23.0.3) 对于项目 ':mymodulename' 而言太低。最低要求是 25.0.0”
我尝试将 buildToolsVersion 调整为 25.0.2 并将 compileSdkVersion 调整为 25,以及所有 com.android.support 依赖项(因为它们的主要版本需要匹配 compileSdkVersion)。该调整解决了这个问题,但后来我意识到我的应用程序还不支持 Nougat,所以我将 compileSdkVersion 减少到我的 targetSdkVersion 23。关于构建工具太低的错误消息仍然消失了,所以我以为我很清楚.
第一个依赖错误
在将 compileSdkVersion 降低到 23 后,我尝试重建,并看到几个类似于“错误:(3) 检索项目的父项时出错:找不到与给定名称匹配的资源 'android:TextAppearance.Material.Widget.Button .Borderless.Colored'”。我意识到我忘记更改我的 com.android.support 依赖项,以便它们的主要版本再次匹配较低的 compileSdkVersion,所以我将它们降低到 23.3.0
第二个依赖错误
解决第一个依赖错误后,我能够再次编译和运行我的应用程序。但是,在我的第一个 com.android.support 依赖项下仍然有一个红色波浪线,错误说明“所有 com.android.support 库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本 24.0 .0, 23.3.0。示例包括 com.android.support:support-v4:24.0.0 和 com.android.support:animated-vector-drawable:23.3.0"
我的 build.gradle 中没有任何内容专门引用 24.0.0,看吧:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '25.0.2'
defaultConfig {
applicationId ...
minSdkVersion 16
targetSdkVersion 23
versionCode ...
versionName ...
}
buildTypes {
debug{
debuggable true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions{
//check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
dexOptions{
jumboMode true
}
}
repositories {
// You can also use jcenter if you prefer
mavenCentral()
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
//android support libs etc.
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:support-v13:23.3.0'
compile 'com.android.support:mediarouter-v7:23.3.0'
compile 'com.android.support:recyclerview-v7:23.3.0'
//snackbar support
compile 'com.android.support:design:23.3.0'
//Facebook Android SDK
compile 'com.facebook.android:facebook-android-sdk:4.7.0'
//Facebook Audience Network SDK. Only versions 4.6.0 and above are available
compile 'com.facebook.android:audience-network-sdk:4.7.0'
//gplay services dependencies
compile 'com.google.android.gms:play-services-plus:10.0.1'
compile 'com.google.android.gms:play-services-analytics:10.0.1'
compile 'com.google.android.gms:play-services-location:10.0.1'
//provides Firebase Analytics
compile 'com.google.firebase:firebase-core:10.0.1'
//provides Google Mobile Ads SDK, a.k.a the AdMob service.
compile 'com.google.firebase:firebase-ads:10.0.1'
//dependencies required by the InMobi ads SDK
compile 'com.squareup.picasso:picasso:2.5.2'
}
apply plugin: 'com.google.gms.google-services'
依赖树
为了找出 24.0.0 依赖项的来源,我使用“./gradlew -q dependencies mymodulename:dependencies --configuration compile”创建了一个依赖项树。输出是:
compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:23.3.0
| +--- com.android.support:support-vector-drawable:23.3.0
| | \--- com.android.support:support-v4:23.3.0 -> 24.0.0
| | \--- com.android.support:support-annotations:24.0.0
| +--- com.android.support:animated-vector-drawable:23.3.0
| | \--- com.android.support:support-vector-drawable:23.3.0 (*)
| \--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
+--- com.android.support:support-v13:23.3.0
| \--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
+--- com.android.support:mediarouter-v7:23.3.0
| +--- com.android.support:appcompat-v7:23.3.0 (*)
| \--- com.android.support:palette-v7:23.3.0
| \--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
+--- com.android.support:design:23.3.0
| +--- com.android.support:appcompat-v7:23.3.0 (*)
| +--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
| \--- com.android.support:recyclerview-v7:23.3.0
| +--- com.android.support:support-v4:23.3.0 -> 24.0.0 (*)
| \--- com.android.support:support-annotations:23.3.0 -> 24.0.0
+--- com.facebook.android:facebook-android-sdk:4.7.0
| +--- com.parse.bolts:bolts-android:1.2.0
| \--- com.android.support:support-v4:[22,23) -> 24.0.0 (*)
+--- com.facebook.android:audience-network-sdk:4.7.0
| \--- com.google.android.gms:play-services-ads:7.8.0 -> 10.0.1
| +--- com.google.android.gms:play-services-ads-lite:10.0.1
| | \--- com.google.android.gms:play-services-basement:10.0.1
| | \--- com.android.support:support-v4:24.0.0 (*)
| +--- com.google.android.gms:play-services-base:10.0.1
| | +--- com.google.android.gms:play-services-basement:10.0.1 (*)
| | \--- com.google.android.gms:play-services-tasks:10.0.1
| | \--- com.google.android.gms:play-services-basement:10.0.1 (*)
| +--- com.google.android.gms:play-services-clearcut:10.0.1
| | +--- com.google.android.gms:play-services-base:10.0.1 (*)
| | \--- com.google.android.gms:play-services-basement:10.0.1 (*)
| +--- com.google.android.gms:play-services-basement:10.0.1 (*)
| \--- com.google.android.gms:play-services-gass:10.0.1
| \--- com.google.android.gms:play-services-basement:10.0.1 (*)
+--- com.google.android.gms:play-services-plus:10.0.1
| +--- com.google.android.gms:play-services-base:10.0.1 (*)
| \--- com.google.android.gms:play-services-basement:10.0.1 (*)
+--- com.google.android.gms:play-services-analytics:10.0.1
| +--- com.google.android.gms:play-services-analytics-impl:10.0.1
| | +--- com.google.android.gms:play-services-base:10.0.1 (*)
| | \--- com.google.android.gms:play-services-basement:10.0.1 (*)
| +--- com.google.android.gms:play-services-base:10.0.1 (*)
| +--- com.google.android.gms:play-services-basement:10.0.1 (*)
| \--- com.google.android.gms:play-services-tagmanager-v4-impl:10.0.1
| +--- com.google.android.gms:play-services-analytics-impl:10.0.1 (*)
| +--- com.google.android.gms:play-services-base:10.0.1 (*)
| \--- com.google.android.gms:play-services-basement:10.0.1 (*)
+--- com.google.android.gms:play-services-location:10.0.1
| +--- com.google.android.gms:play-services-base:10.0.1 (*)
| +--- com.google.android.gms:play-services-basement:10.0.1 (*)
| \--- com.google.android.gms:play-services-tasks:10.0.1 (*)
+--- com.google.firebase:firebase-core:10.0.1
| \--- com.google.firebase:firebase-analytics:10.0.1
| +--- com.google.android.gms:play-services-basement:10.0.1 (*)
| +--- com.google.firebase:firebase-common:10.0.1
| | +--- com.google.android.gms:play-services-basement:10.0.1 (*)
| | \--- com.google.android.gms:play-services-tasks:10.0.1 (*)
| \--- com.google.firebase:firebase-analytics-impl:10.0.1
| +--- com.google.android.gms:play-services-basement:10.0.1 (*)
| +--- com.google.firebase:firebase-iid:10.0.1
| | +--- com.google.android.gms:play-services-basement:10.0.1 (*)
| | \--- com.google.firebase:firebase-common:10.0.1 (*)
| \--- com.google.firebase:firebase-common:10.0.1 (*)
+--- com.google.firebase:firebase-ads:10.0.1
| +--- com.google.android.gms:play-services-ads:10.0.1 (*)
| \--- com.google.firebase:firebase-analytics:10.0.1 (*)
+--- com.squareup.picasso:picasso:2.5.2
\--- com.android.support:recyclerview-v7:23.3.0 (*)
(*) - dependencies omitted (listed previously)
问题
依赖树语法“lib 版本 -> 不同的 lib 版本”是什么意思?具体来说,当树说“com.android.support:support-v4:23.3.0 -> 24.0.0”时,它是什么意思?
如果在我的一些其他依赖项中对 com.android.support 版本 24.xx 库有隐式要求(请参阅 com.google.android.gms:play-services-basement:10.0.1,具体取决于 com .android.support:support-v4:24.0.0),为什么这个build.gradle没有在前面提到的Android Studio、Gradle插件和buildToolsVersion更新之前抛出错误?
如何确保我的所有依赖项都与 compileSdkVersion 23 兼容?
【问题讨论】:
-
如果使用 25 编译但使用版本 23 支持库会发生什么情况?
-
您应该将依赖关系树作为文本发布。突出显示它并按 Ctrl-K 以保留格式。此键盘快捷键添加了代码块所需的空格。
-
请记住,
compileSdkVersion不会改变您的应用程序的行为 - 这将是targetSdkVersion,如 this blog post 中所述。您应该始终使用最新版本的 Android 进行编译,即使您没有针对它。 -
@ianhanniballake compileSdkVersion 本身不会改变应用程序在运行时的行为,但它确实开辟了使用可能在旧系统上崩溃的新 API 的可能性(假设调用没有通过支持库)。我更喜欢让计算机努力防止人为错误而不是相反,并且将编译错误作为安全网很好。尽管如此,链接的文章还是为针对最新的 SDK 进行编译提供了一个引人注目的观点;我想您只需要大量依赖 Lint 并检查文档中的“在 API 级别 X 中添加”注释(至少)以了解不熟悉的方法
-
@Code-Apprentice 如果我针对 25 进行编译并使用版本 23 的支持库,我可以毫无错误地编译,但 Gradle 会用愤怒的曲线强调版本 23 的依赖关系。悬停注释说“此支持库不应使用与 compileSdkVersion (25) 不同的版本 (23)”
标签: android android-studio gradle android-gradle-plugin