DataBinding(库必须使用完全相同的版本规范)

0 data-binding android android-support-library

摇篮:

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"
}
Run Code Online (Sandbox Code Playgroud)

=========================

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'
}
Run Code Online (Sandbox Code Playgroud)

它对我很有用,但是如果我启用了DataBinding:

dataBinding {
    enabled = true
}
Run Code Online (Sandbox Code Playgroud)

我收到了警告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 more ...(Ctrl + F1)

在ContextCompat中丢失方法checkSelfPermission:

ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_SMS)
Run Code Online (Sandbox Code Playgroud)

未解决的参考:checkSelfPermission

Gradle文件

为什么启用DataBinding会产生这样的效果?

Com*_*are 6

为什么启用DataBinding会产生这样的效果?

在幕后,dataBinding { enabled = true }为支持生成的数据绑定代码的运行时库添加了一些依赖项:

  • com.android.databinding:adapters
  • com.android.databinding:baseLibrary
  • com.android.databinding:library

反过来,这些依赖项目前依赖于版本的support-v4(21.0.3).反过来,这会触发您看到的构建错误,因为Google正在尝试强制所有支持库工件都在同一版本上.

FWIW,我提出了一个问题,以便在数据绑定框架中修复此问题.我希望它能在宇宙热死之前的某个时候得到修复.

解决方法是添加您自己的依赖项support-v4:

implementation "com.android.support:support-v4:$support_version"
Run Code Online (Sandbox Code Playgroud)

这将导致Gradle拉入您请求的版本,这比数据绑定正在寻找的版本更新,因此Gradle假定它可以.事实上,它可能不太好,但到目前为止,在我的工作中,我没有遇到任何问题.