'Quellcode stimmt nicht mit dem Bytecode überein' beim Debuggen auf einem Gerät

78

Ich habe eine App, die ich gegen API Level 21 kompiliere: Geben Sie hier die Bildbeschreibung ein

und debuggen Sie es dann auf einem realen Gerät mit API-Level 23:

Geben Sie hier die Bildbeschreibung ein

Das Problem ist, wenn ich versuche, die eigenen Klassen des Android-Betriebssystems zu debuggen, wird "Quellcode stimmt nicht mit dem Bytecode überein" angezeigt. Warum passiert das? Das Testgerät, auf dem die App ausgeführt wird, ist API-Level 23, und die zu debuggende Quelldatei ist ebenfalls Level 23. * Bildbeschreibung hier eingeben *

Ich bin ziemlich verwirrt. Kann jemand erklären, warum ich diese Nachricht sehe und wie ich sie beheben kann?

Krokodil
quelle
sieht aus wie die apk in deinem gerät älter oder anders als der aktuelle code ist. Ich weiß, dass es offensichtlich ist, aber haben Sie versucht, die App einmal zu deinstallieren und erneut zu installieren?
Akash Raghav
2
Es scheint, dass der Fehler mit dem Intellij IDEA-Plugin Ihrer IDE zusammenhängt. Ich konnte einen Fehler hier berichtet finden confluence.jetbrains.com/display/IDEADEV/... . Könnten Sie das bitte durchgehen?
Febi M Felix
@Akash Ich habe das versucht. Die Datei, die ich gerade debugge, ist Teil des Android-Betriebssystems (ContentResolver) und nicht meine App.
Krokodil
1
@FebiMathew Danke. Es könnte dasselbe sein wie IDEA-159697. Dies ist ein Fix in der Vanilla IntelliJ IDE. Woher weiß ich, in welchem ​​Android Studio IDE-Build dieses Update angezeigt wird?
Krokodil

Antworten:

39

Hierfür gibt es im IssueTracker von Google ein offenes Problem .

Die möglichen Lösungen in der Ausgabe (zum Datum dieses Beitrags) sind:

  • Klicken Sie auf Erstellen -> Bereinigen
  • Deaktivieren Sie die Sofortausführung unter Einstellungen -> Erstellen, Ausführen, Bereitstellen
Michael Hoffmann
quelle
11
Weder das Deaktivieren von Instant Run noch eine der anderen Lösungen in diesem Link hat bei mir funktioniert.
Mister270
@ mister270 Hast du eine andere Lösung gefunden? Ich bin noch nie auf dieses Problem gestoßen, daher fällt es mir schwer, es zu debuggen und meine Antwort hier zu erweitern.
Michael Hoffmann
1
Ich habe das Minimum an SDK erhöht und einen sauberen Umbau durchgeführt, der das Problem "verschwinden" ließ. Ich bin jedoch nicht zufrieden mit dieser Lösung, da ich ein älteres min sdk wollte.
Mister270
3
Keine der oben genannten Lösungen hat bei mir funktioniert. Ich habe nicht einmal die Option Sofortausführung gefunden. Es ist so irritierend, mit INteelij zu debuggen. Ich muss die Installation nach jeder einzelnen Codeänderung neu installieren.
Gericht
17

Hier ist meine Lösung:

Wenn Sie mehr als eine Bibliotheksversion haben, kann dies hilfreich sein.

  1. Setzen Sie einen Haltepunkt für den lib-Quellcode
  2. Lassen Sie den Code zum Haltepunkt laufen
  3. Sie erhalten diese Tipps

Geben Sie hier die Bildbeschreibung ein

  1. Klicken Sie auf das Pfeilsymbol

  2. du wirst das bekommen

    Geben Sie hier die Bildbeschreibung ein

  3. Doppelklicken Sie, um die richtige Bibliothek auszuwählen (normalerweise ist die höchste Version der Bibliothek korrekt).

Ich habe versehentlich auf die Schaltfläche "Deaktivieren" geklickt. Sie können sie in der Debugger-Einstellung aktivieren

Geben Sie hier die Bildbeschreibung ein

Wenn Sie die Tipps in Schritt 3 nicht haben, können Sie möglicherweise überprüfen, ob Sie die Einstellungsoptionen überprüft haben

Jeffery Ma
quelle
4
Alternative Quellen sind aktiviert, werden jedoch nicht angezeigt. Kein Dropdown (und ja, ich habe 4 verschiedene API-Ebenen installiert).
Stephen M-auf Streik-
In einem Gradle-Projekt hat dies nicht geholfen, ich habe einfach die falsche Bibliothek vorübergehend aus den Projektmodulen entfernt und das hat geholfen, abgesehen von einem Haltepunkt in der richtigen Klasse, bei dem ein Drop-to-Frame verwendet wurde!
Kisna
10

Sie sollten einen Android-Emulator mit derselben API-Ebene wie die compileSdkVersion verwenden. In Ihrem Fall sollten Sie den Android-Emulator mit API-Level 21 verwenden.

Uriel Frankel
quelle
1
Das hat bei mir funktioniert. Mein Gerät war API 22, daher löste das Setzen von compileSdkVersion auf 22 das Problem.
Live-Love
5

