‘Broncode komt niet overeen met bytecode’ bij foutopsporing op een apparaat

Ik heb een app die ik compileer tegen API-niveau 21:
voer hier de afbeeldingsbeschrijving in

en debug het vervolgens op een echt apparaat met API-niveau 23:

enter afbeelding beschrijving hier

Het probleem is dat wanneer ik probeer te debuggen via de eigen klassen van het Android-besturingssysteem, ik krijg ‘Broncode komt niet overeen met de bytecode’. Waarom gebeurt dit? Het testapparaat waarop de app draait, is API-niveau 23 en het bronbestand dat wordt opgespoord is ook niveau 23.
*voer afbeeldingsbeschrijving in hier*

Ik ben echt in de war. Kan iemand uitleggen waarom ik dit bericht zie en hoe ik het kan oplossen?


Antwoord 1, autoriteit 100%

Er is een openstaande kwestie in de IssueTracker van Google.

De mogelijke oplossingen die in het nummer worden gegeven (vanaf de datum van dit bericht) zijn:

  • Klik op Build -> Schoon
  • Schakel Instant Run uit, in Instellingen -> Bouwen, uitvoeren, implementeren

Antwoord 2, autoriteit 58%

Hier is mijn oplossing:

Als je meer dan één bibliotheekversie hebt, kan dit helpen.

  1. stel een breekpunt in op de lib-broncode
  2. laat de code naar het breekpunt lopen
  3. je krijgt deze tips

voer hier de afbeeldingsbeschrijving in

  1. klik op het pijlpictogram

  2. u krijgt dit

    voer hier de afbeeldingsbeschrijving in

  3. dubbelklik om de juiste lib te selecteren (normaal gesproken is de hoogste versie van de lib correct)

Ik heb per ongeluk op de knop “uitschakelen” geklikt, u kunt deze inschakelen in de debugger-instelling

voer hier de afbeeldingsbeschrijving in

Als je de tips in stap 3 niet hebt, kun je misschien controleren of je de instellingsopties hebt gecontroleerd


Antwoord 3, autoriteit 38%

U moet een Android-emulator gebruiken met hetzelfde api-niveau als de compileSdkVersion.
In jouw geval zou je een Android-emulator met api-niveau 21 moeten gebruiken.


Antwoord 4, autoriteit 10%

Als u Gradle gebruikt, is dit waarschijnlijk een probleem met Gradle-caches. (Referentie). Helaas, zelfs als je

gradle --refresh-dependencies

, het ververst niet echt alle afhankelijkheden. Er blijft wat rommel over. (Referentie).

Dus de meest zekere (maar drastische en lange) variant is om alles binnenin te wissen van de [gebruiker]/.gradle/caches. Of om uw probleemproject daar te vinden en alleen de caches te wissen.


Antwoord 5, autoriteit 2%

Ik heb alle hier gegeven oplossingen geprobeerd en geen enkele werkte voor mij. In versie 2019.1.3 Ik maak gewoon & artefact opnieuw opbouwen en het werkte; doe eerst Build -> Build Artifacts... -> <select your artifact> -> Cleanen klik vervolgens op Buildof Rebuildvanaf dezelfde plaats.


Antwoord 6, autoriteit 2%

Mijn app is gecompileerd op API LEVEL 29, maar foutopsporing op een echt apparaat op API LEVEL 28. Ik kreeg de waarschuwing source code does not match the bytecodein AndroidStudio. Ik heb het opgelost volgens deze stappen:

  1. Ga naar Voorkeuren>Instant Run: schakel de optie Instant Run uit

  2. Ga naar Build>Clean Build

  3. VOER de app opnieuw

Nu werkt het debuggen normaal.


Antwoord 7, autoriteit 2%

Dit zijn de stappen die voor mij hebben gewerkt (voor zowel Mac als Windows):

  1. Klik op “Bestand”
  2. Klik op “Caches ongeldig maken / opnieuw opstarten …”
  3. Kies: “Ongeldig maken en opnieuw opstarten”

Opmerking:het duurt minder dan een minuut voor kleine projecten, maar aangezien mijn project groot was (ongeveer een miljoen regels code), duurde het 20 minuten.


Antwoord 8

Ga naar Projectinstellingen > Artefacten. Selecteer het artefact dat het probleem heeft. Er is een optie “Opnemen in projectopbouw”. Dit moet worden aangevinkt (ingeschakeld). Voor oudere versies van IntelliJ is deze optie “Make on build”.


