52

我最近安装了最新的 Canary 版本的 Android Studio,它目前正在使用 Android Gradle 插件 3.0.0-alpha4 。

我现在收到一个错误:

Error:Failed to resolve: Could not resolve project :MyLib.
Required by:
project :app

我已阅读:迁移本地模块的依赖配置

dependencies 

{

// This is the old method and no longer works for local
// library modules:
// debugCompile project(path: ':foo', configuration: 'debug')
// releaseCompile project(path: ':foo', configuration: 'release')

// Instead, simply use the following to take advantage of
// variant-aware dependency resolution. You can learn more about
// the 'implementation' configuration in the section about
// new dependency configurations.
implementation project(':foo')

// You can, however, keep using variant-specific configurations when
// targeting external dependencies. The following line adds 'app-magic'
// as a dependency to only the 'debug' version of your module.

debugImplementation 'com.example.android:app-magic:12.3' 
}

我变了:

releaseCompile project(path: ':MyLib', configuration: 'appReleaseApp')
debugCompile project(path: ':MyLib', configuration: 'appDebug')

到:

implementation project(':MyLib')

但我仍然有这个错误:Error:Failed to resolve: Could not resolve project :MyLib.

库分级:

apply plugin: 'com.android.library'

android {
    publishNonDefault true
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 25
    }
    buildTypes {
        debug {
            ...
        }
        releaseApp {
            ...
        }
        releaseSdk {
            ...'
        }
    }
    flavorDimensions "default"

    productFlavors {
        flavor1{
            ...
        flavor2{
            ...
        }
        flavor3{
            ...
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:support-v4:25.3.1'
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'com.google.android.gms:play-services-maps:10.2.6'
    compile 'com.google.android.gms:play-services-gcm:10.2.6'
    compile 'com.google.android.gms:play-services-location:10.2.6'
}

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: mavenLocal().url)
        }
    }
}

应用等级:

apply plugin: 'com.android.application'

android {

    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 12
        versionName "5.0.2"
    }

    buildTypes {
        release {
            ...
        }
        debug {
            ...
        }
    }
    flavorDimensions "default"

    productFlavors {
        flavor1 {
            ...
        }

        flavor2 {
            ...
        }
    }

    testOptions {
        unitTests {
            all {
                jvmArgs '-noverify'
                systemProperty 'robolectric.logging.enable', true
            }
        }
    }
}

repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    //    releaseCompile project(path: ':MyLib', configuration: 'appRelease')
    //    debugCompile project(path: ':MyLib', configuration: 'appDebug')
    implementation project(':MyLib')

    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.google.android.gms:play-services-maps:10.2.6'
    compile 'com.google.android.gms:play-services-location:10.2.6'
    compile 'com.google.android.gms:play-services-analytics:10.2.6'
    compile 'com.google.android.gms:play-services-gcm:10.2.6'
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support:support-v4:25.3.1'
    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'com.android.support:gridlayout-v7:25.3.1'
    compile 'com.android.volley:volley:1.0.0'
    compile 'com.facebook.stetho:stetho:1.4.1'
    compile 'com.facebook.stetho:stetho-okhttp3:1.4.1'
    compile 'com.android.support:percent:25.3.1'
    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.squareup.picasso:picasso:2.5.2'
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:2.1.0'
    testCompile 'org.robolectric:robolectric:3.1.4'
    testCompile 'org.assertj:assertj-core:1.7.1'

    compile 'com.flipboard:bottomsheet-core:1.5.0'
    compile 'com.flipboard:bottomsheet-commons:1.5.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.1'
}

apply plugin: 'com.google.gms.google-services'

请帮忙

4

6 回答 6

56

谷歌添加了更多说明如何解决它:解决与依赖匹配相关的构建错误

构建错误的原因:

您的应用程序包含库依赖项不包含的构建类型。

例如,您的应用程序包含“暂存”构建类型,但依赖项仅包含“调试”和“发布”构建类型。

请注意,当库依赖项包含您的应用程序不包含的构建类型时,没有问题。那是因为插件根本不会从依赖项中请求该构建类型。

解析度

使用 matchingFallbacks 为给定的构建类型指定替代匹配,如下所示:

// In the app's build.gradle file.
android {
    buildTypes {
        debug {}
        release {}
        staging {
            // Specifies a sorted list of fallback build types that the
            // plugin should try to use when a dependency does not include a
            // "staging" build type. You may specify as many fallbacks as you
            // like, and the plugin selects the first build type that's
            // available in the dependency.
            matchingFallbacks = ['debug', 'qa', 'release']
        }
    }
}
于 2017-09-28T11:35:14.200 回答
37

在遇到同样的问题后,我终于在 App 和 Modules 的 build.gradle 文件中声明了完全相同的 buildTypes。

在您的情况下,添加

buildTypes {
    debug {}
    releaseApp {}
    releaseSdk {}
}

到您的模块的 build.gradle 应该可以解决问题。

请务必将任何“编译项目”也更改为“实施项目”。

希望能帮助到你

于 2017-06-19T14:14:06.953 回答
32

使用新插件,变体感知依赖解析

implementation project(':MyLib')

需要具有完全匹配的构建类型。迁移指南对此进行了描述

