2012-01-18 23 views
18

Nếu tôi làm một khởi động tươi trên thiết bị mô phỏng, nó được thời gian hiện đúng từ hệ điều hành sở tại; Tuy nhiên, nếu tôi lại thiết bị từ một bản chụp, nó được lần/ngày từ thời điểm này ảnh chụp được tạo ra (ví dụ Khi tôi tắt giả lập). Thời gian/ngày không đồng bộ hóa lại sau bất kỳ khoảng thời gian nào. Cách duy nhất xung quanh nó mà tôi đã tìm thấy là cập nhật thủ công thời gian sau khi khôi phục từ ảnh chụp nhanh.thiết bị mô phỏng Android không tái đồng bộ hóa thời gian/ngày sau khi khôi phục ảnh chụp

Các thiết bị ảo Android có thuộc tính mặc định:

  • Target = Android 4.0.3 - API Cấp 15

  • CPU/ABI = ARM (armeabi-v7a)

  • SD Thẻ = N/A

  • Ảnh chụp = Đã bật

  • mật độ LCD Tóm tắt = 240

  • kích thước
  • Max VM kích thước ứng dụng đống = 48

  • Device RAM = 512

Tôi đã thử các giả lập trên OS X Snow Leopard và Windows 7 , cả hai đều hiển thị cùng một vấn đề. Có cách nào để giả lập tự động đồng bộ thời gian sau khi khôi phục từ ảnh chụp nhanh không?

+0

Đối với những ai đang tìm kiếm một giải pháp tạm thời và lộn xộn vô cùng nhanh chóng. Thoát khỏi trình mô phỏng giả lập của bạn và bắt đầu sao lưu với thời gian và múi giờ tự động tắt. – JosephMCasey

Trả lời

1

tôi đã lục soát nhiều lần trước khi cho một giải pháp này và tôi đã tìm kiếm một lần nữa khi tôi thấy câu hỏi của bạn, nhưng tôi không thể tìm thấy bất cứ ai khác thậm chí phàn nàn về vấn đề này ngoại trừ bạn và tôi, có lẽ người khác không tạo ra các ứng dụng thời gian là rất quan trọng hoặc họ thử nghiệm trên một thiết bị thực.

Kết luận: không có không được khắc phục, bạn phải thiết lập nó bằng tay hoặc không sử dụng ảnh chụp nhanh.

+1

Vâng, đây cũng là một. Nếu bạn sử dụng SSL trong ứng dụng của mình, nó cần phải có thời gian phù hợp. Tôi có lỗi lạ do nó ... Nên nộp một lỗi về điều này. – Peterdk

30

Tôi đã được chạy vào cùng một vấn đề, và có vẻ như không phải là một cách tiêu chuẩn để làm điều này. Tuy nhiên, ngày và thời gian của một giả lập có thể được cập nhật bằng cách sử dụng lệnh date của vỏ ADB, có thể được sử dụng kết hợp với các lệnh chuẩn để hiển thị ngày tháng và thời gian trên hệ điều hành của bạn để cập nhật ngày emulator và thời gian để ngày và thời gian hiện tại.

Để thiết lập một ngày và thời gian của giả lập, bạn cần phải thực hiện lệnh sau trong hệ điều hành của bạn:

adb shell date -s YYYYmmdd.HHMMSS 

nơi yyyymmdd là ngày và HHMMSS là thời gian.

Linux/MacOS

Thiết ngày emulator và thời gian để ngày và thời gian hiện tại là tương đối đơn giản từ một vỏ UNIX-phong cách, vì vậy lệnh sau đây sẽ làm việc trên Linux và MacOS:

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

của Windows

Trên Windows (mà tôi đang sử dụng), cách dễ nhất để làm điều đó là thông qua Windows PowerShell:

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

Trong Command Prompt, nó phức tạp hơn một chút vì không có cách nào để xác định một định dạng tùy chỉnh để hiển thị ngày giờ. Cách tốt nhất tôi tìm thấy để có được nó trong định dạng độc lập địa phương là bằng cách sử dụng lệnh wmic os get LocalDateTime (dòng 2). Định dạng ngày giờ có thể được phân tích cú pháp để thích ứng với định dạng cần thiết của trình bao ADB: các ký hiệu :~ có thể được sử dụng để in chuỗi con của nội dung biến môi trường, với định dạng %var:~<start-index>,<number-of-chars>%. Chúng tôi cũng cần phải bỏ qua tất cả mọi thứ ngoại trừ dòng 2, vì vậy toàn bộ lệnh mà bạn cần phải chạy như sau:

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

Đối với người hiếu: đầu tiên này giúp tiết kiệm thời gian vào biến %wmicdate% và sau đó vượt qua nó để ADB bằng cách phân tích cú pháp nó một cách thích hợp. Các ! được sử dụng thay vì % đến read the variable on-the-fly. Tất cả điều này được thực hiện trong quy trình cmd cho trẻ em được khởi chạy với tùy chọn /v cho phép đọc biến số trực tiếp này.

+0

Chỉ cần thêm vào câu trả lời hay này: nếu bạn sử dụng lệnh 'cd' bên trong Windows PowerShell để đến vị trí' adb', bạn có thể cần sử dụng '. \ Adb' thay vì' adb' để thực hiện các lệnh. –

+4

Đây là lệnh hoạt động đối với tôi trên MacOS: adb -e shell su root date \ 'date +"% m% d% H% M% y "\' – user836003

+0

'adb shell date -s' không hoạt động Hệ điều hành Mac. Và @ user836003 soution 'adb -e shell su root ngày' date + "% m% d% H% M% y" '' hoạt động tốt – Ninja

3

Tôi đã mở một bug report.

Tôi có cùng một loại vấn đề và phát hiện ra một cách khó khăn vì ứng dụng của tôi sử dụng SSL, tiếp tục đưa ra các lỗi rất lạ. Điều này là do ngày và giờ sai.

Dường như chưa được báo cáo.

+0

Tôi sẽ làm rõ báo cáo lỗi của bạn với "KẾT QUẢ DỰ KIẾN: Nó nên đồng bộ hóa thời gian tải từ ảnh chụp [chỉ khi cài đặt tùy chọn cho phép tự động đồng bộ hóa thời gian/ngày từ mạng]." –

0

Đã bỏ phiếu cho câu trả lời của Arthon.

Dường như trình giả lập bị mất đồng bộ khi máy chủ lưu trữ.

Cá nhân tôi, sử dụng chương trình sau cho việc này.

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

Trên một giả lập Android mới hơn chạy phiên bản 6 API 23, lệnh PowerShell sau làm việc cho tôi.

Windows Powershell

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

Mở giả lập Android phiên bản 7 API 24:

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

+1

Tôi đã sử dụng công cụ này và tạo "Công cụ bên ngoài" trong Android Studio để tôi có thể chạy nó. Mã thông báo OAuth của tôi nhạy cảm về thời gian và tôi đã nhận được khoảng thời gian từ 12 giờ trở lên. Cảm ơn. – DoctorD

Các vấn đề liên quan