gradle插件升级后无法解析DefaultManifestParser

Kri*_*her 3 android build gradle android-build android-gradle-plugin

我正在尝试在Android Studio中编译AndroidCaldavSyncAdapter项目.它甚至工作过,但升级后的Gradle插件版本,从com.android.tools.build:gradle:1.5.0com.android.tools.build:gradle:2.3.0其停止工作.现在我收到这个错误:

  Error:(34, 0) A problem occurred evaluating project ':ACalDAV'.
Run Code Online (Sandbox Code Playgroud)

cannot resolve symbol 'builder'

import com.android.builder.core.DefaultManifestParser
Run Code Online (Sandbox Code Playgroud)

这是build.grade文件:

import com.android.builder.core.DefaultManifestParser

apply plugin: 'com.android.application'
apply from: '../config/quality/quality.gradle'

android {
    compileSdkVersion 22
    buildToolsVersion '25.0.3'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

    }

    defaultConfig {
        applicationId "de.we.acaldav"
        minSdkVersion 14
        targetSdkVersion 20
        multiDexEnabled true

        def manifestParser = new DefaultManifestParser()
        versionName = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)
    }

    signingConfigs {
        //noinspection GroovyMissingReturnStatement
        release {
            if (project.hasProperty('myKeyAlias') &&
                    project.hasProperty('myStoreFile') &&
                    project.hasProperty('myStorePassword') &&
                    project.hasProperty('myKeyPassword')) {
                keyAlias = myKeyAlias
                storeFile = file(myStoreFile)
                storePassword = myStorePassword
                keyPassword = myKeyPassword
            }
        }
    }

    buildTypes {

        release {
            minifyEnabled true
            signingConfig signingConfigs.release
            proguardFile 'proguard-project.txt'
        }

        debug {
            //noinspection GroovyAssignabilityCheck
            applicationIdSuffix = ".debug"
            //noinspection GroovyAssignabilityCheck
            versionNameSuffix = "-DEBUG"
        }

        //noinspection GroovyAssignabilityCheck
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
            }
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

}

dependencies {
    compile  'com.android.support:support-v4:22.0.0'
    compile  'backport-util-concurrent:backport-util-concurrent:3.1'
    compile  'commons-codec:commons-codec:1.10'
    compile  'org.apache.commons:commons-lang3:3.3.2'
    compile  'org.mnode.ical4j:ical4j:1.0.6'
    repositories {
        mavenCentral()
    }
}

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过无效的缓存,但这并没有改变任何东西.

azi*_*ian 5

这种情况发生了,因为签名DefaultManifestParser已经改变了:现在它期望manifestFile作为一个论点.

在Android Gradle Plugin 1.5.0版本中,没有明确提供构造函数DefaultManifestParser,这意味着有一个空构造函数.这导致表达式def manifestParser = new DefaultManifestParser()正常执行.

在Android Gradle Plugin 2.2.0版中,构造函数的签名已更改为以下内容:

public DefaultManifestParser(@NonNull File manifestFile)
Run Code Online (Sandbox Code Playgroud)

这意味着,build.gradle应该执行以下文件更改:

def manifestParser = new DefaultManifestParser(android.sourceSets.main.manifest.srcFile)
versionName = manifestParser.getVersionName()
Run Code Online (Sandbox Code Playgroud)