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
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.
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
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:
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… .
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
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.
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':
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.
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
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:’
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 hastjcenter()
.– 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