Android Studio 更新 - 无法解析 com.android.databinding

标签 android facebook android-studio gradle android-gradle-plugin

我最近更新了我的JAVA 到1.8 版本,也更新了android studio 和gradle 插件。更新后,我的一个模块(即 facebook 模块)build.gradle 文件在编译我的项目时出现以下错误:

enter image description here

我的项目级 build.gradle 如下所示:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0-beta4'
        classpath 'com.google.gms:google-services:2.0.0-alpha6'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

在 facebook 模块 build.gradle 文件中也有一些符号未找到错误,如无法解析符号 'GradleScriptException' 和无法解析符号 'MavenDeployment'。 facebook buil.gradle 的完整代码是:

apply plugin: 'com.android.library'

repositories {
    mavenCentral()
}

project.group = 'com.facebook.android'

dependencies {
    // Facbook Dependancies
    testCompile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:support-v4:23.0.1'
    compile 'com.parse.bolts:bolts-android:1.2.1'
    // Unit Tests
    testCompile 'junit:junit:4.12'
    testCompile 'org.robolectric:robolectric:3.0'
    testCompile 'org.robolectric:shadows-support-v4:3.0'
    def powerMockVersion = '1.6.1'
    testCompile "org.powermock:powermock-module-junit4:$powerMockVersion" testCompile "org.powermock:powermock-module-junit4-rule:$powerMockVersion" testCompile "org.powermock:powermock-classloading-xstream:$powerMockVersion" androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
    testCompile "org.powermock:powermock-api-mockito:$powerMockVersion" androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
    // Connected Tests
    androidTestCompile 'org.mockito:mockito-core:1.10.19'
}

android {
    compileSdkVersion 23
    buildToolsVersion '25.0.0'

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 19
        multiDexEnabled true
    }

    lintOptions {
        abortOnError false
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    dataBinding {
        enabled = true
    }
}

apply plugin: 'maven'
apply plugin: 'signing'

def isSnapshot = version.endsWith('-SNAPSHOT')
def ossrhUsername = hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
def ossrhPassword = hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""

task setVersion {
    // The version will be derived from source
    project.version = null
    def sdkVersionFile = file('src/main/java/com/facebook/FacebookSdkVersion.java')
    sdkVersionFile.eachLine{
        def matcher = (it =~ /(?:.*BUILD = \")(.*)(?:\".*)/)
        if (matcher.matches()) {
            project.version = matcher[0][1]
            return
        }
    }
    if (project.version.is('unspecified')) {
        throw new GradleScriptException('Version could not be found.', null)
    }
}

uploadArchives {
    repositories.mavenDeployer {
        beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

        repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
            authentication(userName: ossrhUsername, password: ossrhPassword)
        }

        snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
            authentication(userName: ossrhUsername, password: ossrhPassword)
        }

        pom.project {
            name 'Facebook-Android-SDK'
            artifactId = 'facebook-android-sdk'
            packaging 'aar'
            description 'Facebook Android SDK'
            url 'https://github.com/facebook/facebook-android-sdk'

            scm {
                connection 'scm:git@github.com:facebook/facebook-android-sdk.git'
                developerConnection 'scm:git@github.com:facebook/facebook-android-sdk.git'
                url 'https://github.com/facebook/facebook-android-sdk'
            }

            licenses {
                license {
                    name 'Facebook Platform License'
                    url 'https://github.com/facebook/facebook-android-sdk/blob/master/LICENSE.txt'
                    distribution 'repo'
                }
            }

            developers {
                developer {
                    id 'facebook'
                    name 'Facebook'
                }
            }
        }
    }
}

uploadArchives.dependsOn(setVersion)

signing {
    required { !isSnapshot && gradle.taskGraph.hasTask("uploadArchives") }
    sign configurations.archives
}

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    // JDK 1.8 is more strict then 1.7. Have JDK 1.8 behave like 1.7 for javadoc generation
    if (org.gradle.internal.jvm.Jvm.current().getJavaVersion() == JavaVersion.VERSION_1_8) {
        options.addStringOption('Xdoclint:none', '-quiet')
    }
}

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.sourceFiles
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

afterEvaluate {
    androidJavadocs.classpath += project.android.libraryVariants.toList().first().javaCompile.classpath
}

点击Upgrade plugin and sync project 不会执行任何操作。

我已经按照各种来源的建议尝试了“使缓存无效并重新启动”,但没有奏效。我已经在我的项目 build.gradle 中提到了最新版本的 gradle 插件。

我已经经历了Gradle DSL Method not found: testCompile() 但它不能解决我的问题。

我应该怎么做才能消除这个编译错误?

TIA

编辑 1: 我按照 sm4 的建议进行了更改,此 DSL 方法未找到错误消失了,但现在它无法编译并出现以下错误:

Compile error

最佳答案

def powerMockVersion = '1.6.1'
testCompile "org.powermock:powermock-module-junit4:$powerMockVersion" testCompile "org.powermock:powermock-module-junit4-rule:$powerMockVersion" testCompile "org.powermock:powermock-classloading-xstream:$powerMockVersion" androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
testCompile "org.powermock:powermock-api-mockito:$powerMockVersion" androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
// Connected Tests
androidTestCompile 'org.mockito:mockito-core:1.10.19'

testCompile 实际上是对方法的调用。因为您在一行中有多个 testCompile,所以它被视为对具有许多参数的方法的调用。不存在这种方法。

每行只保留一个定义,它应该可以工作:

testCompile "org.powermock:powermock-module-junit4:$powerMockVersion"
testCompile "org.powermock:powermock-module-junit4-rule:$powerMockVersion"
testCompile "org.powermock:powermock-classloading-xstream:$powerMockVersion"
androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
testCompile "org.powermock:powermock-api-mockito:$powerMockVersion"
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'

关于Android Studio 更新 - 无法解析 com.android.databinding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42226967/

相关文章:

android - CardView:图像的角在 Android 4.3 中不是圆角的?

android - 有没有办法查看 Android 设备有多少内存?

java - 如何使用 android facebook sdk 访问用户提要/帖子

ios - Swift 的 Facebook SDK 文档是否过时?对应的SDK版本是多少?

android - Gradle 找不到模块依赖的传递依赖

java - DecimalFormat 和 Double 异常

java - 处理 XML 数据的特殊字符以在 Java 中解析

php - 重定向到 Facebook 页面

java - 跟踪代码管理器不再工作 - Android Studio 2.2.2

android-studio - 无法使用 Android Studio 从 JNI 打印日志消息