例如,不可能通过这种机制使“调试”变体使用“发布”变体,因为生产者和消费者不匹配。(在这种情况下,名称 'debug' 指的是上面在 Publishing Dependencies 部分中提到的已发布配置对象。)现在我们发布了两个配置,一个用于编译,一个用于运行时,这种选择一个配置的旧方式确实不不再工作了。

所以老方法

releaseCompile project(path: ':foo', configuration: 'debug')

将不再工作。

例子

在您的示例中,这将如下所示:

在应用程序中build.gradle

apply plugin: 'com.android.application'

android {
  buildTypes {
    debug {}
    releaseApp {}
    releaseSdk {}
  }
  ...
  dependencies {
    implementation project(':MyLib')
  }
}

在模块/lib 'MyLib' 中build.gradle

apply plugin: 'com.android.library'

android {
  buildTypes {
    debug {}
    releaseApp {}
    releaseSdk {}
  }
}

因此构建类型必须完全匹配,不多不少。

使用构建类型的后备

如果子模块未定义构建类型,则可以使用称为“matchingFallbacks”的新功能来定义默认构建类型。

使用 matchingFallbacks 为给定的构建类型指定替代匹配 (...)

例如,如果 module/lib 'MyLib' gradle 看起来像这样:

apply plugin: 'com.android.library'

android {
  buildTypes {
    debug {}
    releaseLib {}
  }
}

您可以在您的应用程序中定义以下内容build.gradle

apply plugin: 'com.android.application'

android {
  buildTypes {
    debug {}
    releaseApp {
        ...
        matchingFallbacks = ['releaseLib']
    }
    releaseSdk {
        ...
        matchingFallbacks = ['releaseLib']
    }
  }
  ...
  dependencies {
    implementation project(':MyLib')
  }
}

缺少风味尺寸

在 defaultConfig 块中使用 missingDimensionStrategy 来指定插件应该从每个缺失的维度中选择的默认风格

android {
    defaultConfig {
        missingDimensionStrategy 'minApi', 'minApi18', 'minApi23'
        ...
    }
}
于 2017-06-19T21:21:28.367 回答
0

我遇到了同样的问题,我找到了这个迁移页面: 构建匹配类型

它指出:

为缺少的构建类型选择默认值
如果消费者配置了生产者没有配置的构建类型,您需要手动将消费者的构建类型与生产者的构建类型匹配。例如,如果您的应用程序模块配置了“staging”构建类型,而其库模块依赖项“mylibrary”没有,Android 插件将引发以下构建错误:

Error:Failed to resolve: Could not resolve project :mylibrary.
Required by: project :app

要解决此错误,您需要从“mylibrary”中指定 Android 插件应与应用程序的“staging”构建类型匹配的构建类型。您可以使用应用程序的 build.gradle 文件中的 buildTypeMatching 属性来执行此操作,如下所示:

// Add the following to the consumer's build.gradle file.
android {
    ...
    // Tells the Android plugin to use a library's 'debug' build type
    // when a 'staging' build type is not available. You can include
    // additional build types, and the plugin matches 'staging' to the
    // first build type it finds from the one's you specify. That is,
    // if 'mylibrary' doesn't include a 'debug' build type either, the
    // plugin matches 'staging' with the producer's 'release' build type.
    buildTypeMatching 'staging', 'debug', 'release'
}

添加 buildTypeMatching 为我修复了它,而无需在我的库中创建不必要的类型

于 2017-08-04T05:20:23.847 回答
0

今天我在迁移到 Android Studio 3 后也遇到了同样的问题。问题是由于网络问题,gradle 无法解析某些库。原因可能是多种多样的。如果您在代理后面工作,则需要在 gradle.properties 文件中添加代理参数:

systemProp.http.proxyHost=<proxy_host>
systemProp.http.proxyPort=<proxy_port
systemProp.https.proxyHost=<proxy_host>
systemProp.https.proxyPort=<proxy_port>

就我而言,我还有一个问题。我的公司使用自签名 SSL 证书,所以 SSL 连接有问题。如果同样适用于您,您可以在 gradle.properties 文件中再次设置参数,如下所示:

org.gradle.jvmargs=-Djavax.net.ssl.trustStore="/usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts" -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.keyStorePassword=changeit

为了更清楚,您可以在 Android Studio 的消息日志中单击“显示详细信息”链接。该日志将更有助于确定真正的问题是什么。

于 2017-10-27T10:19:04.733 回答
0

这个解决方案对我有用。我正在使用 Android Studio 3.1.2。Android Gradle 插件 3.1.2。梯度 4.4。我有一个带有 和 等风格的库trial模块premium。作为迁移到 Android Gradle 插件 3.1.2 过程的一部分,main我在库模块的 gradle 构建文件中添加了风味维度。为了更正构建错误,因此在我的应用程序build.gradle文件中,我更改了以下内容:

debugImplementation project(path: ':library', configuration: 'premiumDebug')
releaseImplementation project(path: ':library', configuration: 'premiumRelease')

变成了

implementation project(':library')

我在我的块中添加了以下行defaultConfigmissingDimensionStrategy 'main', 'premium'

于 2018-05-25T15:38:39.173 回答