2014-12-27 8 views
34

Sto eseguendo il debug con Android Studio (A.S) 1.0.2 con compileSdkVersion 21 impostato in build.gradle. Quando si utilizza un emulatore con API 21, tutto funziona correttamente. Il problema si verifica durante il debug su un dispositivo con API 19. Ogni riga nello stack di chiamate (contrassegnata come "Frame" in AS) mostra correttamente il nome della funzione, il file di origine e il numero di linea corrispondente all'API 19. Tuttavia, quando I fare clic su una delle righe che corrisponde a una delle origini framework (ad esempio Activity.java), AS si apre in modo errato e visualizza la versione API 21 del file anziché la versione dell'API 19.Studio Android mostra le fonti da API di compileSdkVersion durante il debug sul dispositivo con API precedente

Nella mia cartella di Android SDK Ho sia ./sources/android-19 e ./sources/android-21

Qualsiasi idea del perché A.Ş visualizza la versione errata del file?

cose che ho provato (in ordine):

  • Ripristino Android Studio (rimuovendo ~/.AndroidStudio *)
  • Aggiornamento Android Studio alla versione più recente
  • Running on emulatore con API 21 - AS mostra la versione corretta (21) dei file.
  • Modifica compileSdkVersion su 19 e in esecuzione su dispositivo API 19 - A.S mostra i numeri di riga corretti nello stack di chiamate e apre la versione corretta (API 19) dei file nella riga corretta.
  • Modifica compileSdkVersion su 19 e in esecuzione su emulatore API 21 - AS mostra, nello stack di chiamate, i numeri di riga corrispondenti all'API 21 (che mi sembra il comportamento corretto), tuttavia, quando si fa clic su di esso, AS apre erroneamente la versione API 19 del file anziché la versione API 21.

In sintesi, quando si fa clic su una riga nella A.Ş stack di chiamate si apre la versione del file rappresentato da compileSdkVersion e non quello utilizzato dal dispositivo/emulatore durante la sessione di debug.

+0

Mi piacerebbe trovare una soluzione dove 'compileSdkVersion' è impostato su 21 e Android Studio mostra automaticamente le origini corrette durante il debug sul dispositivo API livello 19. Non voglio cambiare 'compileSdkVersion', dato che le mie build dovrebbero essere contro il livello API 21. –

risposta

3

Apri il tuo progetto in Intellij Idea (Android Studio basato su di esso) e scegli File -> Project Structure.... Nell'impostazione del progetto selezionare "project SDK" nella versione che richiede il debug e selezionare per tutti i moduli di progetto "project SDK" come modulo SDK. Successivamente è possibile collegare la connessione di debug al dispositivo/emulatore e vedere la corretta fonte Android.

Non è necessario creare un progetto in Intellij Idea.

1

Prova a eseguire il debug della tua app su un dispositivo reale, compilando il livello SDK del dispositivo. I numeri di linea negli stack di chiamata saranno probabilmente "fuori sincrono" per le classi fornite dal dispositivo.

Android Studio non può fornire in modo affidabile le origini corrette per il dispositivo in esecuzione. Anche se prenderebbe in considerazione la versione SDK del dispositivo su cui si sta eseguendo il debug, il firmware del dispositivo potrebbe (e lo sarà anche) essere ancora compilato da diversi file sorgente e solo essere compatibile con l'API.

Penso che sia per questo che Android Studio mostra solo le versioni SDK di compilazione delle classi fornite dal dispositivo di destinazione. Mostra solo l'implementazione di riferimento del compilatore.

5

risposto con soluzione di lavoro qui:

https://stackoverflow.com/a/32236703/1267536

contenuti Full:

Io uso appcompat libreria di supporto un bel po '. La modifica di compileSdkVersion ha come risultato solo massicci errori di compilazione. Se si utilizza appcompat-21, è necessario compilare api 21 o si otterranno errori di compilazione.

Questo funziona perfettamente se si esegue il debug della versione 21. Tuttavia, quando si esegue il debug su Jelly Bean (API 17), il debugger continua a farvi cadere nell'origine API 21. Molto fastidioso e difficile da eseguire il debug.

La soluzione che ho utilizzato è molto hacky ma funziona! Diciamo che si sta cercando di eseguire il debug contro API 17. Effettuare le seguenti operazioni:

  1. mv $ ANDROID_HOME/sorgenti/android-21 $ ANDROID_HOME/sorgenti/android-21-orig
  2. cp $ ANDROID_HOME/fonti/Android -17 $ ANDROID_HOME/sources/android-21
  3. riavviare Android Studio in modo che riprenda i percorsi corretti.
  4. Debug

Basta non dimenticare di mettere tutte le directory indietro dopo il gioco è fatto.

Ecco un rapporto di studio di bug di Android su questo problema: https://code.google.com/p/android/issues/detail?id=183976

+0

Solo per rendere questo" hack "un po 'più facile da usare ho scritto un nodo base js cli app che ti rinomina per te : https://www.npmjs.com/package/android-source-swap – Capricorn

2

Modifica temporanea il nome della cartella di file di origine nel SDK. Ad esempio, hai compilato il livello API 23 ma il dispositivo che stai testando e eseguendo il debug è a livello di API 15. Quindi prima compila ed eseguilo in modalità di debug, imposta un punto di interruzione. Dopo di che cambia i nomi:

$SDK_HOME$/sources/android-23/ -> $SDK_HOME$/sources/android-23-temp/ 
$SDK_HOME$/sources/android-15/ -> $SDK_HOME$/sources/android-23/ 

E quando questo è fatto, allora è un buon momento per colpire il punto di interruzione.

Questa soluzione presuppone che siano state installate entrambe le origini a livello di API dal gestore SDK.

0

Link to issue che tiene traccia di questo problema.

Android Studio 2.2 lo corregge e passa alle origini del livello API che corrisponde al dispositivo su cui si sta effettivamente eseguendo (a condizione che tali sorgenti siano installate). È stato annunciato here.

+0

Questo non funziona su 2.3.3. Forse è stato abbandonato o forse, come un sacco di cervelli di jet lag, semplicemente non funziona. –

Problemi correlati