Das Android-Framework nutzt verschiedene Zeitquellen für die Zeitsynchronisierung. Auf dieser Seite geht es um das Network Time Protocol (NTP) und Automatische NITZ-Zeitquellen (Network Identity and Time Zone). In Android 12 und höher ist das Framework priorisiert NTP als Zeitquelle gegenüber NITZ, da NTP genauer und zuverlässiger als das NITZ. In Situationen, in denen NTP nicht verfügbar ist, greift das Framework auf NITZ zurück. Dies ist eine Umkehrung der Standardpriorität früherer Versionen des Plattform. In Android 11 und niedriger priorisiert das Framework standardmäßig NITZ. über NTP an.
Weitere Details zu dieser Änderung finden Sie in den folgenden AOSP-Patches: 1563678 1513323.
Priorität der Zeitquelle konfigurieren
Um zu konfigurieren, welche Zeitquelle standardmäßig für ein bestimmtes Android-Gerät Priorität hat
Version, konfigurieren Sie die
config_autoTimeSourcesPriority
Schlüssel in frameworks/base/core/res/res/values/config.xml
bei der Build-Erstellung. Uhrzeit
Vorschläge aus der Zeitquelle, die weiter oben in der Liste steht, haben Vorrang
die weiter unten in der Liste stehen.
Die Android-Zeitquellen, die konfiguriert werden können, finden Sie in
TimeDetectorStrategy.java
Die folgenden Quellen sind standardmäßig zur Verwendung konfiguriert:
- Telefonie (NITZ)
- Netzwerk (NTP)
Testen
Überprüfung, ob das Gerät NITZ verwendet, wenn NTP nicht verfügbar ist Gehen Sie so vor, wenn mobile Daten und WLAN deaktiviert sind:
- Prüfen, ob sich eine funktionierende SIM im DUT befindet
- Mobile Daten und WLAN deaktivieren
- Versetzen Sie das Gerät in den Flugmodus, um die Mobilfunkverbindung auszuschalten.
- Automatische Zeiterkennung deaktivieren
- Stelle die Uhr manuell auf einen falschen Zeitwert in der Zukunft ein
- Gerät neu starten
- Automatische Zeiterkennung aktivieren
- Flugmodus deaktivieren
Diese Schritte lösen eine Änderung der Systemuhr aus, sobald eine NITZ-Datei Signal empfangen wird. Führen Sie folgenden Befehl aus, um zu prüfen, wie die Uhrzeit auf dem Gerät eingestellt ist Befehl:
adb shell dumpsys time_detector
Um zu überprüfen, ob die Systemuhr NITZ verwendet, bestätigen Sie Folgendes im Befehl Ausgabe:
mEnvironment.isAutoTimeDetectionEnabled()
isttrue
.mEnvironment.autoOriginPriorities()
enthält eine Liste mit Zeitquellen. wobei Quellen, die weiter oben auf der Liste stehen, Vorrang vor Quellen weiter unten auf der Liste.- Der Abschnitt
Time change log
zeigt, dass die Systemuhr mithilfe eines Telefonievorschlag. - Der Abschnitt
Telephony suggestion history
enthält Zeitvorschläge. - Der Abschnitt
Network suggestion history
ist leer.
Die Zeitvorschläge in Telephony suggestion history
und
Network suggestion history
Abschnitt gilt als Informationsquelle für
. Wenn das Gerät mit dem Internet verbunden ist und eine SIM-Karte verwendet wird,
werden mit NTP (Netzwerk) und NITZ (Telefonie) generiert. In diesem Testfall
nur der Abschnitt Telephony suggestion history
enthält Vorschläge,
NTP ist deaktiviert.
Im Abschnitt Time change log
werden die Änderungen erfasst, die an der
Systemuhr und dem verwendeten Vorschlag. Die Systemuhr wird basierend auf dem
in der Reihenfolge der
Zeitquellen in der Prioritätenliste
den config_autoTimeSourcesPriority
-Schlüssel. Vorschläge von einem
Quelle mit höherer Priorität wird möglicherweise ignoriert, wenn der Vorschlag zu alt oder ungültig ist.
Wenn der gültige Vorschlag mit der höchsten Priorität mit dem aktuellen
Die Systemuhrzeit auf wenige Sekunden ändert sich nicht.
Sofern die Vorschläge nicht veraltet sind, wird in diesem Testfall die Systemuhr
wird mit einem der Vorschläge aus Telephony suggestion history
festgelegt.
Das folgende Beispiel zeigt eine Ausgabe, bei der das Gerät auf die Verwendung von NITZ, wenn NTP nicht verfügbar ist.
TimeDetectorStrategy:
mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
mEnvironment.isAutoTimeDetectionEnabled()=true
mEnvironment.elapsedRealtimeMillis()=73059
mEnvironment.systemClockMillis()=1614186767818
mEnvironment.systemClockUpdateThresholdMillis()=2000
mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
mEnvironment.autoOriginPriorities()=[network,telephony]
Time change log:
66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
Telephony suggestion history:
key idx: 0=0
val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
Historic values=[
0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
]
Network suggestion history:
{Empty}
Gnss suggestion history:
{Empty}
External suggestion history:
{Empty}
Zum Vergleich mit der Ausgabe im Testszenario enthält der Parameter Hier ist ein Beispiel für eine typische Ausgabe, bei der das Gerät erhält Zeitvorschläge von NTP- und NITZ-Zeitquellen.
TimeDetectorStrategy:
mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
mEnvironment.isAutoTimeDetectionEnabled()=true
mEnvironment.elapsedRealtimeMillis()=302926
mEnvironment.systemClockMillis()=1614186997685
mEnvironment.systemClockUpdateThresholdMillis()=2000
mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
mEnvironment.autoOriginPriorities()=[network,telephony]
Time change log:
66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
Telephony suggestion history:
key idx: 0=0
val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
Historic values=[
0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
]
Network suggestion history:
0@PT4M4.04S: NetworkTimeSuggestion{mUtcTime=TimestampedValue{mReferenceTimeMillis=244038, mValue=1614186939242}, mDebugInfo=[Origin: NetworkTimeUpdateService. event=3]}
Gnss suggestion history:
{Empty}
External suggestion history:
{Empty}