Wenn Sie Gradle verwenden, liegt wahrscheinlich ein Problem mit Gradle-Caches vor. ( Referenz ). Ach, auch wenn du rennst

gradle --refresh-dependencies

Es werden nicht wirklich alle Abhängigkeiten aktualisiert. Es bleibt etwas Müll übrig. ( Referenz ).

Die sicherste (aber drastischste und langwierigste) Variante besteht also darin, alles aus den [Benutzer] /. Gradle / Caches zu löschen. Oder um Ihr Problemprojekt dort zu finden und nur seine Caches zu löschen.

Gangnus
quelle
3

Dies sind die Schritte, die bei mir funktioniert haben (sowohl für Mac als auch für Windows):

  1. Klicken Sie auf "Datei"
  2. Klicken Sie auf "Caches ungültig machen / neu starten ...".
  3. Wählen Sie: "Ungültig machen und neu starten"
  4. Warten Sie 20 Minuten
Navid Vafaei
quelle
1

Ich habe alle hier angegebenen Lösungen ausprobiert und keine davon hat für mich funktioniert. In Version 2019.1.3 habe ich nur Artefakte bereinigt und neu erstellt und es hat funktioniert. zuerst Sie Build -> Build Artifacts... -> <select your artifact> -> Cleanklicken dann Buildoder Rebuildvon derselben Stelle.

KaraKaplanKhan
quelle
0

Gehen Sie zu Projekteinstellungen> Artefakte. Wählen Sie das Artefakt aus, bei dem das Problem auftritt. Es gibt eine Option "In Projekterstellung einbeziehen". Dies muss überprüft (aktiviert) werden. Für ältere Versionen von IntelliJ ist diese Option "Make on Build".

Swathi
quelle
0

Wahrscheinlich kann diese Fehlermeldung mehr als eine Ursache haben. Mein Fall war nicht wie der aus dem OP. In meinem Fall lag dies an einer Bibliothek eines Drittanbieters, für die zusätzliche Bibliotheken erforderlich waren.

Beispiel: Sie fügen X.jar manuell zu Ihrer LIB hinzu, aber für diese X.jar muss Z.jar funktionieren.

Ich brauchte einige Zeit, um herauszufinden, dass die Nachricht überhaupt nicht half. Ich musste die App debuggen, bis ich die Absturzklasse erreichte, und in dieser Klasse sicherstellen, dass alle Importe zufrieden waren.

(Particualry: Ich habe MercadoLibre-0.3.4.jar hinzugefügt, für das commons-httpclient.jar erforderlich ist.)

Hoffe das hilft!

Federico Alvarez
quelle
0

Dies kann auch passieren, wenn Sie ProGuard aktiviert haben. Setzen Sie in buildTypes minifyEnabled false, shrinkResources false und useProguard false

ashishdhiman2007
quelle
0

Ich habe die hier angegebenen Lösungen ausprobiert, als ich an einer Anwendung gearbeitet habe, die Bluetooth Low Energy (BLE) verwendet. Ich habe es versucht,

  1. Sauber bauen
  2. Sofortiger Lauf deaktiviert
  3. Caches ungültig machen / neu starten

all dies schlug fehl.

Was ich getan habe, war das Debuggen der Punkte, an denen ich dachte, ich würde die Warnung erhalten. Ich habe immer noch die Warnung erhalten, aber die Anwendung funktionierte einwandfrei. Sie können die Warnung ignorieren.

Asjad Sohail
quelle
0

Meine App wurde auf API LEVEL 29 kompiliert, aber das Debuggen auf einem realen Gerät auf API LEVEL 28. Ich habe die Warnung source code does not match the bytecodein AndroidStudio erhalten. Ich habe Folgendes behoben:

  1. Gehen Sie zu Einstellungen> Sofortiger Lauf: Deaktivieren Sie den sofortigen Lauf

  2. Gehen Sie zu Build> Clean Build

  3. Führen Sie die App erneut aus

Jetzt läuft das Debug normal.

NANA
quelle
0

Sie können AVD erstellen, API-Level gleich Ihrem tagetApi und compileApi auswählen, es funktioniert für mich.

iceyang1989
quelle
-1

Android Studio verwendet eine Quellversion, die der Zielversion in Ihrer Anwendung entspricht. Die Kompilierung wird mit einer Quellversion durchgeführt, die der oben genannten Kompilierungsversion entspricht. Achten Sie also darauf, dass in Ihrem Projekt Compile Version == Target Version (die build.gradle-Datei des Moduls anpassen).

Medynets
quelle
-2

Ich hatte das gleiche Problem und fand eine Lösung. Wenn Sie eine rot markierte Linie haben, wird dieser Fehler angezeigt. Wenn Sie jedoch alle Linien deaktivieren, funktioniert dies normal.

Mit markiert meine ich, wenn Sie auf die linke Seite klicken, wo sich die Zeilennummern befinden, und die Linie hervorgehoben wird. Wenn das nicht klar ist, sind hier Bilder.
Gehe von: markierte Linie zu: nicht markierte Linie

Joe Giusti
quelle