web-dev-qa-db-fra.com

Impossible de changer les dépendances de la configuration (après avoir activé l'exécution instantanée)

Je viens d'activer instant run dans mon Android. (a suivi le instructions ici )

Mon projet contient git sous-modules et ceux-ci ne sont plus compilés.

C'est l'erreur que j'obtiens:

Erreur: (8, 0) Impossible de modifier les dépendances de la configuration ': libraries: my_library: classpath' après sa résolution.

Une idée de ce qui pourrait ne pas se passer là-bas?

Niveau de construction supérieur:

buildscript {
repositories {
    mavenCentral()
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    classpath 'com.Android.tools.build:gradle:2.0.0-alpha1'
    classpath 'com.novoda:bintray-release:0.2.7'
    classpath 'io.fabric.tools:gradle:1.+'
}}

Module build.gradle:

apply plugin: 'Android'
apply plugin: 'io.fabric'

Android {

    defaultConfig {
       versionCode 4850
       versionName '4850'
       compileSdkVersion 23
       buildToolsVersion '23.0.1'
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/MANIFEST.MF'
        exclude 'META-INF/NOTICE'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    useLibrary 'org.Apache.http.legacy'
}

repositories {
    mavenCentral()
    jcenter()
}


dependencies {
    [skip]
    compile project(':libraries:my_library:sdk')
}

Bibliothèque build.gradle

apply plugin: 'com.Android.library'

Android {
    compileSdkVersion 23
    buildToolsVersion '23.0.2'

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
    }

    lintOptions {
        abortOnError false
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile 'com.Android.support:support-v4:23.1.0'
    compile 'com.Android.support:appcompat-v7:23.1.0'

    testCompile 'junit:junit:4.12'

}
51
mbonnin

J'ai eu le même problème. Je l'ai comparé au exemple de projet (fonctionnel) de @RaGe et trouvé la différence mineure.

Le sous-dossier du projet doit commencer par une lettre majuscule.

Voici le changement que j'ai apporté à l'exemple @RaGes pour le casser et le faire fonctionner à nouveau.

Structure cassée:

Android-multi-project-sample
    + .gralde
    + .idea
    + app
    + build
    + gradle
    + myApplication2
    - .gitignore
    - Android-multi-project-sample.iml
    - build.gradle
    - gradle.properties
    - gradlew
    - gradlew.bat
    - local.properties
    - settings.gradle

entraîne l'erreur suivante:

Error:(8, 0) Cannot change dependencies of configuration ':myApplication2:classpath' after it has been resolved.

Structure de travail (avec sous-projet en majuscule)

Android-multi-project-sample
    + .gralde
    + .idea
    + app
    + build
    + gradle
    + MyApplication2     // upper case!!!!!!
    - .gitignore
    - Android-multi-project-sample.iml
    - build.gradle
    - gradle.properties
    - gradlew
    - gradlew.bat
    - local.properties
    - settings.gradle

le niveau supérieur settings.gradle doit également être changé:

+ include ':app', ':MyApplication2:mylibrary'
- include ':app', ':myApplication2:mylibrary'

et app/build.gradle doit changer cela

+ compile project(':MyApplication2:mylibrary')
- compile project(':myApplication2:mylibrary')

Tout compile

Faites attention! Git n'est pas sensible à la casse par défaut. Utilisation

git mv -f myApplication2 temp
git mv -f temp MyApplication2

renommer le dossier.

28
EarlOfEgo

gradle lit et exécute tous les build.gradle fichiers dans tous les dossiers des modules inclus. Comme le montre l’erreur, il essaie également d’exécuter le script de compilation racine de :libraries:my_library.

Vous devez changer votre settings.gradle et incluez le projet de bibliothèque en définissant son 'rép_projet':

include ':app'

// Give your library project any module name, i.e. ':sdk'
include ':sdk'
// Then set the project path of the library module
project(':sdk').projectDir = new File('libraries/my_library/sdk')

Avec ça settings.gradle vous pouvez référencer le projet de bibliothèque en tant que dépendance de niveau avec:

compile project(':sdk')
33
thaussma

J'ai eu le même problème. Je l'ai résolu en supprimant le classpath du sous-module Top-level build.gradle fichier.

dependencies { 
     // classpath 'com.Android.tools.build:gradle:1.0.0'
}

Je ne sais pas si c'est la meilleure chose à faire, mais cela a fonctionné pour moi.

30
o.akrout

Selon la documentation officielle sur l'exécution instantanée.

En coulisse, nous avons mis à jour le fichier build.Gradle de votre projet pour qu'il utilise la dernière version du plug-in Android Gradle, indispensable au bon fonctionnement d'Instant Run. Nous mettons également à jour votre version de Gradle wrapper à la version 2.8 et essayez de mettre à jour la version des outils de génération de tous vos modules vers la version la plus récente (23.0.2). Ceci n'est pas requis pour Instant Run, mais il utilisera une nouvelle version plus rapide de dex la course instantanée et la construction complète seront un peu plus rapides.

Un extrait d'Application\build.gradle est présenté ci-dessous:

buildscript {
   repositories {
       jcenter()
   }

   dependencies {
       classpath 'com.Android.tools.build:gradle:2.0.0-alpha1'
   }
}

Problèmes connus liés à l'utilisation instantanée

Utiliser Instant Run avec Reflection

La réflexion peut montrer des choses inattendues, par exemple:

  • Les cours sont tous rendus publics
  • Beaucoup d'autres choses sont également rendues publiques

Limitations du profil de performance

Nous vous suggérons de désactiver temporairement Instant Run lors du profilage de votre application de débogage.

Il y a un très faible impact sur les performances lors de l'utilisation d'Instant Run et un impact légèrement plus important lorsque des méthodes sont remplacées.

Augmentation des méthodes d'application

Instant Run ajoute quelques méthodes: 140 plus trois fois le nombre de classes de votre application et de ses dépendances locales. Si l'application était auparavant juste en dessous de la limite de dex, l'activation d'Instant Run peut pousser votre application au-delà de la limite de dex. Apprenez à résoudre ce problème en optimisant les versions de développement Multi-dex.

Autres problèmes connus

  • Des problèmes intermittents peuvent se produire lorsque le IDE) perd la connexion avec l'application, ce qui déclenche une reconstruction complète.
  • La compatibilité du plug-in Gradle tiers n'a pas encore été testée, en particulier ceux qui n'ont pas été mis à jour pour utiliser la nouvelle API de transformation.
  • La liaison de données est actuellement interrompue dans cette version (possibilité de restauration).

donc si vous faites face à ce problème, vous pouvez désactiver votre exécution instantanée

allez dans Paramètres → Construire, Exécution, Déploiement → Exécuter instantanément et décochez Activer l'exécution instantanée….

Meilleure compréhension de l'exécution instantanée go here

2
vishal jangid

Retirez vos dépendances de votre niveau de construction supérieur. En tant que tel, vous créez un chemin de classe avec votre dégradé de niveau supérieur et essayez ensuite de l'écraser avec vos autres build.gradles.

De:

buildscript {
repositories {
    mavenCentral()
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    classpath 'com.Android.tools.build:gradle:2.0.0-alpha6'
    classpath 'com.novoda:bintray-release:0.2.7'
    classpath 'io.fabric.tools:gradle:1.+'
}}

À: Notez que je n'ai pas ajouté cette ligne commentée, Android-Studio le fait automatiquement

buildscript {
    repositories {
        jcenter()
    }   
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.0.0-alpha6'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Vous devriez pouvoir ajouter tous les référentiels Maven nécessaires dans vos classements d'applications distincts, car ils doivent être spécifiques et le jcenter en couvrira un grand nombre, comme @ AndroidMechanic , et @ Hi I ' m Frogatto ont essayé de dire dans les réponses et les commentaires précédents. Jetez un oeil à lire ici Bintray - JCenter

L'autre chose est, je ne comprends pas pourquoi vous gérez vos bibliothèques graduellement au sein de votre projet dans le cadre de votre projet. Vous devriez référencer votre bibliothèque à partir de votre projet, avec l'application build.gradle. Vous traitez le titre de bibliothèque comme le titre d'application.

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile 'com.Android.support:support-v4:23.1.0'
    compile 'com.Android.support:appcompat-v7:23.1.0'

    testCompile 'junit:junit:4.12'

}

Apportez ces modifications, puis voyez quels doublons et vous pourrez gérer cela à partir de là.

De plus, je recommande de synchroniser manuellement le projet avec les fichiers de gradation lorsque des modifications sont apportées. Je ne compterais pas sur rien d’instant, il est important d’apporter des changements pas à pas et de faire le point sur ce qui se passe, en particulier lorsqu’il ne compile pas. C'est mon opinion seulement et une façon de programmer dans Android.

Si l'exécution instantanée crée des ravages avec un projet particulier, je le désactiverais pour ce projet. Il est activé par défaut et je n'ai eu aucun problème avec. Le désordre de construction peut être le résultat de classements peu clairs dans votre projet pour commencer.

Également:

Dans les propriétés de gradle wrapper, la note 2.10 est requise pour classpath 'com.Android.tools.build:gradle:2.0.0-alpha6':

distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.Zip

Voir ici pour les dernières mises à jour Site des outils Android

Ou vous pouvez installer une version précédente de Android Studio et utiliser la version de travail précédente de votre projet.

Si vous avez plusieurs fichiers git, je vous suggère de supprimer ceux qui sont redondants et de ne conserver que ceux que vous utilisez pour le contrôle de version.

2
Yvette Colomb

classpath 'com.Android.tools.build:gradle:2.0.0-alpha1'

essayez de le changer pour

 classpath 'com.Android.tools.build:gradle:2.0.0-alpha6'

alpha1 semble obsolète depuis aujourd'hui (?) et ne compile plus. Vous devrez également mettre à niveau votre version 2.10 pour utiliser alpha6.

0
Maxim Berezovsky

Deux choses que vous pouvez essayer

Changer votre plugin pour "Android"

Avec les nouveaux outils de gradation, vous devez spécifier le plug-in approprié pour votre fichier gradle de module ainsi que votre fichier gradle de bibliothèque. Si vous regardez de près, votre fichier de classement de la bibliothèque est correct: '

apply plugin: 'com.Android.library'

Changez votre plugin module gradle:

apply plugin: "Android" -> apply plugin: 'com.Android.application'

les classes org.Apache sont maintenant dépcrées

Cela pourrait également expliquer pourquoi votre application ne compile plus. Enlève ça:

useLibrary 'org.Apache.http.legacy'

Voir Liste obsolète .

0
TejjD

Le projet build.gradle du projet de bibliothèque semble provoquer l'erreur de configuration (pour une raison obscure). Pour moi, il suffisait également d'ajouter le projet de bibliothèque (qui est un sous-module git) à settings.gradle au lieu d’ajouter uniquement le module de projet de la bibliothèque.

Au lieu de: include ':libraries:my_library:sdk'

essayez d'inclure à la fois le sous-projet de bibliothèque et le module du sous-projet: include ':libraries:my_library' include ':libraries:my_library:sdk'

0
sfera