Abhängigkeiten der Konfiguration können nicht geändert werden (nach Aktivierung der sofortigen Ausführung)

Lesezeit: 11 Minuten

Benutzer-Avatar
mbonnin

Ich habe gerade aktiviert instant run in meinem Android-Studio-Projekt. (Gefolgt von der Anleitung hier)

Mein Projekt enthält git Submodule und irgendwie kompilieren diese nicht mehr.

Dies ist der Fehler, den ich bekomme:

Fehler: (8, 0) Abhängigkeiten der Konfiguration „:libraries:my_library:classpath“ können nicht geändert werden, nachdem sie aufgelöst wurde.

Irgendeine Idee, was da falsch sein könnte?

Build.gradle der obersten Ebene:

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

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

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

}

  • Kannst du deine einfügen build.gradle Dateien?

    – nhaarman

    23. November 2015 um 19:28 Uhr

  • Versuchen Sie Fabric zu entfernen und sehen Sie, ob das das Durcheinander verursacht, verwenden Sie auch die gleiche buildToolsVersion für alle Module

    – Gabor

    9. Dezember 2015 um 21:15 Uhr


  • Sieht aus, als würdest du es nicht brauchen mavenCentral() wenn du schon hast jcenter().

    – Frosch

    19. Januar 2016 um 15:54 Uhr

  • @HiI’mFrogatto genau … das habe ich vor einiger Zeit in meiner Antwort erwähnt.

    – Viraler Patel

    19. Januar 2016 um 16:04 Uhr

  • @passsy Stimmen die oben geposteten Gradle-Dateien genau mit Ihrer Situation überein? Aus einigen Ihrer Kommentare unten geht hervor, dass sich Ihre Projektstruktur (mit zwei build.gradle-Dateien der obersten Ebene) von der obigen Frage unterscheidet, obwohl Sie dieselbe Fehlermeldung erhalten. Sie könnten diese Frage mit Ihrer genauen Situation aktualisieren, aber Sie sollten Ihren Code wirklich in einer ganz neuen Frage posten.

    – Wut

    19. Januar 2016 um 20:51 Uhr


Benutzer-Avatar
thausma

gradle liest und führt alle aus build.gradle Dateien in allen Ordnern der enthaltenen Module. Wie der Fehler zeigt, versucht es auch, das Root-Build-Skript von auszuführen :libraries:my_library.

Du musst deine ändern settings.gradle und schließen Sie das Bibliotheksprojekt ein, indem Sie sein ‘projectDir’ festlegen:

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

Mit diesem settings.gradle Sie können das Bibliotheksprojekt als Gradle-Abhängigkeit referenzieren mit:

compile project(':sdk')

  • Dies sollte die akzeptierte Antwort sein. Eine Änderung der Projektstruktur ist keine Lösung

    – Passiert

    11. April 2016 um 11:20 Uhr

Ich hatte das gleiche Problem. Ich habe es gelöst, indem ich die entfernt habe classpath im Submodul Top-Level build.gradle Datei.

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

Ich bin mir nicht sicher, ob es das Beste ist, aber es hat bei mir funktioniert.

  • das hat bei mir auch funktioniert. aber es ist nicht ideal, da wir build.gradle des Submoduls nicht ändern sollten.

    – jiawen

    9. April 2016 um 16:17 Uhr


Benutzer-Avatar
Stefan

Ich hatte das gleiche Problem. Ich habe es mit dem verglichen (funktionierendes) Beispielprojekt von @RaGe und fand den kleinen Unterschied.

Der Unterprojektordner muss mit einem Großbuchstaben beginnen.

Hier ist die Änderung, die ich am @RaGes-Beispiel vorgenommen habe, um es zu beschädigen und wieder zum Laufen zu bringen.

Gebrochene Struktur:

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

führt zu folgendem Fehler:

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

Arbeitsstruktur (mit Großbuchstaben Teilprojekt)

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

auch die oberste Ebene settings.gradle muss geändert werden:

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

und app/build.gradle muss das ändern

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

Alles kompiliert

