Si vous souhaitez corriger l'horloge Android à partir de la commande adb, vous pouvez la corriger en l'enracinant et en tapant la commande suivante à partir du shell.
$ adb shell "su -c 'date `date +%s`'"
Cependant, avec cette méthode, vous ne pouvez spécifier qu'en secondes, donc dans le pire des cas, une erreur de 1 seconde se produira. Il n'y a pas de problème en utilisation normale, mais cette méthode ne peut pas être utilisée, par exemple, lorsque l'écart en secondes devient fatal lors de l'analyse de la sortie du journal. Il existe également une méthode d'utilisation de l'application NTP, mais comme je n'ai trouvé que l'application qui nécessite une opération d'écran, j'ai créé un script en utilisant Python pour l'automatiser et je l'ai corrigé.
Très simplement, la commande adb est exécutée à XX heures, minutes et secondes.000000.
Il semble que cela puisse être fait avec un script shell, mais c'était gênant (je ne sais pas), donc je l'ai implémenté en Python. Puisqu'il est écrit en 2 séries, veuillez le changer en 3 séries selon le cas.
import sys
import subprocess
import time
from contextlib import closing
m = 8
def loop():
while True:
t = time.time()
it = int(t*10**m)
if it == int(t)*10**m:
subprocess.call("adb shell \"su -c 'date %d'\"" % int(t), shell=True)
break
if __name__=='__main__':
loop()
print "Done"
Appelez la méthode loop () et entrez une boucle infinie jusqu'à ce que vous puissiez régler l'heure. L'heure est acquise par time.time (), mais comme la valeur obtenue est float, la valeur après la virgule décimale est également incluse. Comparez la valeur arrondie après arrondi au nombre de chiffres spécifié par m: int (t × 10 $ ^ m $) et la valeur arrondie vers le haut et arrondie vers le haut: int (t) × 10 $ ^ m $, et si elles sont identiques, exécutez la commande. Sinon, répétez à nouveau l'acquisition du temps. Dans mon environnement, j'ai pu régler l'heure sans aucun problème même si je spécifiais jusqu'à 8 chiffres, mais il peut être préférable de changer cette zone en fonction de l'environnement.
Je pensais que c'était écrit, mais la méthode qui donne m à l'argument et précise la précision est plus belle. Après cela, il peut être plus gentil de pouvoir faire une pause. Je vais le mettre en œuvre si j'ai le temps.
En fait, il y a un délai entre l'exécution de la commande adb et sa réflexion, donc une erreur d'environ 10 ms se produira avec une marge plutôt qu'une précision de 8 chiffres. Par conséquent, mesurez le délai (je publierai un article sur la méthode plus tard), décalez-le à l'avance et exécutez la commande. En particulier
padding = 0.07
...
t = time.time() + padding
Le temps est décalé sous la forme de. Dans mon environnement, l'écart était d'environ 0,07 = 70 msec, et il n'est pas très stable, je dois donc tolérer l'écart d'environ 100 ms avec cette méthode.
Recommended Posts