2012-01-18 12 views
18

Si realizo un reinicio reciente en el dispositivo emulado, obtiene la hora actual correcta del sistema operativo host; sin embargo, si vuelvo a cargar el dispositivo desde una instantánea, obtiene la fecha y hora desde el momento en que se creó la instantánea (por ejemplo, cuando apago el emulador). La hora/fecha no se vuelve a sincronizar después de cualquier cantidad de tiempo. La única forma de solucionarlo que he encontrado es actualizar manualmente la hora después de restaurar desde una instantánea.El dispositivo Android emulado no vuelve a sincronizar la hora/fecha después de restaurar la instantánea

el dispositivo virtual Android tiene propiedades predeterminadas:

  • Target = androide 4.0.3 - API Level 15

  • CPU/ABI = ARM (armeabi-v7a)

  • SD Tarjeta = N/A

  • Instantánea = Habilitado

  • Abstract densidad LCD = 240

  • tamaño
  • Max VM tamaño de la aplicación montón = 48

  • RAM Device = 512

he probado el emulador en OS X Snow Leopard y Windows 7 , ambos muestran el mismo problema. ¿Hay alguna manera de hacer que el emulador sincronice automáticamente el tiempo después de restaurar desde la instantánea?

+0

Para cualquiera que esté buscando una solución temporal y desordenado extremadamente rápida. Salga de su instancia de emulador y comience nuevamente con la zona horaria y la hora automáticas desactivadas. – JosephMCasey

Respuesta

1

He buscado muchas veces antes una solución a esto y busqué nuevamente cuando vi tu pregunta, pero no pude encontrar a nadie más quejándose de esto excepto tú y yo, tal vez otros no crean aplicaciones ese momento es crítico o lo prueban en un dispositivo real.

Conclusión: no, no hay solución, tiene que configurarlo manualmente o no usar instantáneas.

+1

Sí, aquí hay uno también. Si usa SSL en su aplicación, necesita tener el momento adecuado. Tengo errores extraños debido a eso ... Debería presentar un error en esto. – Peterdk

30

He estado corriendo en el mismo problema, y ​​no parece haber una manera estándar de hacer esto. Sin embargo, la fecha y hora de un emulador pueden actualizarse utilizando el comando date del shell ADB, que se puede usar junto con comandos estándar para mostrar la fecha y hora en su sistema operativo para actualizar la fecha y hora del emulador a la fecha y hora actual.

Para establecer una fecha y hora del emulador, es necesario ejecutar el siguiente comando en su sistema operativo:

adb shell date -s YYYYmmdd.HHMMSS 

donde AAAAMMDD es la fecha y HHMMSS es el momento.

Linux/MacOS

Ajuste de la fecha emulador y el tiempo para la fecha y la hora actual es relativamente sencillo desde un shell de tipo UNIX, por lo que el siguiente comando funcionará en Linux y MacOS:

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

de Windows

en Windows (que estoy usando), la forma más fácil de hacerlo es a través de Windows PowerShell:

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

En el símbolo del sistema, es un poco más difícil porque no hay forma de especificar un formato personalizado para mostrar la fecha y la hora. La mejor forma que encontré para obtenerlo en formato independiente de locale es usando el comando wmic os get LocalDateTime (línea 2). Su formato de fecha y hora se puede analizar para adaptarlo al formato que necesita el shell ADB: los símbolos :~ se pueden utilizar para imprimir una subcadena de un contenido de variable de entorno, con el formato %var:~<start-index>,<number-of-chars>%. También tenemos que ignorar todo excepto la línea 2, por lo que el dominio total que necesita para funcionar es la siguiente:

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!" 

Para los curiosos: esta primera guarda la fecha y hora en la variable %wmicdate% y luego lo pasa a ADB analizándolo apropiadamente. Se utilizan ! en lugar de % a read the variable on-the-fly. Todo esto se hace en un proceso cmd hijo iniciado con la opción /v que habilita esta lectura de variables sobre la marcha.

+0

Simplemente una adición a esta buena respuesta: si utiliza el comando 'cd' dentro de Windows PowerShell para llegar a la ubicación' adb', puede necesitar usar '. \ Adb' en lugar de' adb' para ejecutar comandos. –

+4

Este es el comando que funciona para mí en MacOS: adb -e shell su fecha de inicio \ 'fecha +"% m% d% H% M% y "\' – user836003

+0

'adb shell date -s' no funciona en Mac OS. Y @ user836003 soution 'adb -e shell su fecha de la raíz' date + "% m% d% H% M% y" 'funciona bien – Ninja

3

Abrí un bug report.

Tengo el mismo tipo de problemas, y me enteré de la manera más difícil porque mi aplicación que usa SSL no dejaba de dar errores muy extraños. Esto fue debido a una fecha y hora equivocadas.

Aparentemente, aún no se ha informado.

+0

Quisiera aclarar el informe de errores con "RESULTADOS ESPERADOS: debe resincronizar el tiempo de carga desde la instantánea [solo cuando su configuración de preferencias indica que sincroniza automáticamente la fecha/hora de la red]". –

0

Respondió la respuesta de Arthon.

Parece que el emulador se suelta para sincronizarse cuando la máquina host se queda dormida.

Estoy, personalmente, utilizando el siguiente programa para esto.

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

En un emulador de Android más reciente corriendo versión 6 API 23, el siguiente comando de PowerShell trabajó para mí.

Windows PowerShell

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

El emulador de Android versión 7 API 24:

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

+1

Lo usé e hice una "Herramienta externa" en Android Studio para poder ejecutarlo. Mis tokens de OAuth son sensibles al tiempo y me dieron tiempos en los que estaban 12 horas o más libres. Gracias. – DoctorD

Cuestiones relacionadas