仿真的Android设备在恢复快照后不会重新同步时间/date

如果我在模拟设备上重新启动,它会从主机操作系统获得正确的当前时间; 但是,如果我从快照中重新加载设备,它将从创build快照时获取时间/date(例如,当我closures模拟器时)。 时间/date在任何时间之后不会重新同步。 我发现的唯一方法是从快照恢复后手动更新时间。

Android虚拟设备具有默认属性:

  • 目标= Android 4.0.3 – API级别15

  • CPU / ABI = ARM(armeabi-v7a)

  • SD卡= N / A

  • 快照=启用

  • 摘要LCD密度= 240

  • 最大VM应用程序堆大小= 48

  • 设备内存大小= 512

我试过OS X雪豹和Windows 7上的模拟器,都显示相同的问题。 有什么办法让模拟器从快照恢复后自动同步时间?

Solutions Collecting From Web of "仿真的Android设备在恢复快照后不会重新同步时间/date"

我一直在遇到同样的问题,似乎没有这样做的标准方法。 但是,可以使用ADB shell的date命令更新仿真器的date和时间,可以将它与标准命令结合使用,以便在OS上显示date和时间,以便将仿真器date和时间更新为当前date和时间。

要设置模拟器的date和时间,您需要在您的操作系统中执行以下命令:

 adb shell date -s YYYYmmdd.HHMMSS 

其中YYYYmmdd是date,HHMMSS是时间。

Linux / MacOS

将仿真器date和时间设置为当前的date和时间,从UNIX风格的shell中相对比较简单,因此以下命令可以在Linux和MacOS上运行:

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

视窗

在Windows上(我正在使用),最简单的方法是通过Windows PowerShell:

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

在命令提示符下,它有点棘手,因为没有办法指定自定义格式来显示date和时间。 我发现以独立于区域的格式获取它的最好方法是使用命令wmic os get LocalDateTime (第2行)。 它的date时间格式可以被parsing以适应ADB shell所需的格式:符号:~可以用来打印环境variables内容的子string,格式为%var:~<start-index>,<number-of-chars>% 。 我们还需要忽略除第2行以外的所有内容,所以需要运行的完整命令如下所示:

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

为了好奇:首先将date时间保存到%wmicdate%variables中,然后通过适当parsing将其传递到ADB。 那! 被用来代替%来即时读取variables 。 这一切都是在使用/v选项启动的cmdsubprocess中完成的,该选项启用了这个dynamicvariables读取。

我打开了一个错误报告 。

我有同样的问题,并发现困难的方式,因为我的应用程序使用SSL,不断给出非常奇怪的错误。 这是由于错误的date和时间。

显然这还没有报道。

我已经search了很多次之前的解决scheme,我再次search时,当我看到你的问题,但我找不到别人甚至抱怨,除了你和我,也许别人不创build应用程序,时间是关键或他们在真实设备上testing。

结论:没有修复,你必须手动设置或不使用快照。

在运行版本6 API 23的更新的Android仿真器上,以下的powershell命令为我工作。

Windows Powershell

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

在Android模拟器版本7 API 24上

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

投票Arthon的答案。

当主机进入hibernate状态时,似乎仿真器会松动同步。

我亲自为此使用了以下程序。

 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(); } }