wake-up-neo.com

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

Ich habe eine App, die ich gegen API Level 21 kompiliere:  enter image description here

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

 enter image description here

Das Problem ist, wenn ich das Debuggen über die eigenen Klassen des Android-Betriebssystems versuche, bekomme ich "Der Quellcode stimmt nicht mit dem Bytecode überein". Warum passiert dies? Das Testgerät, auf dem die App ausgeführt wird, ist API-Ebene 23, und die zu debuggende Quelldatei ist ebenfalls Ebene 23. .. /.  *enter image description here*

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

47
Crocodile

In AOSP gibt es ein offenes Problem, bei dem einige Benutzer mögliche Lösungen angegeben haben: https://code.google.com/p/Android/issues/detail?id=225199&sort=-id&colspec=ID%20Type % 20Status% 20Besitzer% 20Übersicht% 20Stars

Die möglichen Lösungen, die dort (zum Datum dieses Beitrags) angegeben wurden, sind:

  • Klicken Sie auf Build-> Clean
  • Deaktivieren Sie Instant Run in Einstellungen-> Erstellen, Ausführen, Bereitstellung
27

hier ist meine Lösung 

wenn Sie mehr als eine Versionsbibliothek haben, kann dies hilfreich sein.

  1. setzen Sie einen Haltepunkt im lib-Quellcode 
  2. lassen Sie den Code bis zum Haltepunkt laufen
  3. sie erhalten diese Tipps 

     enter image description here

  4. klicken Sie auf das Pfeilsymbol 

  5. du wirst das bekommen

     enter image description here

  6. doppelklicken, um die richtige lib auszuwählen (normalerweise ist die höchste Version lib korrekt)

    wenn Sie versehentlich auf die Schaltfläche "Deaktivieren" geklickt haben, können Sie sie in der Debugger-Einstellung aktivieren 

 enter image description here

wenn Sie die Tipps nicht in Schritt 3 erhalten haben, können Sie überprüfen, ob Sie die Einstellungsoptionen überprüft haben.

8
Allen

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

7
Uriel Frankel

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

gradle --refresh-dependencies

, es erfrischt nicht wirklich alle Abhängigkeiten. Es bleibt etwas Müll übrig. ( Referenz ).

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

3
Gangnus

Wahrscheinlich kann diese Fehlermeldung mehr als eine Ursache haben, mein Fall war nicht wie der vom OP, in meinem Fall lag dies an einer Drittanbieter-Bibliothek, die zusätzliche Bibliotheken erforderte.

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

Es dauerte einige Zeit, bis ich herausfand, dass die Botschaft überhaupt nicht half. Ich musste die App debuggen, bis ich die abstürzende Klasse erreichte, und in dieser Klasse sicherstellen, dass alle Importe zufriedenstellend waren.

(Particualry: Ich habe MercadoLibre-0.3.4.jar hinzugefügt, was commons-httpclient.jar erfordert)

Hoffe das hilft!

0

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

0

Ich habe die hier angegebene Lösung ausprobiert und keine davon hat für mich funktioniert. In Version 2019.1.3 habe ich gerade das Artefakt bereinigt und neu erstellt, und es hat funktioniert. zuerst Build -> Build Artifacts... -> <select your artifact> -> Clean ausführen und dann Build oder Rebuild von derselben Stelle aus anklicken.

0
ShiroiTora

Ich habe die hier angegebenen Lösungen ausprobiert, während ich an einer Anwendung arbeitete, die Bluetooth Low Energy (BLE) verwendete. Ich habe es versucht,

  1. Clean Build
  2. Instant Run deaktiviert
  3. Caches ungültig machen/neu starten

alle sind gescheitert.

Was ich tat, war das Debuggen der Punkte, an denen ich dachte, ich hätte die Warnung erhalten. Ich bekam immer noch die Warnung, aber die Anwendung funktionierte gut. Sie können die Warnung ignorieren.

0
Asjad Sohail

Gehen Sie zu Projekteinstellungen> Artefakte. Wählen Sie das Artefakt aus, das das Problem aufweist. Es gibt eine Option "In Projekterstellung einbeziehen". Dies muss geprüft (aktiviert) werden. Bei älteren IntelliJ-Versionen ist diese Option "Make on Build". 

0
Swathi