web-dev-qa-db-fra.com

"Le code source ne correspond pas au code intermédiaire" lors du débogage sur un périphérique

J'ai une application que je compile par rapport au niveau 21 de l'API: enter image description here

puis déboguez-le sur un périphérique réel avec le niveau 23 de l'API:

enter image description here

Le problème est que lorsque j'essaie de déboguer à travers les classes du système d'exploitation Android, je reçois le message "Le code source ne correspond pas au bytecode". Pourquoi cela arrive-t-il? Le périphérique de test sur lequel l'application est en cours d'exécution est le niveau 23 de l'API et le fichier source en cours de débogage est également au niveau 23 . *enter image description here*

Je suis vraiment confus. Quelqu'un peut-il expliquer pourquoi je vois ce message et comment je peux le réparer?

47
Crocodile

Il existe un problème non résolu dans AOSP, dans lequel certains utilisateurs ont proposé des solutions: https://code.google.com/p/Android/issues/detail?id=225199&sort=-id&colspec=ID%20Type % 20Status% 20Propriétaire% 20Sommaire% 20Etoiles

Les solutions potentielles indiquées ici (à la date de cet article) sont:

  • Cliquez sur Build-> Clean
  • Désactiver Instant Run, dans Paramètres-> Construire, Exécution, Déploiement
27
Michael Hoffmann

voici ma solution 

si vous avez plus d'une bibliothèque de versions, cela peut aider.

  1. définir un point d'arrêt sur le code source lib 
  2. laisser le code s'exécuter jusqu'au point d'arrêt
  3. vous aurez ces conseils 

     enter image description here

  4. cliquez sur l'icône de flèche 

  5. vous aurez ceci

     enter image description here

  6. double-cliquez pour sélectionner la bonne bibliothèque (normalement, la version la plus élevée est correcte)

    si vous avez cliqué par erreur sur le bouton "désactiver", vous pouvez l'activer dans les paramètres du débogueur 

 enter image description here

si vous n'avez pas reçu les astuces à l'étape 3, vous pouvez peut-être vérifier si vous avez coché les options de réglage.

8
Allen

Vous devez utiliser un émulateur Android avec le même niveau d'api que compileSdkVersion . Dans votre cas, vous devez utiliser un émulateur Android avec le niveau d'api 21.

7
Uriel Frankel

Si vous utilisez Gradle, c'est probablement un problème avec les caches Gradle. ( Référence ). Hélas, même si tu cours 

gradle --refresh-dependencies

, il n’est pas vraiment rafraîchissant toutes les dépendances. Quelques restes d'ordures. ( Référence ).

Ainsi, la variante la plus sûre (mais radicale et longue) consiste à effacer tout ce qui se trouve à l'intérieur de [utilisateur] /. Gradle/caches. Ou pour trouver votre projet problème là-bas et effacer uniquement ses caches.

3
Gangnus

Ce message d'erreur peut probablement avoir plus d'une cause. Mon cas ne ressemblait pas à celui de l'OP. Dans mon cas, cela était dû à une bibliothèque tierce qui nécessitait des bibliothèques supplémentaires.

Par exemple: vous ajoutez manuellement X.jar à votre LIB, mais ce X.jar nécessite Z.jar pour fonctionner.

Il m'a fallu un certain temps pour comprendre, le message ne m'aidait pas du tout. J'ai dû déboguer l'application jusqu'à ce que j'aie atteint la classe qui tombe en panne et m'assurer que toutes les importations sont satisfaites.

(Particualry: J'ai ajouté MercadoLibre-0.3.4.jar, qui demandait commons-httpclient.jar)

J'espère que cela t'aides!

0
Federico Alvarez

Cela peut également se produire si vous avez activé ProGuard. Dans buildTypes, définissez minifyEnabled false, shrinkResources false, useProguard false

0
ashishdhiman2007

J'ai essayé toute la solution donnée ici et aucune d'entre elles n'a fonctionné pour moi. Dans la version 2019.1.3, je viens de nettoyer et de reconstruire un artefact et cela a fonctionné; faites d'abord Build -> Build Artifacts... -> <select your artifact> -> Clean puis cliquez Build ou Rebuild à partir du même endroit.

0
ShiroiTora

J'ai essayé les solutions données ici tout en travaillant sur une application utilisant Bluetooth Low Energy (BLE). J'ai essayé,

  1. Construction propre
  2. Exécution instantanée désactivée
  3. Invalider les caches/redémarrer

tout cela a échoué.

Ce que j’ai fait, c’est de déboguer les points où je pensais avoir l’avertissement, mais j’ai toujours eu l’avertissement, mais l’application fonctionnait bien. Vous pouvez ignorer l'avertissement.

0
Asjad Sohail

Accédez à Paramètres du projet> Artefacts. Sélectionnez l'artefact qui a le problème. Il existe une option "Inclure dans la construction du projet". Cela doit être vérifié (activé). Pour les anciennes versions d'IntelliJ, cette option est "Créer à la compilation". 

0
Swathi