web-dev-qa-db-fra.com

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

J'ai récemment installé la dernière version d'Android Studio dans Canaries, qui utilise actuellement le plugin Android Gradle 3.0.0-alpha4.

Je reçois maintenant une erreur:

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

J'ai lu: Migrer des configurations de dépendance pour des 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')

à:

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

50
phnmnn

Google a ajouté des instructions pour le résoudre: Résoudre les erreurs de construction liées à la correspondance de dépendance

Cause de l'erreur de construction:

Votre application inclut un type de construction qu'une dépendance de bibliothèque ne fait pas.

Par exemple, votre application inclut un type de construction "intermédiaire", mais un la dépendance inclut uniquement les types de construction "debug" et "release".

Notez qu'il n'y a aucun problème lorsqu'une dépendance de bibliothèque inclut un build tapez ce que votre application ne fait pas. C'est parce que le plugin est tout simplement jamais les demandes qui construisent le type à partir de la dépendance.

Résolution

Utilisez matchingFallbacks pour spécifier d'autres correspondances pour un type de construction donné, 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']
        }
    }
}
50
phnmnn

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

37
Zoubiock

Avec le nouveau plugin, la résolution des dépendances prenant en compte les variantes

implementation project(':MyLib')

doit avoir des types de construction correspondant exactement. Le guide de migration décrit cela

Par exemple, il n'est pas possible de faire en sorte qu'une variante "de débogage" consomme un 'libérer' la variante par ce mécanisme parce que le producteur et le consommateur ne correspondrait pas. (Dans ce cas, le nom 'debug' fait référence à L'objet de configuration publié mentionné ci-dessus dans la section Publication Dépendances.) Nous publions maintenant deux configurations, une pour compilation et un pour le runtime, cette ancienne façon de choisir un la configuration ne fonctionne vraiment plus.

Donc, l'ancienne méthode de 

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

ne fonctionnera plus.

Exemple

Avec votre exemple, cela ressemblerait à ceci:

Dans l'application 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 correspondre exactement, pas plus, pas moins.

Utilisation de substitutions de type de construction

Une nouvelle fonctionnalité appelée "matchingFallbacks" peut être utilisée pour définir les types de construction par défaut si un sous-module ne définit pas le type de construction. 

Utilisez matchingFallbacks pour spécifier d'autres correspondances pour un type de construction donné (...)

Par exemple, si module/lib 'MyLib' gradle ressemblerait à ceci:

apply plugin: 'com.Android.library'

Android {
  buildTypes {
    debug {}
    releaseLib {}
  }
}

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

apply plugin: 'com.Android.application'

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

Dimensions de saveur manquantes

Utilisez missingDimensionStrategy dans le bloc defaultConfig pour spécifier le fichier saveur par défaut le plugin doit choisir parmi chaque dimension manquante

Android {
    defaultConfig {
        missingDimensionStrategy 'minApi', 'minApi18', 'minApi23'
        ...
    }
}
28
patrickf

Cette solution a fonctionné pour moi. J'utilise Android Studio 3.1.2. Plugin Android Gradle 3.1.2. Gradle 4.4. J'ai un module de bibliothèque avec des variantes telles que trial et premium. Dans le cadre du processus de migration vers le plug-in Android Gradle 3.1.2, j'ai ajouté une dimension de type saveur main au fichier de construction de dégradés de mon module de bibliothèque. Pour corriger l'erreur de construction donc dans le fichier build.gradle de mon application, j'ai changé ce qui suit:

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

est devenu

implementation project(':library')

et j'ai ajouté la ligne suivante à mon bloc defaultConfig: missingDimensionStrategy 'main', 'premium'

0
Kai

Aujourd'hui, j'ai également eu le même problème après avoir migré vers Android Studio 3. Le problème est que gradle n'est pas capable de résoudre certaines bibliothèques en raison d'un 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 le fichier gradle.properties:

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

Dans mon cas, j'ai eu un autre problème. Mon entreprise utilise le certificat SSL auto-signé, ce qui a posé un problème pour la connexion SSL. Si cela s'applique également à vous, vous pouvez définir le paramètre à nouveau dans le fichier gradle.properties 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 le lien "Afficher les détails" du journal des messages dans Android Studio. Ce journal sera plus utile pour décider quel est le véritable problème.

0
Adil Aliyev

Je faisais face au même problème, j'ai trouvé cette page de migration: Construire les types correspondants

Il est dit:

Sélectionne les valeurs par défaut pour les types de construction manquants
Si un consommateur configure un type de construction qu'un producteur ne sait pas, vous devez faire correspondre manuellement le type de construction du consommateur à celui du producteur. Par exemple, si votre module d'application configure un type de construction "intermédiaire" et que sa dépendance de module de bibliothèque, "mylibrary", ne le fait pas, le plug-in Android renvoie l'erreur de construction 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" que le plug-in Android doit correspondre au type de construction "staging" de l'application. Vous pouvez le faire avec la propriété buildTypeMatching dans le fichier build.gradle de l'application, comme indiqué 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 l'a corrigé pour moi sans créer de types inutiles dans ma bibliothèque

0
Kamy