Ich habe eine App, die ich gegen API Level 21 kompiliere:
und debuggen Sie es dann auf einem realen Gerät mit API-Level 23:
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. .. /.
Ich bin ziemlich verwirrt. Kann jemand erklären, warum ich diese Nachricht sehe und wie ich sie reparieren kann?
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:
hier ist meine Lösung
wenn Sie mehr als eine Versionsbibliothek haben, kann dies hilfreich sein.
sie erhalten diese Tipps
klicken Sie auf das Pfeilsymbol
du wirst das bekommen
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
wenn Sie die Tipps nicht in Schritt 3 erhalten haben, können Sie überprüfen, ob Sie die Einstellungsoptionen überprüft haben.
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.
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.
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!
Dies kann auch passieren, wenn Sie ProGuard aktiviert haben. Legen Sie in buildTypes minifyEnabled false, shrinkResources false und useProguard false fest
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.
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,
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.
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".