2012-01-18 10 views
18

Se eseguo un nuovo avvio sul dispositivo emulato, ottiene l'ora corrente corretta dal sistema operativo host; tuttavia, se ricarico il dispositivo da un'istantanea, ottiene l'ora/la data dal momento in cui è stata creata l'istantanea (ad esempio, quando spengo l'emulatore). L'ora/la data non viene risincronizzata dopo un determinato periodo di tempo. L'unico modo per aggirare che ho trovato è quello di aggiornare manualmente l'ora dopo il ripristino da uno snapshot.Il dispositivo Android emulato non risincronizza ora/data dopo il ripristino dell'istantanea

Il dispositivo virtuale Android ha proprietà di default:

  • target = Android 4.0.3 - API di livello 15

  • CPU/ABI = ARM (armeabi-V7A)

  • SD Card = N/A

  • Snapshot = Abilitato

  • densità LCD astratta = 240

  • dimensioni
  • Max VM dimensione heap = 48

  • dispositivo RAM = 512

ho provato l'emulatore su OS X Snow Leopard e Windows 7 , entrambi mostrano lo stesso problema. C'è un modo per far sì che l'emulatore sincronizzi automaticamente il tempo dopo il ripristino da uno snapshot?

+0

Per chi è alla ricerca di una soluzione temporanea e disordinato estremamente veloce. Esci dall'istanza dell'emulatore e riavvialo con l'ora e il fuso orario automatici disattivati. – JosephMCasey

risposta

1

Ho cercato molte volte prima di trovare una soluzione e ho cercato di nuovo quando ho visto la tua domanda ma non sono riuscito a trovare nessun altro che si lamentasse di questo tranne io e te, forse altri non creano app in quel momento è fondamentale o testano su un dispositivo reale.

Conclusione: no non c'è correzione, è necessario impostarlo manualmente o non utilizzare le istantanee.

+1

Sì, eccone uno anche qui. Se si utilizza SSL nella propria app, è necessario avere il momento giusto. Ho degli errori strani a causa di questo ... Dovrei presentare un bug su questo. – Peterdk

30

Ho incontrato lo stesso problema e non sembra esserci un modo standard per farlo. Tuttavia, la data e l'ora di un emulatore possono essere aggiornate utilizzando il comando date della shell ADB, che può essere utilizzato insieme ai comandi standard per la visualizzazione di data e ora sul sistema operativo per aggiornare la data e l'ora dell'emulatore alla data e ora correnti.

Per impostare la data e l'ora della emulatore, è necessario eseguire il seguente comando nel vostro sistema operativo:

adb shell date -s YYYYmmdd.HHMMSS 

dove YYYYMMDD è la data e HHMMSS è il tempo.

Linux/MacOS

Impostazione di data emulatore e il tempo per la data e l'ora corrente è relativamente semplice da una shell in stile UNIX, quindi il seguente comando funziona su Linux e MacOS:

adb shell date -s `date +"%Y%m%d.%H%M%S"` 

di Windows

Su Windows (che sto usando), il modo più semplice per farlo è attraverso Windows PowerShell:

adb shell date -s $(get-date -format yyyyMMdd.HHmmss) 

In Prompt dei comandi, è un po 'più complicato perché non c'è modo di specificare un formato personalizzato per visualizzare la data e l'ora. Il modo migliore che ho trovato per ottenerlo in formato indipendente dalla locale è usando il comando wmic os get LocalDateTime (riga 2). Il formato data-ora può essere analizzato per adattarsi al formato richiesto dalla shell ADB: i simboli :~ possono essere utilizzati per stampare una sottostringa di un contenuto di variabile di ambiente, con il formato %var:~<start-index>,<number-of-chars>%. Abbiamo anche bisogno di ignorare tutto tranne la linea 2, in modo che il comando completo che è necessario eseguire è la seguente:

for /f "skip=1 delims=" %A in ('wmic os get localDateTime') do @for /f "delims=" %B in ("%A") do @cmd /v /c "set wmicdate=%B & adb shell date -s !wmicdate:~0,8!.!wmicdate:~8,6!" 

Per i curiosi: questa prima salva il data-ora nella variabile %wmicdate% e poi passa a ADB analizzandolo appropriatamente. Gli ! vengono utilizzati al posto di % a read the variable on-the-fly. Tutto questo viene eseguito in un processo figlio cmd avviato con l'opzione /v che abilita questa lettura variabile in tempo reale.

+0

Solo un'aggiunta a questa buona risposta: se si utilizza il comando 'cd' in Windows PowerShell per accedere alla posizione' adb', potrebbe essere necessario usare '. \ Adb' invece di' adb' per eseguire comandi. –

+4

Questo è il comando che funziona per me su MacOS: adb -e shell su root data \ 'date +"% m% d% H% M% y "\' – user836003

+0

'adb shell date -s' non funziona in Mac OS. E @ user836003 soution 'adb -e shell su root date' date + "% m% d% H% M% y" '' funziona bene – Ninja

3

Ho aperto un bug report.

Ho lo stesso tipo di problemi e ho scoperto la via difficile perché la mia app che utilizza SSL, continua a dare errori molto strani. Ciò era dovuto a date e orari errati.

Apparentemente non è stato ancora segnalato.

+0

Vorrei chiarire la segnalazione del bug con "RISULTATI ATTESI: Dovrebbe risincronizzare il tempo di caricamento dallo snapshot [solo quando la sua impostazione delle preferenze dice di sincronizzare automaticamente ora/data dalla rete]." –

0

Ha votato la risposta di Arthon.

Sembra che l'emulatore si allenti alla sincronizzazione quando la macchina host si mette a dormire.

Sono, personalmente, utilizzando il seguente programma per questo.

public class AdbShellDateNow { 

    public static void main(final String[] args) 
     throws java.io.IOException, InterruptedException { 

     final long now = System.currentTimeMillis()/1000L; 
     final ProcessBuilder builder = 
      new ProcessBuilder("adb", "shell", "date", Long.toString(now)); 
     builder.redirectErrorStream(true); 
     builder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 

     final Process process = builder.start(); 
     process.waitFor(); 
    } 
} 
1

Su un emulatore di Android in esecuzione più recente versione 6 di API 23, il seguente comando PowerShell ha lavorato per me.

Windows PowerShell

adb shell date $(get-date -format MMddHHmmyyyy.ss)

Su emulatore di Android versione 7 API 24:

adb shell su root date $(get-date -format MMddHHmmyyyy.ss)

+1

L'ho usato e ho creato uno "strumento esterno" in Android Studio, così ho potuto eseguirlo. I miei token OAuth sono sensibili al fattore tempo e stavo ottenendo ore in cui 12 ore o più. Grazie. – DoctorD

Problemi correlati