52 votes

Erreur Android Studio 3.0. Migrer les configurations de dépendance pour les modules locaux

J'ai récemment installé la dernière Canary build d'Android Studio, qui est actuellement à l'aide de l'Android plugin Gradle 3.0.0-alpha4 .

Maintenant, je reçois une erreur:

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

J'a lu: Migrer de dépendance configurations de modules locaux

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

J'ai changé:

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

pour:

implementation project(':MyLib')

mais j'ai toujours cette erreur: Error:Failed to resolve: Could not resolve project :MyLib.

lib gradle:

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)
        }
    }
}

app gradle:

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'

S'il vous plaît aider

57voto

phnmnn Points 3099

Google a ajouté plus d'instructions sur la façon de le résoudre: Résoudre construction d'erreurs liées à la dépendance correspondant

La Cause de l'erreur:

Votre application inclut un type de construction que d'une dépendance de bibliothèque n'a pas d'.

Par exemple, votre application inclut une "mise en scène", type de build, mais un la dépendance comprend seulement un "debug" et "release" type de build.

Notez qu'il n'y a pas de problème lorsqu'une bibliothèque de dépendance comprend un build type que votre application ne fonctionne pas. C'est parce que le plugin tout simplement jamais les demandes type de build de la dépendance.

Résolution

Utilisation matchingFallbacks pour spécifier d'autres matches pour un type de build, comme indiqué ci-dessous:

// 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']
        }
    }
}

37voto

Zoubiock Points 349

Après avoir rencontré le même problème, j'ai finalement déclaré exactement les mêmes buildTypes dans les fichiers build.gradle d'App et de Modules.

Dans votre cas, ajouter

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

à build.gradle de votre module devrait faire l'affaire.

Veillez également à remplacer tout "projet de compilation" par "projet de mise en oeuvre".

J'espère que ça aide

33voto

for3st Points 2727

Avec le nouveau plugin, la variante-courant de la résolution des dépendances

implementation project(':MyLib')

doit avoir de correspondance exacte des types de builds. Le guide de migration décrit ce

Par exemple, il n'est pas possible de faire un 'debug' variante de consommer un "libération" de la variante par le biais de ce mécanisme, car le producteur et le consommateur n'aurait pas de match. (Dans ce cas, le nom de "debug" se réfère à la publication de la configuration de l'objet mentionné ci-dessus dans l'Édition La section des dépendances.) Maintenant que nous publions deux configurations, l'une pour la compilation et pour l'exécution, cette vieille façon de sélectionner un la configuration ne fonctionne vraiment pas plus.

Ainsi, la vieille méthode de

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

ne fonctionnera plus.

Exemple

Avec votre exemple, ce serait ressembler à ceci:

Dans l'app build.gradle:

apply plugin: 'com.android.application'

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

Dans le module/lib 'MyLib' build.gradle:

apply plugin: 'com.android.library'

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

Par conséquent, le type de construction doit exactement correspondre, ni plus ni moins.

Utilisez-Type De Base

Une nouvelle fonctionnalité appelée "matchingFallbacks" peut être utilisé pour définir par défaut buildtypes si un sous-module n'a pas de définition de la buildtype.

Utilisation matchingFallbacks pour spécifier d'autres matches pour un type de construction (...)

Par exemple, si le module/lib 'MyLib' gradle devrait ressembler à ceci:

apply plugin: 'com.android.library'

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

Vous pouvez définir les éléments suivants dans votre app build.gradle:

apply plugin: 'com.android.application'

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

Manquant De Saveur Dimensions

Utilisation missingDimensionStrategy dans le defaultconfig.ini.php bloc de spécifier le par défaut la saveur du plugin doit choisir dans chaque dimension manquante

android {
    defaultConfig {
        missingDimensionStrategy 'minApi', 'minApi18', 'minApi23'
        ...
    }
}

0voto

Kamy Points 241

J'ai été confrontée au même problème, j'ai trouvé cette page de migration: Construire correspondance des types

Il déclare:

Sélectionnez par défaut pour le manque de construire des types de
Si un consommateur configure un type de build qu'un producteur n'a pas, vous devez faire correspondre manuellement le consommateur type de build à celui du producteur. Par exemple, si votre application module permet de configurer une "mise en scène", type de construction et son module de la bibliothèque dépendance", mylibrary", n'a pas, le Android plugin jette l'erreur de génération suivante:

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

Pour résoudre cette erreur, vous devez spécifier le type de construction de "mylibrary" le Android plugin doit correspondre à l'application de la "mise en scène", type de build. Vous pouvez faire cela avec le buildTypeMatching propriété dans l'application de la construire.gradle fichier, comme illustré ci-dessous:

// 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'
}

L'ajout de buildTypeMatching fixe pour moi sans créer d'inutiles types dans ma bibliothèque

0voto

Adil Aliyev Points 745

Aujourd'hui, j'ai aussi eu le même problème après la migration vers Android Studio 3. Le problème est le gradle est pas en mesure de résoudre certains des bibliothèques en raison de problème de réseau. Les raisons peuvent être diverses. Si vous travaillez derrière le proxy, vous devez ajouter les paramètres du proxy dans gradle.fichier de propriétés:

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

Dans mon cas, j'avais encore une question. Mon entreprise utilise le certificat SSL auto-signé de sorte que la connexion SSL avait un problème. Si la même chose s'applique aussi pour vous, vous pouvez définir le paramètre à nouveau dans gradle.fichier de propriétés comme suit:

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

Pour être plus clair, vous pouvez cliquer sur "Afficher les détails" lien dans les messages de log dans Android Studio. Ce journal sera plus utile à décider ce qui est le vrai problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X