Vorsichtig sein! Git unterscheidet standardmäßig nicht zwischen Groß- und Kleinschreibung. Verwenden

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

um den Ordner umzubenennen.

  • Woah! großer Fang! Vielen Dank. Wenn es nach mir ginge, würde ich Ihnen das Kopfgeld zusprechen, bevor es abläuft. Jetzt können wir zumindest versuchen zu untersuchen, warum dies geschieht. Ich vermute, dass es sich um einen Android-Plugin-Bug handelt.

    – Wut

    26. Januar 2016 um 13:05 Uhr

  • Ich muss fragen, warum haben Sie die Groß- und Kleinschreibung des Projektnamens geändert?

    – Wut

    26. Januar 2016 um 13:05 Uhr

  • Vielen Dank! funktioniert super. Ich kann nicht glauben, dass ich wegen eines einzigen Kleinbuchstabens zwei Tage verschwendet habe.

    – Passiert

    26. Januar 2016 um 13:09 Uhr

  • Auch ist anscheinend nur eine Ebene von Unterverzeichnissen erlaubt:MyApplication2:mylibrarywird aber nicht funktionieren :Subdirectory:MyApplication2:mylibrary. Sie können mit reproduzieren github.com/martinbonnin/TestInstantRun. Es wäre großartig, eine Erklärung zu haben, warum wir diese Einschränkungen haben, aber ich werde die Frage als beantwortet markieren. Vielen Dank für Ihre Hilfe.

    – mbonnin

    27. Januar 2016 um 20:02 Uhr

  • Er, bitte verwenden Sie die Antwort von wem?

    – 8bittree

    20. September 2016 um 15:38 Uhr

Benutzer-Avatar
vishal jangid

Laut offizieller Dokumentation auf Instant Run.

Was hinter den Kulissen passiert ist, ist, dass wir die build.Gradle-Datei Ihres Projekts aktualisiert haben, um die neueste Version des Android-Gradle-Plug-Ins zu verwenden, das erforderlich ist, damit Instant Run funktioniert. Wir aktualisieren auch Ihre Gradle-Wrapper-Version auf 2.8 und versuchen, die Version der Build-Tools in allen Ihren Modulen auf die neueste Version (23.0.2) zu aktualisieren. Dies ist für Instant Run nicht erforderlich, aber es wird eine neue, schnellere Version von dex verwendet, wodurch sowohl Instant Run als auch ein vollständiger Build etwas schneller werden.

Ein Ausschnitt von Application\build.gradle ist unten dargestellt:

