Android 10 में, car_audio_configuration.xml
ने car_volumes_groups.xml
और IAudioControl.getBusForContext
की जगह ले ली है. ऑडियो नीति वाली फ़ाइलें, आम तौर पर वेंडर पार्टीशन में मौजूद होती हैं. ये बोर्ड के ऑडियो हार्डवेयर कॉन्फ़िगरेशन को दिखाती हैं. car_audio_configuration.xml
में रेफ़र किए गए सभी डिवाइस, audio_policy_configuration.xml
में तय किए जाने चाहिए.
पहली इमेज में, कार ऑडियो सेवा के आर्किटेक्चर के बारे में खास जानकारी दी गई है. इसमें बताया गया है कि कार ऑडियो सेवा, कार ऑडियो कॉन्फ़िगरेशन फ़ाइल को पढ़कर डिवाइस के लिए ऑडियो सेट अप करती है.
पहली इमेज. कार के ऑडियो सिस्टम के आर्किटेक्चर की खास जानकारी.
कार के ऑडियो कॉन्फ़िगरेशन की फ़ाइल को डिवाइस पर vendor/etc/
या system/etc/
में रखें. कार की ऑडियो सेवा, फ़ाइल को सबसे पहले vendor/etc/
में खोजेगी. कार में मौजूद ऑडियो सेवाएं, ऑडियो कॉन्फ़िगरेशन का पता लगाने के लिए car_audio_configuration.xml
को पढ़ती हैं.
कार के ऑडियो ज़ोन:
- हर ऑडियो ज़ोन में एक यूनीक ऑडियो ज़ोन आईडी होता है.
- हर ऑडियो ज़ोन को, किसी व्यक्ति के हिसाब से तय किए गए ज़ोन से मैप किया जा सकता है.
हर ज़ोन में ऑडियो से जुड़ी कार्रवाइयां एक-दूसरे से अलग होती हैं:
- ऑडियो फ़ोकस
- ऑडियो रूटिंग
- ऑडियो डकिंग
कार के वॉल्यूम ग्रुप:
जिन ऑडियो डिवाइसों में वॉल्यूम ग्रुप होता है उन्हें एक साथ कंट्रोल किया जाता है. साथ ही, उनके वॉल्यूम में एक जैसा बदलाव होता है. किसी ग्रुप में मौजूद सभी डिवाइसों के लिए, ऑडियो गेन कॉन्फ़िगरेशन एक जैसा होना चाहिए.
ऑडियो कॉन्टेक्स्ट को ऑडियो डिवाइसों से मैप करना. इसका इस्तेमाल करके, ऑडियो मिक्स बनाया जाता है. इससे ऑडियो के इस्तेमाल को आउटपुट डिवाइस पर मैप किया जाता है.
सभी ऑडियो कॉन्टेक्स्ट को एक ज़ोन में दिखाया जाना चाहिए. इससे सभी ऑडियो एट्रिब्यूट के इस्तेमाल के लिए, ऑडियो राउटिंग को सही तरीके से सेट अप किया जा सकता है.
ऑडियो कॉन्टेक्स्ट
AAOS ऑडियो के कॉन्फ़िगरेशन को आसान बनाने के लिए, एक जैसे इस्तेमाल के मामलों को CarAudioContexts
में ग्रुप किया गया है. इन ऑडियो कॉन्टेक्स्ट का इस्तेमाल, CarAudioService
में कई कामों के लिए किया जाता है. जैसे, ऑडियो को किसी दूसरे डिवाइस पर भेजना, वॉल्यूम ग्रुप तय करना, ऑडियो फ़ोकस करना, और डकिंग को मैनेज करना. AAOS में मौजूद स्टैटिक ऑडियो कॉन्टेक्स्ट की सूची इस टेबल में दी गई है.
इस टेबल में, ऑडियो कॉन्टेक्स्ट और उनके इस्तेमाल के बीच मैपिंग के बारे में बताया गया है. हाइलाइट की गई पंक्तियां, सिस्टम के नए इस्तेमाल के लिए दी गई हैं.
CarAudioContext | Associated AttributeUsages |
---|---|
MUSIC |
UNKNOWN GAME MEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND |
ASSISTANCE_SONIFICATION |
EMERGENCY |
EMERGENCY |
SAFETY |
SAFETY |
VEHICLE_STATUS |
VEHICLE_STATUS |
ANNOUNCEMENT |
ANNOUNCEMENT |
AAOS रूटिंग चालू करना
AAOS पर आधारित राउटिंग का इस्तेमाल करने के लिए, आपको audioUseDynamicRouting
फ़्लैग को true
पर सेट करना होगा:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
जब false
, रूटिंग और CarAudioService
की ज़्यादातर सुविधाएं बंद हो जाती हैं और AAOS, AudioService
के डिफ़ॉल्ट व्यवहार पर वापस आ जाता है.
कॉन्फ़िगर किया जा सकने वाला ऑडियो पॉलिसी इंजन
Android 14 में कार के ऑडियो सिस्टम को मैनेज करने की सुविधा को बेहतर बनाने के लिए, AAOS ने कॉन्फ़िगर की जा सकने वाली ऑडियो पॉलिसी इंजन (सीएपी) के ज़रिए ऑडियो सिस्टम को मैनेज करने की सुविधा शुरू की है. ऐसा करने से, ऑडियो को रूट करने और वॉल्यूम को मैनेज करने के लिए ज़्यादा विकल्प मिलते हैं. साथ ही, इन चीज़ों को अलग-अलग तरीके से तय किया जा सकता है:
useCoreAudioVolume
और useCoreAudioRouting
का इस्तेमाल करके, कॉन्फ़िगर की जा सकने वाली ऑडियो नीति (सीएपी) इंजन को चालू किया जा सकता है. ज़्यादा जानकारी के लिए, कॉन्फ़िगर की जा सकने वाली ऑडियो नीति इंजन देखें.
प्राइमरी ज़ोन
डिफ़ॉल्ट रूप से, सभी ऑडियो को प्राइमरी ज़ोन पर रूट किया जाता है. सिर्फ़ एक प्राइमरी ज़ोन मौजूद है. इसे कॉन्फ़िगरेशन में isPrimary="true"
एट्रिब्यूट से दिखाया जाता है. प्राइमरी ज़ोन को Audiomanager.PRIMARY_AUDIO_ZONE
अपने-आप असाइन हो जाता है.
कॉन्फ़िगरेशन का सैंपल (दूसरा वर्शन)
उदाहरण के लिए, किसी वाहन में दो ज़ोन हो सकते हैं. एक प्राइमरी ज़ोन और दूसरा पीछे की सीट पर लगा
मनोरंजन सिस्टम. इस स्थिति में, car_audio_configuration.xml
के वर्शन 2 को इस तरह से डिज़ाइन किया जा सकता है:
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
<group>
<device address="bus4_call_out">
<context context="call"/>
</device>
</group>
<group>
<device address="bus5_alarm_out">
<context context="alarm"/>
</device>
</group>
<group>
<device address="bus7_system_sound_out">
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
</device>
</group>
</volumeGroups>
</zone>
<zone name="rear seat zone" audioZoneId="1">
<volumeGroups>
<group>
<device address="bus100_rear_seat">
<context context="music"/>
<context context="navigation"/>
<context context="voice_command"/>
<context context="call_ring"/>
<context context="call"/>
<context context="alarm"/>
<context context="notification"/>
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
<context context="announcement"/>
</device>
</group>
</volumeGroups>
</zones>
</audioZoneConfiguration>
इस उदाहरण में, प्राइमरी ज़ोन कुछ ऑडियो कॉन्टेक्स्ट को अलग-अलग डिवाइसों पर भेजता है. इससे एचएएल, अलग-अलग पोस्ट-प्रोसेसिंग इफ़ेक्ट लागू कर पाता है. साथ ही, वाहन के हार्डवेयर का इस्तेमाल करके, हर डिवाइस पर आउटपुट को मिक्स कर पाता है.
डिवाइसों को कई वॉल्यूम ग्रुप में व्यवस्थित किया गया है: मीडिया, नेविगेशन,
कॉल, अलार्म, और सिस्टम की आवाज़ें. अगर सिस्टम को useFixedVolume
के तौर पर कॉन्फ़िगर किया गया है, तो हर ग्रुप के लिए वॉल्यूम लेवल, एचएएल को पास किए जाते हैं, ताकि इन डिवाइसों के आउटपुट पर उन्हें लागू किया जा सके.
हमारा सुझाव है कि प्राइमरी ज़ोन के लिए, सिस्टम की आवाज़ें अन्य आवाज़ों से अलग हों. इससे वाहन की आवाज़ों को ज़्यादा प्राथमिकता दी जा सकती है. कार में मौजूद ऑडियो सेवा, वाहन की आवाज़ों के बीच फ़र्क़ पहले से ही करती है. इससे फ़ोकस और डकिंग को मैनेज करने में मदद मिलती है. उदाहरण के लिए, आपातकालीन आवाज़ पर फ़ोकस करने के अनुरोध को, फ़ोकस करने के किसी अन्य अनुरोध के मुकाबले ज़्यादा प्राथमिकता दी जाती है.
सेकंडरी ज़ोन के उदाहरण में, सभी ऑडियो कॉन्टेक्स्ट को एक ही डिवाइस और एक वॉल्यूम ग्रुप पर रूट किया जाता है.
CAP इंजन के लिए वॉल्यूम ग्रुप की परिभाषा
कॉन्फ़िगर की जा सकने वाली ऑडियो नीति इंजन में बताए गए तरीके से, CAP इंजन के ज़रिए वॉल्यूम मैनेज करने के लिए, वॉल्यूम ग्रुप की परिभाषा में नाम भी शामिल होना चाहिए:
<group name="media">
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group name="navigation">
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
इस वॉल्यूम ग्रुप का नाम, CAP इंजन में तय किए गए वॉल्यूम के नाम से मेल खाना चाहिए. इसके अलावा, useFixedVolume
को भी false
पर सेट करना ज़रूरी है. ज़्यादा जानकारी के लिए, AAOS के ऑडियो कॉन्फ़िगरेशन फ़्लैग देखें.
ऑक्यूपेंट ज़ोन ऑडियो कॉन्फ़िगरेशन
Android 11 में, car_audio_configuration.xml
ने दो नए फ़ील्ड जोड़े हैं: audioZoneId
और occupantZoneId
. ऑडियो ज़ोन को मैनेज करने के लिए, audioZoneId
का इस्तेमाल किया जा सकता है. यूज़र आईडी के आधार पर राउटिंग को कॉन्फ़िगर करने के लिए, occupantZoneId
का इस्तेमाल किया जा सकता है.
ऑडियो कॉन्फ़िगरेशन को फिर से देखने पर, हमें पता चलता है कि इसमें रहने वाले व्यक्ति के ज़ोन आईडी और ऑडियो ज़ोन आईडी मैपिंग के लिए नए फ़ील्ड का इस्तेमाल किया गया है. वॉल्यूम ग्रुप की परिभाषाओं के बिना नए कॉन्फ़िगरेशन को इस तरह सेट अप किया जा सकता है:
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
...
</zone>
<zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
...
</zone>
</zones>
</audioZoneConfiguration>
कॉन्फ़िगरेशन, प्राइमरी ज़ोन से ऑक्यूपेंट ज़ोन 0
और audioZoneId
1 से occupantZoneId
1 तक की मैपिंग तय करता है. ऑडियो ज़ोन और ऑक्यूपेंट ज़ोन के बीच किसी भी मैपिंग को कॉन्फ़िगर किया जा सकता है. हालांकि, मैपिंग एक-से-एक होनी चाहिए. दो नए फ़ील्ड तय करने वाले नियम ये हैं:
प्राइमरी ज़ोन के लिए
audioZoneId
हमेशाPRIMARY_AUDIO_ZONE
आईडी होता है. अगरisPrimary="true"
की वैल्यू दी गई है, तोaudioZoneId
की वैल्यू देना ज़रूरी नहीं है.audioZoneId
औरoccupantZoneId
नंबर को दोहराया नहीं जा सकता.audioZoneId
औरoccupantZoneId
के बीच सिर्फ़ एक-से-एक मैपिंग हो सकती है.
Android 14 में कार के ऑडियो सिस्टम को कॉन्फ़िगर करना
Android 14 में, AAOS ने OEM प्लगिन सेवा लॉन्च की है. इसकी मदद से, कार की ऑडियो सेवा के ज़रिए मैनेज किए जाने वाले ऑडियो के व्यवहार को मैनेज किया जा सकता है. नई प्लगिन सेवाओं के साथ-साथ, कार के ऑडियो कॉन्फ़िगरेशन फ़ाइल में ये बदलाव किए गए हैं:
- ओईएम के तय किए गए कार ऑडियो का कॉन्टेक्स्ट
- नॉन-प्राइमरी ज़ोन के डाइनैमिक कॉन्फ़िगरेशन
ओईएम के तय किए गए कार ऑडियो का कॉन्टेक्स्ट
ऑडियो कॉन्फ़िगरेशन को ज़्यादा बेहतर बनाने के लिए, Android 14 में कार ऑडियो सेवा, ऑडियो के इस्तेमाल को तय किए गए ऑडियो कॉन्टेक्स्ट से अलग ग्रुप करने की अनुमति देती है.
OEM के तय किए गए इस कॉन्टेक्स्ट को car_audio_configuration.xml
वर्शन 3 फ़ाइल में तय किया जा सकता है.
इसके बजाय, पहले से तय किए गए स्टैटिक ऑडियो कॉन्टेक्स्ट का इस्तेमाल किया जाता है. ओईएम के तय किए गए कार ऑडियो कॉन्टेक्स्ट का सामान्य फ़ॉर्मैट यहां दिखाया गया है.
हर ओईएम कॉन्टेक्स्ट के लिए, name
के साथ-साथ ऑडियो एट्रिब्यूट के इस्तेमाल की सूची भी ज़रूरी होती है. यह सूची, कॉन्टेक्स्ट को असाइन की जाती है. ऊपर दिए गए उदाहरण में, दो कॉन्टेक्स्ट तय किए गए हैं:
<carAudioConfiguration version="3">
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
media
कॉन्टेक्स्ट मेंAUDIO_USAGE_MEDIA
औरAUDIO_USAGE_UNKNOWN
शामिल हैंgame
कॉन्टेक्स्ट में सिर्फ़AUDIO_USAGE_GAME
शामिल है
कॉन्टेक्स्ट को car_audio_configuration.xml
फ़ाइल में सबसे ऊपर तय किया जाना चाहिए. ओईएम कॉन्टेक्स्ट तय हो जाने के बाद, कार के ऑडियो कॉन्फ़िगरेशन की बाकी प्रोसेस पहले की तरह जारी रखी जा सकती है. कार के ऑडियो कॉन्टेक्स्ट पर ये नियम लागू होते हैं:
ओईएम कॉन्टेक्स्ट की परिभाषाएं देना ज़रूरी नहीं है. इसके बजाय, स्टैटिक ऑडियो कॉन्टेक्स्ट का इस्तेमाल किया जाता है.
कॉन्टेक्स्ट के नाम दोहराएं नहीं.
ऑडियो एट्रिब्यूट के इस्तेमाल को एक से ज़्यादा कॉन्टेक्स्ट के लिए असाइन न करें.
AudioAttributes
में तय किए गए ऑडियो के सभी इस्तेमाल, कॉन्टेक्स्ट बनाने के लिए इस्तेमाल किए जाने चाहिए.
सटीक तौर पर कहें, तो ओईएम ऑडियो कॉन्टेक्स्ट की परिभाषा के लिए, ऑडियो के इस्तेमाल के android.audio.policy.configuration.V7_0.AudioUsage
स्ट्रिंग फ़ॉर्मैट का इस्तेमाल करना ज़रूरी है. आने वाले समय में, ऑडियो एट्रिब्यूट के नए इस्तेमाल को सबसे सही कॉन्टेक्स्ट असाइन किया जाएगा. इससे एक Android वर्शन से दूसरे Android वर्शन पर माइग्रेट करते समय गड़बड़ी कम होगी.
ओईएम के तय किए गए कॉन्टेक्स्ट को, ओईएम प्लगिन की ऑडियो सेवा को और बेहतर बनाने के लिए पेश किया गया था. हालांकि, इसका इस्तेमाल ओईएम प्लगिन की सेवा के बिना भी किया जा सकता है. ऑडियो का व्यवहार, स्टैटिक ऑडियो सेवा जैसा होता है:
ऑडियो फ़ोकस से जुड़े इंटरैक्शन. ऑडियो एट्रिब्यूट का इस्तेमाल, ऑडियो फ़ोकस इंटरैक्शन मैट्रिक्स के ज़रिए सेट अप किए गए सबसे सही मैचिंग व्यवहार का पता लगाने के लिए किया जाता है. ज़्यादा जानकारी के लिए, ऑडियो फ़ोकस लेख पढ़ें.
'ऑडियो की आवाज़ कम या ज़्यादा करने का कंट्रोल' ऑडियो एट्रिब्यूट का इस्तेमाल, सबसे सही मैच का पता लगाने के लिए किया जाता है:
- ओईएम के तय किए गए कॉन्टेक्स्ट के आधार पर वॉल्यूम ग्रुप.
- कॉन्फ़िगर की गई स्टैटिक वॉल्यूम सूची से प्राथमिकता.
ऑडियो डकिंग का तरीका:
फ़िलहाल, ऑडियो फ़ोकस के लिए ऑडियो एट्रिब्यूट के इस्तेमाल से, आउटपुट ऑडियो डिवाइस की जानकारी को मैप किया जाता है. यह जानकारी, कार के ऑडियो कॉन्फ़िगरेशन फ़ाइल में तय की गई है.
ऑडियो एट्रिब्यूट का इस्तेमाल, स्टैटिक ऑडियो डकिंग मैट्रिक्स के आधार पर, डक करने के लिए स्टैटिक कॉन्टेक्स्ट को मैप करने के लिए किया जाता है.
कैप इंजन की प्रॉडक्ट स्ट्रेटजी
जब किसी डिवाइस को वॉल्यूम या राउटिंग मैनेजमेंट के लिए, CAP इंजन का इस्तेमाल करना होता है, तो आपके ओईएम के तय किए गए कॉन्टेक्स्ट को, CAP इंजन की प्रॉडक्ट रणनीति की परिभाषा से मेल खाना चाहिए. अगर ऐसा नहीं है, तो CAP इंजन के बिना ओईएम के तय किए गए कॉन्टेक्स्ट का इस्तेमाल किया जा सकता है.
ज़्यादा जानने के लिए, AAOS में CAP इंजन प्रॉडक्ट की प्रॉडक्ट रणनीति देखें.
डाइनैमिक ऑडियो ज़ोन के कॉन्फ़िगरेशन
Android 14 में, डाइनैमिक ऑडियो ज़ोन कॉन्फ़िगरेशन को शामिल करने के लिए, ऑडियो ज़ोन तय करने वाले कार ऑडियो कॉन्फ़िगरेशन स्कीमा को भी वर्शन 3 में अपडेट किया गया है. नए स्कीमा के लिए, हर ज़ोन के लिए कॉन्फ़िगरेशन सेट अप करना ज़रूरी है.
<carAudioConfiguration version="3">
<!-- optional OEM context -->
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
</oemContexts>
<zones>
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="primary zone config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="media"/>
<context context="game"/>
<context context="announcement"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
...
</zoneConfigs>
</zone
</zones>
ज़्यादा जानने के लिए, device/generic/car/emulator/audio/car_audio_configuration.xml
में दी गई वर्शन 3 की फ़ाइल देखें. Android 14 से, प्राइमरी ज़ोन के लिए सिर्फ़ एक कॉन्फ़िगरेशन सेट किया जा सकता है. नॉन-प्राइमरी ज़ोन में कई कॉन्फ़िगरेशन हो सकते हैं. कार के ऑडियो कॉन्फ़िगरेशन पर ये नियम लागू होते हैं:
प्राइमरी ऑडियो ज़ोन में सिर्फ़ एक कॉन्फ़िगरेशन हो सकता है.
नॉन-प्राइमरी ऑडियो ज़ोन के कई कॉन्फ़िगरेशन हो सकते हैं.
हर ऑडियो ज़ोन और ऑडियो ज़ोन कॉन्फ़िगरेशन के लिए, नाम यूनीक होना चाहिए.
ऑडियो ज़ोन में, ऑडियो कॉन्फ़िगरेशन अलग-अलग हो सकते हैं:
- यह ज़रूरी नहीं है कि वॉल्यूम ग्रुप का सेट-अप एक जैसा हो.
- ऑडियो कॉन्टेक्स्ट असाइनमेंट एक जैसा होना ज़रूरी नहीं है.
ऑडियो आउटपुट डिवाइस के नाम, सभी ज़ोन या कॉन्फ़िगरेशन के लिए यूनीक होने चाहिए. ऑडियो कॉन्फ़िगरेशन या ज़ोन में, डिवाइस का नाम सिर्फ़ एक बार दिखना चाहिए.
एक ही वॉल्यूम ग्रुप से जुड़े ऑडियो डिवाइसों के लिए, ऑडियो गेन कॉन्फ़िगरेशन एक जैसे होने चाहिए.
हर ऑडियो कॉन्फ़िगरेशन के लिए, सभी ऑडियो कॉन्टेक्स्ट (ओईएम या स्टैटिक) असाइन किए जाने चाहिए.
फ़ॉरवर्ड कंपैटिबिलिटी
car_audio_configuration.xml
के नए वर्शन में, हर अपडेट के साथ नई सुविधाएं मिलती हैं. हालांकि, AAOS के नए वर्शन में भी पुरानी फ़ाइलों का इस्तेमाल किया जा सकता है. Android के नए वर्शन पर अपडेट करने वाले ओईएम, car_audio_configuration.xml
फ़ाइल का फिर से इस्तेमाल कर सकते हैं.
अगर आपको किसी ऐसी नई सुविधा का इस्तेमाल करना है जिसके लिए car_audio_configuration.xml
में मौजूद नई जानकारी की ज़रूरत है, तो आपको car_audio_configuration.xml
को अपडेट करना होगा. कार सेवा शुरू होने पर, फ़ाइल के पुराने वर्शन का इस्तेमाल करने की कोशिश करने पर IllegalStateException
दिखता है. इस वर्शन में, ऐसी जानकारी होती है जो फ़ाइल के उस वर्शन में काम नहीं करती. अपवाद वाले मैसेज में, इस बारे में ज़रूरी जानकारी होती है कि कौनसी जानकारी इस्तेमाल की गई है और इसके लिए कौनसा कम से कम वर्शन ज़रूरी है.