Установка даты/времени с использованием оболочки ADB

Я пытаюсь установить дату/время с помощью оболочки ADB, но оболочка возвращает текущее время.

Я пробовал:

adb shell date -s YYYYMMDD.HHmmss

и unix time like:

adb shell date 1318349236

любые идеи?

Ответ 1

Чтобы сохранить пространство для хранения данных Android, как и многие другие встроенные системы, использует многозадачные бинарные файлы для реализации основных инструментов командной строки, таких как date.

Android-устройство может содержать двоичные файлы toolbox или toybox (или обоих) в зависимости от версии. Вы можете проверить, какая реализация инструмента date доступна на вашем устройстве, запустив команды toolbox date и toybox date. Затем вы можете использовать ту, которая печатает текущую дату. Например, для устройства Android 6.0+ это может выглядеть так:

$ adb shell toybox date
Mon Jul 31 21:09:28 CDT 2017

$ adb shell toolbox date
date: no such tool

Чтобы установить дату и время с помощью toolbox date, используйте формат YYYYMMDD.HHmmss:

adb shell "su 0 toolbox date -s 20161231.235959"

В случае toybox date используйте формат MMDDhhmm[[CC]YY][.ss]:

adb shell "su 0 toybox date 123123592016.59"

Ответ 2

Android 6.0 имеет новый формат даты:

Default SET format is "MMDDhhmm[[CC]YY][.ss]", that (2 digits each)
month, day, hour (0-23), and minute. Optionally century, year, and second.

И настройка с помощью -s больше не работает. Это обновленная команда set:

Пример обновленной команды:

(в то время как внутри оболочки adb)

date 060910002016.00                              

приведет к:

Thu Jun  9 10:00:00 GMT 2016

Примечание:. Команда не будет видна сразу на устройстве, потому что она не запускает трансляцию смены времени, но она будет видна в течение минуты.

Чтобы обойти это, вы можете добавить эту трансляцию вручную следующим образом:

date 060910002016.00 ; am broadcast -a android.intent.action.TIME_SET

Чтобы вызвать это с помощью команды adb:

adb shell 'date 060910002016.00 ; am broadcast -a android.intent.action.TIME_SET'

Ответ 3

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

Сначала он получает текущую дату вашего устройства и устанавливает его на цель Android. Этот подход должен работать на Linux/Mac/Cygwin.

Ответ 4

Вы должны поместить значение даты, если хотите его изменить. "-s" изменяет формат SET. Формат по умолчанию: "MMDDhhmm [[CC] YY] [.ss]".

Я успешно протестировал следующие команды:

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

Ответ 5

Чтобы сделать эту работу на моем Xperia S, мне пришлось разбить команды следующим образом:

> adb shell
# su -
# date /* see current date */
# date -s YYYYmmdd

Мотив: мое устройство вернулось к началу Linux-времени, и меня не особенно беспокоило со временем, все, что я хотел, - это установить правильную дату - что, кстати, я не мог сделать с помощью системных настроек, потому что мой пользовательский MIUI ROM продолжал сбой...

Ответ 6

На некоторых устройствах, таких как RTAndroid, возможно, он тоже работает:

adb shell "su 0 date `date +%m%d%H%M%Y.%S`"

Ответ 7

Развернув ответ на @uval, вы можете использовать следующее для обновления даты и времени на устройстве Android в зависимости от времени на вашем компьютере под управлением Windows:

set dateYYYY=%date:~10,4%
set dateMM=%date:~4,2%
set dateDD=%date:~7,2%
set timeHH=%time:~0,2%
set timeMM=%time:~3,2%
set timeSS=%time:~6,2%

adb shell su -c date %dateMM%%dateDD%%timeHH%%timeMM%%dateYYYY%.%timeSS%
adb shell su -c am broadcast -a android.intent.action.TIME_SET

Протестировано на корневом устройстве Android 6.0 и ПК под управлением Windows 10.

Ответ 8

Правильный формат, который работал у меня, - yyyyMMddHHmm.ss

Ответ 9

У меня не было проблем с Android 5, большинство ответов, которые я нашел без su в команде, работает.

Android 6 - тот, который привлек мое внимание. На Android 6 это не дало мне ошибки, оно просто не установило его правильно, оно вернет его к тому, что было до команды. Я также столкнулся с /system/bin/sh: su: not found errors, когда попробовал это fooobar.com/info/490932/... и это fooobar.com/info/490932/...

После всех сеансов проб и ошибок я понял это.

Это формат даты, который я использую MMDDhhmm [[CC] YY] [. Ss]

adb shell date '0739010002017.00'

Изначально эта команда не работала, чтобы работать по порядку, она не работала сама по себе.

Я использовал эти 3 шага, и это работает для меня.

Во-первых, adb shell settings put global auto_time 1

(Включите автоматическую дату и время)

Во-вторых, adb shell date '0739010002017.00'

(установите желаемое время)

В-третьих, adb shell settings put global auto_time 0

(Отключите автоматическую дату и время)

Отметил: для моего конкретного проекта я не могу положиться на Время в сети и GPS. Вот почему у меня третий команда. которые отключают функцию.