buildscript {
   repositories {
       jcenter()
   }

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

Bekannte Probleme bei der Verwendung von Instant Run

Verwenden von Instant Run mit Reflection

Reflexion könnte unerwartete Dinge zeigen, zum Beispiel:

  • Alle Kurse werden öffentlich gemacht
  • Viele andere Dinge werden auch öffentlich gemacht

Einschränkungen bei der Leistungsprofilerstellung

Wir empfehlen, Instant Run vorübergehend zu deaktivieren, während Sie Ihre Debug-Anwendung profilieren.

Es gibt eine sehr geringe Auswirkung auf die Leistung, wenn Instant Run verwendet wird, und eine etwas größere Auswirkung, wenn Methoden überschrieben werden.

Erhöhung der App-Methoden

Instant Run fügt einige Methoden hinzu – 140 plus die dreifache Anzahl von Klassen in Ihrer App und ihren lokalen Abhängigkeiten. Wenn die App zuvor knapp unter dem Dex-Limit lag, kann die Aktivierung von Instant Run Ihre App über das Dex-Limit bringen. Erfahren Sie, wie Sie dies beheben können, indem Sie Multidex-Entwicklungs-Builds optimieren.

Andere bekannte Probleme

  • Zeitweilige Probleme können auftreten, wenn die IDE die Verbindung mit der App verliert, was eine vollständige Neuerstellung auslöst.
  • Die Kompatibilität mit Gradle-Plugins von Drittanbietern wurde noch nicht getestet, insbesondere diejenigen, die nicht aktualisiert wurden, um die neue Transformations-API zu verwenden.
  • Die Datenbindung ist derzeit in diesem Build unterbrochen (Wiederherstellungsfähigkeit).

Wenn Sie also mit diesem Problem konfrontiert sind, können Sie Ihren Sofortlauf deaktivieren

Gehen Sie zu Einstellungen → Build, Ausführung, Bereitstellung → Instant Run und deaktivieren Sie Instant Run aktivieren… .

Besseres Verständnis von Instant Run Go hier

Nehmen Sie Ihre Abhängigkeiten aus Ihrem Buildgradle der obersten Ebene heraus. So wie es ist, erstellen Sie einen Klassenpfad mit Ihrem Gradle der obersten Ebene und versuchen dann, ihn mit Ihren anderen build.gradles zu überschreiben

Aus:

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

Zu: Beachten Sie, dass ich diese kommentierte Zeile nicht hinzugefügt habe, Android-Studio tut dies automatisch

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

Sie sollten in der Lage sein, alle erforderlichen Maven-Repositories zu Ihren separaten App-Grades hinzuzufügen, da sie spezifisch sein sollten und das jcenter viele davon abdecken würde, wie @AndroidMechanic und @Hi I’m Frogatto in früheren Antworten versucht haben und zu sagen Kommentare. Schau mal hier nachlesen Papierkorb – JCenter

Die andere Sache ist, ich verstehe nicht, warum Sie Ihre Bibliotheken verwalten, die Gradle innerhalb Ihres Projekts als Teil Ihres Projekts erstellen. Sie sollten mit der App build.gradle von Ihrem Projekt aus auf Ihre Bibliothek verweisen. Sie behandeln den Gradle der Bibliothek als Gradle der App.

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'

}

Nehmen Sie diese Änderungen vor, sehen Sie dann, welche Duplikate vorhanden sind, und verwalten Sie sie von dort aus.

Außerdem empfehle ich, das Projekt manuell mit Gradle-Dateien zu synchronisieren, wenn Änderungen vorgenommen werden. Ich würde mich nicht auf Instant verlassen, es ist wichtig, Änderungen schrittweise vorzunehmen und eine Bestandsaufnahme dessen zu machen, was passiert, besonders wenn es nicht kompiliert wird. Das ist nur meine Meinung und eine Möglichkeit, in Android zu programmieren.

Wenn Instant Run bei einem bestimmten Projekt Chaos anrichtet, würde ich es für dieses Projekt deaktivieren. Es ist standardmäßig aktiviert und ich hatte keine Probleme damit. Das Build-Chaos kann zunächst das Ergebnis unklarer Abstufungen in Ihrem Projekt sein.

Ebenfalls:

Bei Gradle-Wrapper-Eigenschaften ist Note 2.10 erforderlich classpath 'com.android.tools.build:gradle:2.0.0-alpha6':

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

Hier finden Sie die neuesten Updates
Android Tools-Projektseite

Oder Sie können eine frühere Version von Android Studio installieren und die vorherige Arbeitsversion Ihres Projekts verwenden.

Wenn Sie mehrere Git-Dateien haben, schlage ich vor, dass Sie die überflüssigen entfernen und nur die behalten, die Sie für die Versionskontrolle verwenden.

  • Dies löst nicht das Problem, das entweder durch das Originalposter oder Passsy aufgeworfen wird. Das Problem ist, dass sie versucht haben, ein ganzes Android-Projekt mit einem Root- und einem Lib-Modul in ein anderes Android-Projekt aufzunehmen. Dies führt zu zwei build.gradle-Dateien auf „Stammebene“. Ich gebe zu, dass dies eine dumme Art ist, Projekte zu organisieren, aber es hat eindeutig für sie funktioniert, bevor sie auf Alpha6 aktualisiert haben. Daher die Frage. All die Dinge über Repos und Abhängigkeiten sind gute Ratschläge, aber für das vorliegende Problem irrelevant.

    – Wut

    23. Januar 2016 um 18:16 Uhr


  • Auch Abhängigkeiten im Buildscript-Abschnitt sind durchaus akzeptabel, nur normalerweise nicht anwendbar. In diesem Fall handelt es sich bei den Abhängigkeiten eindeutig um Gradle-Bibliotheken für das Buildscript selbst (z. B. Bintray-Release) und nicht um Android-Code-Abhängigkeiten. Sie werden also korrekt im Buildscript-Abschnitt und nicht in den App-Abhängigkeiten in der Frage platziert.

    – Wut

    23. Januar 2016 um 18:18 Uhr

  • @ReGe hat richtig analysiert, warum diese Antwort dieses Problem nicht löst. Die Struktur mag “falsch” sein, wird aber in vielen Projekten verwendet. Selbst mit der “falschen” Struktur sollte ich in der Lage sein, einen Ordner mit einem Modul einzufügen, ohne das build.gradle des übergeordneten Ordners auszulösen.

    – Passiert

    25. Januar 2016 um 14:34 Uhr

