एंड्रॉइड फ्रेमवर्क समय सिंक्रनाइज़ेशन के लिए विभिन्न समय स्रोतों का उपयोग करता है। यह पृष्ठ नेटवर्क टाइम प्रोटोकॉल (एनटीपी) और नेटवर्क आइडेंटिटी एंड टाइम ज़ोन (एनआईटीजेड) स्वचालित समय स्रोतों पर केंद्रित है। एंड्रॉइड 12 या उच्चतर में डिफ़ॉल्ट रूप से, फ्रेमवर्क एनआईटीजेड की तुलना में एनटीपी को समय स्रोत के रूप में प्राथमिकता देता है क्योंकि एनटीपी एनआईटीजेड की तुलना में अधिक सटीक और विश्वसनीय है। ऐसी स्थितियों में जहां एनटीपी उपलब्ध नहीं है, ढांचा एनआईटीजेड पर निर्भर करता है। यह प्लेटफ़ॉर्म के पुराने संस्करणों की डिफ़ॉल्ट प्राथमिकता का उलट है। एंड्रॉइड 11 और उससे पहले के संस्करण में डिफ़ॉल्ट रूप से, फ्रेमवर्क एनटीपी पर एनआईटीजेड को प्राथमिकता देता है।
इस परिवर्तन पर अधिक विवरण के लिए, निम्नलिखित AOSP पैच देखें: 1563678 , 1513323 ।
समय स्रोत प्राथमिकता कॉन्फ़िगर करना
यह कॉन्फ़िगर करने के लिए कि किसी विशिष्ट एंड्रॉइड संस्करण के लिए कौन सा समय स्रोत डिफ़ॉल्ट रूप से प्राथमिकता लेता है, बिल्ड समय पर frameworks/base/core/res/res/values/config.xml
में config_autoTimeSourcesPriority
कुंजी को कॉन्फ़िगर करें। सूची में ऊपर वाले समय स्रोत से समय सुझावों को सूची में नीचे वाले स्रोतों पर प्राथमिकता दी जाती है।
एंड्रॉइड समय स्रोत जिन्हें कॉन्फ़िगर किया जा सकता है, TimeDetectorStrategy.java
में पाए जाते हैं। निम्नलिखित स्रोत डिफ़ॉल्ट रूप से उपयोग के लिए कॉन्फ़िगर किए गए हैं:
- टेलीफोनी (एनआईटीजेड)
- नेटवर्क (एनटीपी)
परिक्षण
यह सत्यापित करने के लिए कि जब एनटीपी उपलब्ध नहीं है (जब मोबाइल डेटा और वाई-फाई अक्षम है) तो डिवाइस एनआईटीजेड का उपयोग करता है, निम्न कार्य करें:
- सुनिश्चित करें कि DUT में एक कार्यशील सिम है
- मोबाइल डेटा और वाई-फ़ाई बंद करें
- यह सुनिश्चित करने के लिए कि सेल रेडियो बंद है, डिवाइस को हवाई जहाज मोड में रखें
- स्वचालित समय पहचान बंद करें
- भविष्य में घड़ी को मैन्युअल रूप से गलत समय मान पर सेट करें
- डिवाइस को रीबूट करें
- स्वचालित समय पहचान चालू करें
- डिवाइस को हवाई जहाज़ मोड से बाहर निकालें
एनआईटीजेड सिग्नल प्राप्त होते ही ये चरण सिस्टम घड़ी में बदलाव को ट्रिगर करते हैं। यह जांचने के लिए कि डिवाइस का समय कैसे सेट किया गया है, निम्न कमांड चलाएँ:
adb shell dumpsys time_detector
यह सत्यापित करने के लिए कि सिस्टम क्लॉक NITZ का उपयोग करता है, कमांड आउटपुट में निम्नलिखित की पुष्टि करें:
-
mEnvironment.isAutoTimeDetectionEnabled()
true
है। -
mEnvironment.autoOriginPriorities()
में समय स्रोतों की एक सूची होती है, जिसमें सूची में ऊपर के स्रोतों को सूची में नीचे के स्रोतों पर प्राथमिकता दी जाती है। -
Time change log
अनुभाग दिखाता है कि सिस्टम घड़ी टेलीफोनी सुझाव का उपयोग करके सेट की गई है। -
Telephony suggestion history
अनुभाग में समय संबंधी सुझाव शामिल हैं। -
Network suggestion history
अनुभाग खाली है.
Telephony suggestion history
और Network suggestion history
अनुभागों में समय के सुझावों को समय के लिए सत्य का स्रोत माना जाता है। यदि डिवाइस इंटरनेट से जुड़ा है और उसमें सिम कार्ड है, तो सुझाव एनटीपी (नेटवर्क) और एनआईटीजेड (टेलीफोनी) दोनों का उपयोग करके उत्पन्न होते हैं। इस परीक्षण मामले में, केवल Telephony suggestion history
अनुभाग में सुझाव शामिल हैं क्योंकि NTP अक्षम है।
Time change log
अनुभाग डिवाइस की सिस्टम घड़ी में किए गए परिवर्तनों और उपयोग किए गए सुझाव को रिकॉर्ड करता है। सिस्टम घड़ी config_autoTimeSourcesPriority
कुंजी में प्राथमिकता सूची में समय स्रोतों के क्रम के आधार पर सेट की जाती है। हालाँकि, यदि सुझाव बहुत पुराना या अमान्य है तो उच्च प्राथमिकता वाले स्रोत के सुझावों को अनदेखा किया जा सकता है। साथ ही, यदि सर्वोच्च प्राथमिकता वाला वैध सुझाव कुछ सेकंड के भीतर डिवाइस के वर्तमान सिस्टम क्लॉक समय से मेल खाता है तो समय नहीं बदला जाएगा। इस परीक्षण मामले में, जब तक सुझाव पुराने नहीं हो जाते, सिस्टम घड़ी Telephony suggestion history
में से किसी एक सुझाव का उपयोग करके सेट की जाती है।
निम्नलिखित आउटपुट का एक उदाहरण है जहां एनटीपी अनुपलब्ध होने पर डिवाइस एनआईटीजेड का उपयोग करने पर वापस आ जाता है।
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}
परीक्षण परिदृश्य में आउटपुट की तुलना के संदर्भ के लिए, निम्नलिखित एक विशिष्ट आउटपुट का उदाहरण है जहां डिवाइस को एनटीपी और एनआईटीजेड दोनों समय स्रोतों से समय सुझाव प्राप्त होते हैं।
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}