web-dev-qa-db-fra.com

Android Studio entre dans une mauvaise source SDK

J'ai les paramètres build.gradle suivants.

compileSdkVersion 21
buildToolsVersion '21.1.1'

defaultConfig {
    minSdkVersion 18
    targetSdkVersion 21
}

Le problème est que lorsque j'entre dans Android source SDK sur un appareil KitKat (19 sur Genymotion ou Device), il insiste toujours pour entrer dans la source Android-21 au lieu de 19.

La modification de l'un des paramètres ci-dessus interrompt simplement la compilation de mon application, car j'ai le code v21. Tous les 19 appels sont protégés correctement et le code fonctionne sur 19, juste la liaison du code source est incorrecte.

Bravo à l'avance Stack Overflow frères et sœurs!

39
John Twigg

Modifier (01/07/2016):
Android Studio 2.2 le corrige et passera aux sources du niveau d'API correspondant à l'appareil sur lequel vous exécutez réellement (tant que ces sources sont installées). Il a été annoncé ici .


La solution de contournement suivante a fonctionné pour moi:

  1. Compilez l'application sans aucune modification.
  2. Lancez l'application en mode débogage (et interrompez éventuellement le point d'arrêt).
  3. Accédez à File> Project Structure, recherchez votre module app (ou/et éventuellement tout autre module) et modifiez le Compile Sdk Version à un qui correspond à l'appareil sur lequel vous déboguez (c'est-à-dire 19).
  4. Entrez dans le code du framework - il devrait entrer dans les sources du SDK 19.
10
Alex Lipov

Comme mentionné dans une autre réponse, il a été corrigé dans Android Studio 2.2 ( rapport de bogue ).

Cependant, cela ne fonctionnait toujours pas pour moi même dans Android Studio 3.0 Il a commencé à fonctionner uniquement après avoir coché "Afficher le sélecteur de source alternative" dans les paramètres.

capture d'écran

7
igorz

Que se passe-t-il si vous essayez de déboguer dans la source sur un émulateur qui exécute une image Android 5.0.x Lollipop? Met-il en surbrillance la source correcte? J'ai également rencontré des difficultés avec cela, et Je suis arrivé à la conclusion que le problème est dû aux personnalisations de la source Android par le fournisseur de matériel.

J'ai essayé de parcourir le code source Android sur un appareil Samsung exécutant 4.4.2 KitKat. Certains fichiers s'alignent bien, certains sont décalés de quelques lignes et les autres sont loin d'instrumentation.Java est celui dans lequel je me retrouve régulièrement. Il est décalé de 5 lignes environ.

Alors, pourquoi le fournisseur a-t-il personnalisé la source Android? J'ai parcouru le démarrage de l'application dans ActivityThread.Java et Instrumentation.Java. Le débogueur fonctionnera toujours correctement même si la source ne s'aligne pas . J'ai croisé la routine dans laquelle j'étais avec Android sur grepcode.com. Finalement, je vois l'étape du débogueur dans un appel de fonction qui n'est présent dans aucune version de Java publié sur grepcode.

Voici un exemple spécifique: ActivityThread.HandleLaunchActivity. J'ai vu le débogueur passer ces appels

unscheduleGcIdler          : present in Android source
intent.getWindowStyle      : not present. Samsung customization?
handleConfigurationChanged : present

Si j'ai raison, le débogueur doit parcourir correctement une image émulée, car elle ne contiendra pas de code personnalisé du fournisseur.

1
bigh_29