Set the NTP server of your android device

Just use this command to set a server address to automatically sync your device time. ( ͡° ͜ʖ ͡°)✧

1
$ adb shell settings put global ntp_server <new-ntp-server>

Background

I have a Raspberry Pi 3 with Android Things installed on it. But the time is never synchronized…

After googling it, I found this piece of code in NtpTrustedTime.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class NtpTrustedTime implements TrustedTime {
...
public static synchronized NtpTrustedTime getInstance(Context context) {
if (sSingleton == null) {
final Resources res = context.getResources();
final ContentResolver resolver = context.getContentResolver();
final String defaultServer = res.getString(
com.android.internal.R.string.config_ntpServer);
final long defaultTimeout = res.getInteger(
com.android.internal.R.integer.config_ntpTimeout);
final String secureServer = Settings.Global.getString(
resolver, Settings.Global.NTP_SERVER);
final long timeout = Settings.Global.getLong(
resolver, Settings.Global.NTP_TIMEOUT, defaultTimeout);
final String server = secureServer != null ? secureServer : defaultServer;
sSingleton = new NtpTrustedTime(server, timeout);
sContext = context;
}
return sSingleton;
}
}

It shows that android tring to get NTP server from:

  1. Settings.Global.NTP_SERVER first

  2. Then com.android.internal.R.string.config_ntpServer

And the NTP server of my Android Things is time.android.com, that’s why it dose not work (I’m in China…).


Fortunately, it is easy to set settings via adb:

1
2
3
4
5
$ adb shell settings put global ntp_server asia.pool.ntp.org

# test
$ adb shell settings get global ntp_server
> asia.pool.ntp.org

:tada: CHEERS