ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – gradle插件升级后无法解析DefaultManifestParser

2019-08-28 14:24:06  阅读:616  来源: 互联网

标签:android android-gradle gradle build android-build


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

  Error:(34, 0) A problem occurred evaluating project ':ACalDAV'.


    无法解析符号’builder’

import com.android.builder.core.DefaultManifestParser

这是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'
    }
}

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

解决方法:

发生这种情况,因为DefaultManifestParser的签名已经改变:现在它将manifestFile作为参数.

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

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

public DefaultManifestParser(@NonNull File manifestFile)

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

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

标签:android,android-gradle,gradle,build,android-build
来源: https://codeday.me/bug/20190828/1752477.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有