代码之家  ›  专栏  ›  技术社区  ›  Alon Parker

数据绑定(库必须使用完全相同的版本规范)

  •  0
  • Alon Parker  · 技术社区  · 6 年前

    格拉德尔:

    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 {
        enabled = true
    }
    

    我收到一条警告消息。安卓支持:appcompat-v7:

    所有com。安卓支持库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本27.0.2、21.0.3。示例包括com。安卓支持:动画矢量可绘制:27.0.2和com。安卓支持:support-v4:21.0.3更多。。。(Ctrl+F1)

    并且在ContextCompat中丢失了方法checkSelfPermission:

    ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_SMS)
    

    未解析的引用:checkSelfPermission

    Gradle file

    为什么启用数据绑定会产生这样的效果?

    2 回复  |  直到 6 年前
        1
  •  6
  •   CommonsWare    6 年前

    为什么启用数据绑定会产生这样的效果?

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

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

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

    FWIW,我存档了 an issue 在数据绑定框架中修复此问题。我希望它能在宇宙热死之前的某个时候被修复。

    解决方法是在 支持-v4 :

    implementation "com.android.support:support-v4:$support_version"
    

    这将导致Gradle引入您请求的版本,该版本比数据绑定正在寻找的版本要新,因此Gradle认为它是可以的。事实上,它可能 没关系,但到目前为止,在我的工作中,我没有遇到任何问题。

        2
  •  1
  •   Zon    6 年前

    如果您收到梯度同步错误。。。

    Android dependency'com。安卓支持:support-v4’具有不同的 编译(21.0.3)和运行时(27.0.2)类路径的版本。你 应通过DependencyResolution手动设置相同版本

    ... 试用api com.android.support:support-v4:27.0.2 而不是实施 com.android.support:support-v4:$support_version .