Benutzer-Avatar
Maxim Beresowski

Klassenpfad „com.android.tools.build:gradle:2.0.0-alpha1“

versuche es zu ändern

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

alpha1 scheint seit heute (?) veraltet zu sein und kompiliert nicht mehr. Außerdem müssen Sie Ihren Gradle auf die neueste Version 2.10 aktualisieren, um mit Alpha6 zu arbeiten

  • Dies löst nicht das Problem, das entweder durch das Originalposter oder Passsy aufgeworfen wird. Das Problem ist, dass sie versucht haben, ein ganzes Android-Projekt mit einem Root- und einem Lib-Modul in ein anderes Android-Projekt aufzunehmen. Dies führt zu zwei build.gradle-Dateien auf „Stammebene“. Ich gebe zu, dass dies eine dumme Art ist, Projekte zu organisieren, aber es hat eindeutig für sie funktioniert, bevor sie auf Alpha6 aktualisiert haben. Daher die Frage. All die Dinge über Repos und Abhängigkeiten sind gute Ratschläge, aber für das vorliegende Problem irrelevant.

    – Wut

    23. Januar 2016 um 18:16 Uhr


  • Auch Abhängigkeiten im Buildscript-Abschnitt sind durchaus akzeptabel, nur normalerweise nicht anwendbar. In diesem Fall handelt es sich bei den Abhängigkeiten eindeutig um Gradle-Bibliotheken für das Buildscript selbst (z. B. Bintray-Release) und nicht um Android-Code-Abhängigkeiten. Sie werden also korrekt im Buildscript-Abschnitt und nicht in den App-Abhängigkeiten in der Frage platziert.

    – Wut

    23. Januar 2016 um 18:18 Uhr

  • @ReGe hat richtig analysiert, warum diese Antwort dieses Problem nicht löst. Die Struktur mag “falsch” sein, wird aber in vielen Projekten verwendet. Selbst mit der “falschen” Struktur sollte ich in der Lage sein, einen Ordner mit einem Modul einzufügen, ohne das build.gradle des übergeordneten Ordners auszulösen.

    – Passiert

    25. Januar 2016 um 14:34 Uhr

Benutzer-Avatar
TejjD

Zwei Dinge, die Sie ausprobieren können

Ändern Sie Ihr Plugin für “Android”

Mit den neuen Gradle-Tools müssen Sie das richtige Plugin für Ihre Modul-Gradle-Datei sowie Ihre Bibliothek-Gradle-Datei angeben. Wenn Sie genau hinsehen, ist Ihre Bibliotheks-Gradle-Datei korrekt:’

apply plugin: 'com.android.library'

Ändern Sie Ihr Modulgradle-Plugin:

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

org.apache-Klassen sind jetzt depcrated

Dies könnte auch ein möglicher Grund dafür sein, warum Ihre Anwendung nicht mehr kompiliert wird. Entferne das:

useLibrary 'org.apache.http.legacy'

Sehen Veraltete Liste.

1146360cookie-checkAbhängigkeiten der Konfiguration können nicht geändert werden (nach Aktivierung der sofortigen Ausführung)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy