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'
}
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.
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')
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.
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:
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
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
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.
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.
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 .
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'