DataBinding(库必须使用完全相同的版本规范)
DataBinding (libraries must use the exact same version specification)
Gradle:
buildscript {
ext.kotlin_version = '1.2.10'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
===========================
ext {
support_version = '27.0.2'
dagger_version = '2.14.1'
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//kotlin
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
//support
implementation "com.android.support:appcompat-v7:$support_version"
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
//rx
implementation 'io.reactivex.rxjava2:rxjava:2.1.8'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
//test
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
//Dagger 2
implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
provided 'org.glassfish:javax.annotation:10.0-b28'
}
它对我来说效果很好,但如果我启用 DataBinding:
dataBinding {
enabled = true
}
我收到警告 com.android.support:appcompat-v7:
所有 com.android.support 库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本 27.0.2、21.0.3。示例包括 com.android.support:animated-vector-drawable:27.0.2 和 com.android.support:support-v4:21.0.3 更多... (Ctrl+F1)
并在 ContextCompat 中丢失方法 checkSelfPermission:
ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_SMS)
未解决的引用:checkSelfPermission
为什么启用 DataBinding 会导致这样的效果?
Why enabling DataBinding leads to such an effect?
在幕后,dataBinding { enabled = true }
为支持生成的数据绑定代码的 运行time 库添加了一些依赖项:
com.android.databinding:adapters
com.android.databinding:baseLibrary
com.android.databinding:library
这些依赖关系目前依赖于 旧 版本的 support-v4
(21.0.3)。这反过来会触发您看到的构建错误,因为 Google 试图强制所有支持库工件都在同一版本上。
FWIW,我提交 an issue 以在数据绑定框架中修复此问题。我希望它能在宇宙热寂之前的某个时候被修复。
解决方法是添加您自己对 support-v4
的依赖:
implementation "com.android.support:support-v4:$support_version"
这将导致 Gradle 引入您请求的版本,该版本比数据绑定正在寻找的版本更新,因此 Gradle 假定它是可以的。事实上,它可能 不 没问题,但到目前为止,在我的工作中,我还没有 运行 遇到任何问题。
如果您收到 Gradle 同步错误...
Android dependency 'com.android.support:support-v4' has different
version for the compile (21.0.3) and runtime (27.0.2) classpath. You
should manually set the same version via DependencyResolution
... 尝试 api com.android.support:support-v4:27.0.2
而不是实施 com.android.support:support-v4:$support_version
.
Gradle:
buildscript {
ext.kotlin_version = '1.2.10'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
===========================
ext {
support_version = '27.0.2'
dagger_version = '2.14.1'
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//kotlin
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
//support
implementation "com.android.support:appcompat-v7:$support_version"
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
//rx
implementation 'io.reactivex.rxjava2:rxjava:2.1.8'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
//test
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
//Dagger 2
implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
provided 'org.glassfish:javax.annotation:10.0-b28'
}
它对我来说效果很好,但如果我启用 DataBinding:
dataBinding {
enabled = true
}
我收到警告 com.android.support:appcompat-v7:
所有 com.android.support 库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本 27.0.2、21.0.3。示例包括 com.android.support:animated-vector-drawable:27.0.2 和 com.android.support:support-v4:21.0.3 更多... (Ctrl+F1)
并在 ContextCompat 中丢失方法 checkSelfPermission:
ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_SMS)
未解决的引用:checkSelfPermission
为什么启用 DataBinding 会导致这样的效果?
Why enabling DataBinding leads to such an effect?
在幕后,dataBinding { enabled = true }
为支持生成的数据绑定代码的 运行time 库添加了一些依赖项:
com.android.databinding:adapters
com.android.databinding:baseLibrary
com.android.databinding:library
这些依赖关系目前依赖于 旧 版本的 support-v4
(21.0.3)。这反过来会触发您看到的构建错误,因为 Google 试图强制所有支持库工件都在同一版本上。
FWIW,我提交 an issue 以在数据绑定框架中修复此问题。我希望它能在宇宙热寂之前的某个时候被修复。
解决方法是添加您自己对 support-v4
的依赖:
implementation "com.android.support:support-v4:$support_version"
这将导致 Gradle 引入您请求的版本,该版本比数据绑定正在寻找的版本更新,因此 Gradle 假定它是可以的。事实上,它可能 不 没问题,但到目前为止,在我的工作中,我还没有 运行 遇到任何问题。
如果您收到 Gradle 同步错误...
Android dependency 'com.android.support:support-v4' has different version for the compile (21.0.3) and runtime (27.0.2) classpath. You should manually set the same version via DependencyResolution
... 尝试 api com.android.support:support-v4:27.0.2
而不是实施 com.android.support:support-v4:$support_version
.