android - 配置后无法创建变体 'android-lint'

标签 android gradle android-gradle-plugin build.gradle

我正在将项目的 Gradle 插件从 2.1.2 更新到 3.1.0,但是 gradle 在构建时开始抛出错误:

Cannot create variant 'android-lint' after configuration ':app:debugRuntimeElements' has been resolved

项目级渐变:

 // Top-level build file 
 buildscript {
repositories {
    jcenter()
    mavenCentral()
    maven { url 'https://maven.fabric.io/public' }
    maven {
        url 'https://maven.google.com/'
        name 'Google'
    }
    google()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.1.1'
    classpath 'org.ajoberstar:gradle-git:0.6.3'
    //noinspection GradleDynamicVersion
    classpath 'io.fabric.tools:gradle:1.+'
    classpath 'me.tatarka:gradle-retrolambda:3.2.5'
    classpath 'com.google.gms:google-services:3.0.0'
}
}

 // Used to disable preDex, will speed up clean build but slow down incremental builds.
  project.ext.preDexLibs = !project.hasProperty('disablePreDex')

 subprojects {
project.plugins.whenPluginAdded { plugin ->
    if ("com.android.build.gradle.AppPlugin".equals(plugin.class.name)) {
        project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs
    } else if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) {
        project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs
    }
}
}

allprojects {
repositories {
    jcenter()
 }
 }

库级gradle:

 apply plugin: 'com.android.library'

 setVersion '1.2'

repositories {
mavenCentral()
maven {
    url 'https://maven.google.com/'
    name 'Google'
}
}

configurations {
classpaths
}

def sharedManifest = manifest {
attributes('Specification-Title': 'My App',
           'Specification-Version': '2.1',
           'Specification-Vendor': 'App Vendor',
           'Implementation-Title': 'App',
           'Implementation-Version': '2.1',
           'Implementation-Vendor': 'App Vendor')
 }

android {
compileSdkVersion 27
buildToolsVersion "27.0.3"

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 27
    consumerProguardFile file("proguard-project.txt")
}

buildTypes {
    debug {
        testCoverageEnabled true
    }
}

// work-around for duplicate files during packaging of APK
packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {
implementation project(':exclude-doclet')
implementation 'com.android.support:support-annotations:27.0.2'
implementation 'com.android.support:support-v4:27.0.2'
implementation 'commons-io:commons-io:2.4'
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
implementation 'com.google.code.gson:gson:2.4'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'io.reactivex:rxjava:1.1.7'
classpaths files(new File(System.getenv("ANDROID_HOME") + "/platforms/android-${Integer.parseInt(rootProject.ANDROID_BUILD_SDK_VERSION)}/android.jar"),
        new File(System.getenv("ANDROID_HOME") + "/extras/android/support/v4/android-support-v4.jar"))
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:1.10.19'
androidTestImplementation 'junit:junit:4.12'
androidTestImplementation 'org.mockito:mockito-core:1.10.19'
}

android.libraryVariants.all { variant ->
String name = variant.buildType.name
task("generate${name.capitalize()}Javadoc", type: Javadoc) {
    dependsOn variant.javaCompiler
    description "Generates Javadoc for $project.name."

    title "App $project.version"
    source = variant.javaCompiler.source
    classpath += project.files(variant.javaCompiler.classpath.files, android.getBootClasspath())
    List<File> pathList = new ArrayList<File>()
    pathList.add(new File(project(':exclude-doclet').libsDir,
                          "ExcludeDoclet-${project(':exclude-doclet').version}.jar"))
    options {
        doclet = "ExcludeDoclet"
        docletpath = pathList
        encoding = "UTF-8"
        classpath = configurations.classpaths.files.asType(List)
        linksOffline "http://developer.android.com/reference", "${android.sdkDirectory}/docs/reference"
        links "http://docs.oracle.com/javase/7/docs/api/",
              "http://square.github.io/retrofit/2.x/retrofit/",
              "http://square.github.io/okhttp/2.x/okhttp/",
              "http://reactivex.io/RxJava/javadoc/"
        memberLevel = JavadocMemberLevel.PUBLIC
        header = "AppKit"
    }
    exclude '**/BuildConfig.java'
    exclude '**/R.java'
    failOnError true

    doLast {
        copy {
            from 'src/javadoc/assets/'
            into destinationDir.path + '/assets/'
        }
    }
}

task("assemble${name.capitalize()}JavadocJar", type: Jar) {
    dependsOn "generate${name.capitalize()}Javadoc"
    description "Assembles Jar contaning Javadoc for $project.name."
    from project.tasks.getByName("generate${name.capitalize()}Javadoc").destinationDir
    classifier = 'javadoc'
    manifest {
        from sharedManifest
    }
}

task("assemble${name.capitalize()}Jar", type: Jar) {
    dependsOn variant.javaCompiler
    description "Assembles Jar contaning $project.name."
    from variant.javaCompiler.destinationDir
    manifest {
        from sharedManifest
    }
}

artifacts {
    archives project.tasks.getByName("assemble${name.capitalize()}Jar")
    archives project.tasks.getByName("assemble${name.capitalize()}JavadocJar")
}
}

我被这个问题困住了,没有找到任何解决方案。谁能帮帮我。

最佳答案

我在另一个图书馆遇到了和你一样的问题。 我可以通过替换这一行来解决这个问题:

classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)

与:

doFirst { classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar) },

“这是由于 AndroidStudio 更新时新的 Gradle 插件与 JavaDoc 插件发生冲突”,如果您有 Javadoc 任务,您必须能够找到相同的行。

关于android - 配置后无法创建变体 'android-lint',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49852030/

相关文章:

android - 创建圆形启动器图标

Android 使用 drawable-[ANY]dpi。是否可以?

gradle - 在 gradle 插件中动态设置 sourceSets

Android + Kotlin 构建错误 : Kotlin home does not exist or is not a directory

android - FragmentManager、LocalActivityManager 和 TabHost.setup()

Android 显示/隐藏小部件调整大小填充父级

gradle - 存放在grandle.properties中,而不是在build.gradle中

android - 'flavorDimension' 将被 Android Gradle Plugin 2.0 移除,它已被 'dimension' 取代

java - Gradle 构建工具升级导致 ClassCastException

java - Android Studio : Error:Execution failed for task ':app:transformClassesWithJarMergingForRelease' .>