Antwoord 9

Waarschijnlijk kan deze foutmelding meer dan één oorzaak hebben, mijn geval was niet zoals in de OP, in mijn geval was dit te wijten aan een bibliotheek van derden die extra bibliotheken nodig had.

Bijvoorbeeld: u voegt X.jar handmatig toe aan uw LIB, maar deze X.jar vereist dat Z.jar werkt.

Het kostte me enige tijd om erachter te komen dat het bericht helemaal niet hielp. Ik moest de app debuggen totdat ik de crashende klasse bereikte, en in die klasse ervoor zorgen dat aan alle importen werd voldaan.

(Bijzonderheden: ik heb MercadoLibre-0.3.4.jar toegevoegd, waarvoor commons-httpclient.jar nodig was)

Hopelijk helpt dit!


Antwoord 10

Dit kan ook gebeuren als u ProGuard heeft ingeschakeld. Stel in buildTypes minifyEnabled false, shrinkResources false, useProguard false


Antwoord 11

Ik heb de hier gegeven oplossingen geprobeerd terwijl ik aan een applicatie werkte die Bluetooth Low Energy (BLE) gebruikte. Ik heb het geprobeerd,

  1. Schoon bouwen
  2. Direct uitvoeren uitgeschakeld
  3. Caches ongeldig maken / opnieuw opstarten

deze zijn allemaal mislukt.

Wat ik deed was fouten opsporen in de punten waarvan ik dacht dat ik de waarschuwing kreeg. Ik kreeg nog steeds de waarschuwing, maar de applicatie werkte prima. U kunt de waarschuwing negeren.


Antwoord 12

Je kunt AVD maken, API-niveau selecteren dat gelijk is aan je tagetApi en compileApi, het werkt voor mij.


Antwoord 13

Dus ik heb een account gemaakt zodat ik kan helpen dit probleem op te lossen dat veel mensen teistert en waarbij de bovenstaande oplossingen niet werken.

Als je deze foutmelding krijgt en niets helpt hier. Probeer op de knop “Programma afspelen hervatten” te klikken totdat het programma voorbij de fout is. Klik vervolgens op het console-tabblad naast foutopsporing en lees de rode tekst.

Ik kreeg die broncodefout, hoewel mijn probleem probeerde een waarde in een null-array in te voegen.
Stap 1 Klik op de knop Hervatten

Stap 2 Klik op het console-tabblad en lees de rode tekst


Antwoord 14

hier is de reden waarom ik deze foutmelding kreeg “broncode komt niet overeen met bytecode”. Mijn zaak heeft niets te maken met een API, compilerversie….. Het wordt veroorzaakt door het opblazen van een lay-outweergave in een rootweergave terwijl ik de inflator per ongeluk ergens anders start (een chuck van “result handler” code die bovenop de onCreate-functie van de Android-app-code wordt geplaatst). Op de een of andere manier geeft de debugger me hier niet de juiste hint van (bijvoorbeeld, inflator is niet geïnitialiseerd of heeft een instantie) wanneer het breekpunt is ingesteld en stop hier.


Antwoord 15

Dit overkwam mij toen ik per ongeluk dezelfde bibliotheek meerdere keren heb toegevoegd.

implementation 'androidx.appcompat:appcompat:1.1.0'

De bovenstaande bibliotheek is meerdere keren toegevoegd.


Antwoord 16

Als technieken voor het opschonen, opnieuw opbouwen, ongeldig maken van de cache en opnieuw opstarten enz. niet werken, probeer dan de vorige APK te verwijderen en de nieuwe APK opnieuw te installeren.


Antwoord 17

Android Studio neemt de bronversie gelijk aan de doelversie in uw toepassing. Compilatie uitgevoerd met bronversie gelijk aan bovengenoemde Compilatieversie. Zorg er dus voor dat in uw project Compile Version == Target Version (pas het build.gradle-bestand van de module aan).


Antwoord 18

Ik had hetzelfde probleem en heb een oplossing gevonden. Als je een lijn in rood hebt gemarkeerd, krijg je deze fout, maar als je alle lijnen uit de markering haalt, werkt het normaal.

door gemarkeerd, bedoel ik wanneer u op de linkerkant klikt waar de lijnnummers zijn en het de lijn markeert.
Als dat niet duidelijk is, zijn foto’s.
ga van:
gemarkeerde lijn
naar:
niet gemarkeerde lijn

Other episodes