साथ काम करने के फ़्रेमवर्क में बदलाव (Android 12)

पहली इमेज. डेवलपर के लिए सेटिंग और टूल में मौजूद, 'ऐप्लिकेशन के साथ काम करने के लिए किए गए बदलाव’ वाली स्क्रीन पर, वे बदलाव दिखते हैं जिन्हें टॉगल किया जा सकता है.

इस पेज पर, Android 12 (एपीआई लेवल 31) में, कंपैटिबिलिटी फ़्रेमवर्क के तहत किए गए हर बदलाव के बारे में बताया गया है. Android 12 के साथ काम करने वाले ऐप्लिकेशन को तैयार करने के दौरान, इस सूची का इस्तेमाल डेवलपर के लिए सेटिंग और टूल और एडीबी कमांड के साथ करें. इससे आपको अपने ऐप्लिकेशन की जांच करने और उसे डीबग करने में मदद मिलेगी.

कंपैटबिलिटी फ़्रेमवर्क टूल का इस्तेमाल करके, ये काम किए जा सकते हैं:

  • ऐप्लिकेशन के targetSdkVersion में बदलाव किए बिना, सिस्टम में किए गए खास बदलावों की जांच करें. टॉगल का इस्तेमाल करके, खास तरह के व्यवहार से जुड़े कुछ बदलावों को हमेशा चालू रखा जा सकता है. इससे, अपने मौजूदा ऐप्लिकेशन पर पड़ने वाले असर का आकलन किया जा सकता है.
  • सिर्फ़ खास बदलावों पर टेस्टिंग करें. टारगेट किए गए सभी बदलावों की एक साथ जांच करने के बजाय, टॉगल की मदद से चुनिंदा बदलावों की जांच की जा सकती है. आपको जिन बदलावों की जांच नहीं करनी है उन सभी को टॉगल करके बंद किया जा सकता है.
  • एडीबी की मदद से टॉगल मैनेज करना. एडीबी कमांड का इस्तेमाल करके, ऑटोमेटेड टेस्ट एनवायरमेंट में इन खास बदलावों को चालू और बंद किया जा सकता है.
  • स्टैंडर्ड चेंज आईडी का इस्तेमाल करके, तेज़ी से डीबग करें. टॉगल किए जा सकने वाले हर बदलाव का एक यूनीक आईडी और नाम होता है. इनका इस्तेमाल करके, लॉग आउटपुट में समस्या की असल वजह का तुरंत पता लगाया जा सकता है.

इस्तेमाल के इन सभी उदाहरणों के लिए टूल इस्तेमाल करने के बारे में पूरी जानकारी पाने के लिए, कंपैटबिलिटी फ़्रेमवर्क टूल देखें.

कंपैटबिलिटी फ़्रेमवर्क में शामिल, ऐप्लिकेशन के काम करने के तरीके में हुए बदलाव

इस सेक्शन में दी गई सूची में, Android 12 के कंपैटिबिलिटी फ़्रेमवर्क में शामिल हर बदलाव के बारे में बताया गया है.

बदलावों की सूची को डिफ़ॉल्ट स्थिति के हिसाब से फ़िल्टर किया जा सकता है.

Android 12 में, कंपैटिबिलिटी फ़्रेमवर्क में जोड़े गए व्यवहार से जुड़े बदलाव

ALWAYS_SANDBOX_DISPLAY_APIS

चेंज आईडी: 185004937
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

इस सेटिंग के चालू होने पर, विंडो मोड के बजाय किसी पैकेज पर डिसप्ले एपीआई सैंडबॉक्सिंग लागू होती है. डिसप्ले एपीआई हमेशा ऐप्लिकेशन की सीमाएं उपलब्ध कराएंगे.

इस बदलाव के बारे में ज़्यादा जानने के लिए, Android 12 के व्यवहार में हुए बदलावों के बारे में जानकारी देने वाले पेज पर जाएं. इसके बाद, बंद किए गए डिसप्ले के तरीकों सेक्शन को देखें.

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

चेंज आईडी: 163400105
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 32) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 से, यह प्लैटफ़ॉर्म ऑगमेंटेड ऑटोफ़िल फ़्रेमवर्क का इस्तेमाल करके, टेक्स्ट के अलावा अन्य सुझाव (जैसे, इमेज) दे सकता है. पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा देखें. इन सुझावों को मैनेज करने के लिए, ऐप्लिकेशन को आम तौर पर OnReceiveContentListener एपीआई लागू करना होगा.

जिन ऐप्लिकेशन में पहले से ही InputConnection.commitContent(InputContentInfo, int, Bundle) एपीआई लागू है उनमें इस एपीआई को आसानी से लागू करने के लिए, हम उस एपीआई को फ़ॉलबैक के तौर पर फिर से इस्तेमाल करते हैं. ऐसा तब किया जाता है, जब ऐप्लिकेशन में OnReceiveContentListener को अब तक लागू न किया गया हो. यह फ़ॉलबैक सिर्फ़ Android 12 (एपीआई लेवल 31) पर चालू होता है. यह बदलाव आईडी, फ़ॉलबैक को बंद कर देता है. इससे Android 12 (एपीआई लेवल 32) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन को, बिना टेक्स्ट वाले सुझाव स्वीकार करने के लिए, OnReceiveContentListener एपीआई को लागू करना होगा.

BLOCK_FLAG_SLIPPERY

चेंज आईडी: 157929241
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए चालू है.

Android 12 (एपीआई लेवल 31) पर चलने वाले ऐप्लिकेशन के लिए, यह जांच करता है कि FLAG_SLIPPERY का इस्तेमाल, ऐप्लिकेशन में किसी विंडो के साथ किया जा रहा है या नहीं. हमें उम्मीद है कि इस फ़्लैग का इस्तेमाल सिर्फ़ सिस्टम कॉम्पोनेंट करते हैं, क्योंकि यह इस्तेमाल नहीं किया जा सकने वाला फ़ील्ड है. अगर ऐसा है, तो उस पर पाबंदी लगा दी जाएगी.

BLOCK_GPS_STATUS_USAGE

चेंज आईडी: 144027538
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, सभी GpsStatus एपीआई के इस्तेमाल को GnssStatus एपीआई से बदलना होगा.

BLOCK_IMMUTABLE_PENDING_INTENTS

चेंज आईडी: 171317480
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, लोकेशन एपीआई में पास किए गए ऐसे PendingIntent ऑब्जेक्ट जिनमें बदलाव नहीं किया जा सकता, वे IllegalArgumentException. जनरेट करेंगे

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

चेंज आईडी: 169887240
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, LocationRequest सिस्टम एपीआई का इस्तेमाल, PendingIntent जगह की जानकारी के अनुरोधों के साथ नहीं किया जा सकता.

BLOCK_UNTRUSTED_TOUCHES

चेंज आईडी: 158002302
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए चालू है.

सिस्टम की सुरक्षा और उपयोगकर्ताओं को बेहतर अनुभव देने के लिए, Android 12 उन ऐप्लिकेशन को टच इवेंट का इस्तेमाल करने से रोकता है जहां ओवरले, ऐप्लिकेशन को असुरक्षित तरीके से ब्लॉक करता है.

इस बदलाव के बारे में ज़्यादा जानने के लिए, भरोसेमंद नहीं माने जाने वाले टच इवेंट ब्लॉक किए गए हैं लेख पढ़ें.

CALL_ACTIVITY_RESULT_BEFORE_RESUME

चेंज आईडी: 78294732
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 32) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 32) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, यह गतिविधि के नतीजे की लाइफ़साइकल को ठीक करता है. इससे यह पक्का होता है कि गतिविधि को फिर से शुरू करने से ठीक पहले, गतिविधि का नतीजा मिल जाए.

CAMERA_MIC_INDICATORS_NOT_PRESENT

चेंज आईडी: 162547999
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

इससे पता चलता है कि यह डिवाइस, कैमरा और माइक्रोफ़ोन इंडिकेटर की सुविधा के साथ काम करता है. अगर चेंज आईडी मौजूद है, तो वैल्यू false होगी. ऐसा इसलिए, क्योंकि CompatChanges#isChangeEnabled तरीके से, चेंज आईडी मौजूद न होने पर true दिखता है.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

चेंज आईडी: 146211400
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 32) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 32) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, पैकेज मैनेजर किसी पैकेज को तब इंस्टॉल नहीं करेगा, जब अनुमतियों का समूह गलत तरीके से बनाए गए हों. अनुमतियों का समूह सिर्फ़ उन ऐप्लिकेशन के बीच शेयर किए जाने चाहिए जो सर्टिफ़िकेट शेयर करते हैं. अगर कोई अनुमति किसी ग्रुप से जुड़ी है, तो उस ग्रुप के बारे में भी बताना ज़रूरी है.

CHANGE_ID_AUTH_STATE_DENIED

चेंज आईडी: 181350407
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले क्लाइंट ऐप्लिकेशन के लिए, अनुमति न मिलने की स्थिति में नैनोऐप्लिकेशन को मैसेज भेजने की कोशिश करने पर, SecurityException दिखता है.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

चेंज आईडी: 136069189
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, SecurityException थ्रो किया जाता है. ऐसा तब होता है, जब उनके पास HIGH_SAMPLING_RATE_SENSORS अनुमति न हो, वे डीबग मोड में चल रहे हों, और 200 हर्ट्ज़ से ज़्यादा के सैंपलिंग रेट का अनुरोध करते हों.

DELIVER_HISTORICAL_LOCATIONS

चेंज आईडी: 73144566
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, जगह की जानकारी देने वाले क्लाइंट को कुछ मामलों में, जगह की पुरानी जानकारी (मौजूदा समय से पहले की जानकारी) मिल सकती है.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

चेंज आईडी: 181658987
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, TelephonyDisplayInfo में किए गए बदलावों के लिए पुराने सिस्टम के साथ काम करने की सुविधा उपलब्ध कराता है.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

चेंज आईडी: 170503758
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, प्लैटफ़ॉर्म किसी ऐप्लिकेशन के फ़्रेम रेट को कम करके, रीफ़्रेश रेट के भाजक के बराबर कर सकता है. ऐसा तब किया जाता है, जब यह ज़्यादा सही हो. उदाहरण के लिए, अगर ऐप्लिकेशन ने Surface.setFrameRate(float, int) को कॉल किया हो. ऐप्लिकेशन को कम किए गए फ़्रेम रेट पर, Choreographer.postFrameCallback(Choreographer.FrameCallback) कॉलबैक और बैकप्रेशर का अनुभव होगा. ऐप्लिकेशन, Display.getRefreshRate() और Display.Mode.getRefreshRate() का इस्तेमाल करके, डिसप्ले के रीफ़्रेश रेट का पता लगाते हैं. Display.getRefreshRate() हमेशा ऐप्लिकेशन का फ़्रेम रेट दिखाएगा, न कि डिसप्ले का रीफ़्रेश रेट. इससे ऐप्लिकेशन, फ़्रेम पेसिंग को सही तरीके से कर पाएंगे. अगर Display.Mode.getRefreshRate() को पिछली रिलीज़ के लिए कंपाइल किया गया है, तो यह ऐप्लिकेशन का फ़्रेम रेट दिखाएगा. साथ ही, Android 12 (एपीआई लेवल 31) से शुरू होने पर, यह फ़िज़िकल डिसप्ले का रीफ़्रेश रेट दिखाएगा.

DOWNSCALED

चेंज आईडी: 168419799
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

यह बदलाव, हर ऐप्लिकेशन के हिसाब से बफ़र के साइज़ को कम करने से जुड़े सभी बदलावों को कंट्रोल करता है. इस बदलाव को चालू करने पर, ये स्केलिंग फ़ैक्टर लागू किए जा सकते हैं:

किसी ऐप्लिकेशन पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन का साइज़ सबसे ज़्यादा, चालू किए गए स्केलिंग फ़ैक्टर के हिसाब से बदल जाता है. उदाहरण के लिए, अगर 80% और 70% (DOWNSCALE_80 और DOWNSCALE_70), दोनों चालू हैं, तो 80% का इस्तेमाल किया जाएगा.

DOWNSCALE_30

चेंज आईडी: 189970040
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 30% है.

DOWNSCALE_35

चेंज आईडी: 189969749
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 35% है.

DOWNSCALE_40

चेंज आईडी: 189970038
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने से, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 40% है.

DOWNSCALE_45

चेंज आईडी: 189969782
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने से, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 45% है.

DOWNSCALE_50

चेंज आईडी: 176926741
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 50% है.

DOWNSCALE_55

चेंज आईडी: 189970036
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने से, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 55% है.

DOWNSCALE_60

चेंज आईडी: 176926771
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 60% है.

DOWNSCALE_65

चेंज आईडी: 189969744
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने से, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 65% है.

DOWNSCALE_70

चेंज आईडी: 176926829
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने से, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 70% है.

DOWNSCALE_75

चेंज आईडी: 189969779
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 75% है.

DOWNSCALE_80

चेंज आईडी: 176926753
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 80% है.

DOWNSCALE_85

चेंज आईडी: 189969734
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 85% है.

DOWNSCALE_90

चेंज आईडी: 182811243
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

अगर DOWNSCALED भी चालू है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन को यह मानना पड़ता है कि वह ऐसे डिसप्ले पर चल रहा है जिसका वर्टिकल और हॉरिज़ॉन्टल रिज़ॉल्यूशन, असली डिसप्ले के रिज़ॉल्यूशन का 90% है.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

चेंज आईडी: 157629738
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले Android TV का ऐप्लिकेशन, किसी भी साइज़ की विंडो को हैंडल कर सकते हैं. इसमें 1080 पिक्सल से बड़े साइज़ की विंडो भी शामिल हैं. Android के पुराने वर्शन को टारगेट करने वाले ऐप्लिकेशन, 1080 पिक्सल से बड़ी विंडो नहीं दिखाते. इसलिए, ज़रूरत पड़ने पर उनकी विंडो को 1080 पिक्सल तक छोटा कर दिया जाता है.

DROP_CLOSE_SYSTEM_DIALOGS

चेंज आईडी: 174664120
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए चालू है.

ऐप्लिकेशन और सिस्टम के साथ इंटरैक्ट करते समय उपयोगकर्ता के कंट्रोल को बेहतर बनाने के लिए, Android 12 से ACTION_CLOSE_SYSTEM_DIALOGS इंटेंट ऐक्शन को बंद कर दिया गया है.

इस बदलाव के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन, सिस्टम डायलॉग बंद नहीं कर सकते लेख पढ़ें.

ENABLE_CHECKS_FOR_PRIVATE_FILES

चेंज आईडी: 172100307
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन, मीडिया प्रोवाइडर का इस्तेमाल करके निजी फ़ाइलों को न तो जोड़ सकते हैं और न ही अपडेट कर सकते हैं.

ENABLE_DEFERRED_SCAN

चेंज आईडी: 180326732
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

MediaProvider#update() के तहत ट्रिगर होने वाले स्कैन को रोकने के लिए, यह विकल्प चालू करें.

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

चेंज आईडी: 157233955
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, कॉल की स्थिति के बारे में क्वेरी करने और सूचना देने वाले एपीआई पर READ_PHONE_STATE सुरक्षा चालू करता है. जैसे, TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription(), और TelephonyCallback.CallStateListener.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

चेंज आईडी: 183407956
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, getPhoneAccount(PhoneAccountHandle) पर READ_PHONE_NUMBERS या READ_PRIVILEGED_PHONE_STATE सुरक्षा चालू करता है.

ENABLE_INCLUDE_ALL_VOLUMES

चेंज आईडी: 182734110
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

MediaProvider#query में हाल ही में अनमाउंट किए गए वॉल्यूम से फ़ाइलों की डेटाबेस लाइनें शामिल करने के लिए, यह विकल्प चालू करें.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

चेंज आईडी: 178209446
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

इस विकल्प को चालू करें, ताकि Manifest.permission.MANAGE_EXTERNAL_STORAGE की अनुमति वाले ऐप्लिकेशन, रॉ एक्सटर्नल स्टोरेज को ऐक्सेस करने का अनुरोध कर सकें.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

चेंज आईडी: 185199076
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, यह ज़रूरी है कि अलार्म के लिए तय किए गए समय में कुछ मिनट का अंतर हो. आम तौर पर, जिन अलार्म को ट्रिगर करने के लिए कम समय की ज़रूरत होती है वे एग्ज़ैक्ट अलार्म की तरह ही होते हैं. इसलिए, उन्हें ट्रिगर करने के लिए, उपलब्ध कराए गए एपीआई का इस्तेमाल करना चाहिए. जैसे, setExact(int, long, PendingIntent). अगर अलार्म के लिए तय की गई विंडो छोटी है, तो सिस्टम उसे बढ़ा देगा.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

चेंज आईडी: 142191088
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन को, सार्वजनिक नेटिव शेयर की गई लाइब्रेरी के लिए डिपेंडेंसी का एलान करना होगा. ये लाइब्रेरी, डिवाइस बनाने वाली कंपनी ने अपनी AndroidManifest.xml में uses-native-library टैग का इस्तेमाल करके तय की हैं. अगर कोई डिपेंडेंसी पूरी नहीं होती है, तो पैकेज मैनेजर ऐप्लिकेशन को इंस्टॉल नहीं करेगा. उदाहरण के लिए, अगर कोई डिपेंडेंसी मौजूद नहीं है. टैग में android:required एट्रिब्यूट का इस्तेमाल करके, डिपेंडेंसी को वैकल्पिक के तौर पर सेट किया जा सकता है. ऐसा करने पर, डिपेंडेंसी पूरी न होने पर भी ऐप्लिकेशन इंस्टॉल हो जाएगा.

इंस्टॉल होने के बाद, ऐप्लिकेशन को सिर्फ़ वे नेटिव शेयर की गई लाइब्रेरी मिलती हैं जिनके बारे में ऐप्लिकेशन मेनिफ़ेस्ट में बताया गया है. ऐप्लिकेशन मेनिफ़ेस्ट में मौजूद न होने वाली नेटिव शेयर की गई लाइब्रेरी पर dlopen को कॉल करने पर, यह काम नहीं करेगा. भले ही, वह लाइब्रेरी डिवाइस पर मौजूद हो.

ENFORCE_STRICT_QUERY_BUILDER

चेंज आईडी: 143231523
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

इस सुविधा के चालू होने पर, SQLiteQueryBuilder, सभी CalendarProvider2 क्वेरी के चुने गए विकल्पों की जांच करता है. इससे यह पता चलता है कि कहीं उनमें नुकसान पहुंचाने वाले पैरामीटर तो शामिल नहीं हैं.

FGS_BG_START_RESTRICTION_CHANGE_ID

चेंज आईडी: 170668199
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, यह सुविधा बैकग्राउंड में चलने के दौरान फ़ोरग्राउंड सेवाएं शुरू करने पर पाबंदी लगाती है.

FGS_START_EXCEPTION_CHANGE_ID

चेंज आईडी: 174041399
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, सिस्टम को IllegalStateException थ्रो करने की अनुमति देता है. ऐसा तब होता है, जब कोई ऐप्लिकेशन बैकग्राउंड में चलने के दौरान, फ़ोरग्राउंड सेवा शुरू करने की कोशिश करता है.

FINISH_INPUT_NO_FALLBACK_CONNECTION

चेंज आईडी: 156215187
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, डिवाइस के non-interactive होने पर InputConnection को पूरा करें.

अगर मौजूदा input method ने इसे चालू किया है, तो डिवाइस के इंटरैक्टिव न होने पर, मौजूदा इनपुट कनेक्शन finished हो जाएगा.

अगर यह नीति चालू नहीं है, तो डिवाइस के इंटरैक्टिव न होने पर, मौजूदा इनपुट कनेक्शन को बिना किसी सूचना के बंद कर दिया जाएगा. साथ ही, डिवाइस के फिर से इंटरैक्टिव होने पर, onFinishInput() और onStartInput() का एक पेयर भेजा जाएगा.

FORCE_DISABLE_HEVC_SUPPORT

चेंज आईडी: 174227820
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

किसी ऐप्लिकेशन के लिए, HEVC मीडिया फ़ॉर्मैट इस्तेमाल करने की सुविधा को हमेशा के लिए बंद करें. ऐप्लिकेशन को अपने मेनिफ़ेस्ट में, मीडिया फ़ॉर्मैट के बारे में बताना चाहिए. हालांकि, इस फ़्लैग का इस्तेमाल करके किसी ऐप्लिकेशन को HEVC फ़ॉर्मैट में वीडियो चलाने से रोका जा सकता है. इसलिए, HEVC फ़ॉर्मैट में एन्कोड किए गए मीडिया को ऐक्सेस करने पर, ट्रांसकोडिंग प्रोसेस अपने-आप शुरू हो जाता है. इस फ़्लैग को सेट करने पर, ऐप्लिकेशन के लिए ओएस लेवल पर सेट की गई सभी डिफ़ॉल्ट सेटिंग बदल जाती हैं. यह फ़्लैग सेटिंग डिफ़ॉल्ट रूप से बंद होती है. इसका मतलब है कि ओएस की डिफ़ॉल्ट सेटिंग को प्राथमिकता दी जाती है. अगर यह फ़्लैग और FORCE_ENABLE_HEVC_SUPPORT, दोनों चालू हैं, तो ओएस दोनों फ़्लैग को अनदेखा कर देता है.

FORCE_ENABLE_HEVC_SUPPORT

चेंज आईडी: 174228127
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

किसी ऐप्लिकेशन में HEVC मीडिया फ़ॉर्मैट को हमेशा के लिए चालू करें. ऐप्लिकेशन को अपने मेनिफ़ेस्ट में, उन मीडिया फ़ॉर्मैट के बारे में बताना चाहिए जो उनके साथ काम करते हैं. हालांकि, इस फ़्लैग का इस्तेमाल करके किसी ऐप्लिकेशन में HEVC की सुविधा को चालू किया जा सकता है. इससे HEVC में एन्कोड किए गए मीडिया को ऐक्सेस करते समय, ट्रांसकोडिंग से बचा जा सकता है. इस फ़्लैग को सेट करने पर, ऐप्लिकेशन के लिए ओएस लेवल पर सेट की गई सभी डिफ़ॉल्ट सेटिंग बदल जाती हैं. यह फ़्लैग सेटिंग डिफ़ॉल्ट रूप से बंद होती है. इसका मतलब है कि ओएस की डिफ़ॉल्ट सेटिंग को प्राथमिकता दी जाएगी. अगर यह फ़्लैग और FORCE_DISABLE_HEVC_SUPPORT, दोनों चालू हैं, तो ओएस दोनों फ़्लैग को अनदेखा कर देता है.

FORCE_NON_RESIZE_APP

चेंज आईडी: 181136395
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

इस सेटिंग को जिन पैकेज पर लागू किया जाता है, उनका साइज़ नहीं बदला जा सकता.

FORCE_RESIZE_APP

चेंज आईडी: 174042936
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

इस सेटिंग को जिन पैकेज पर लागू किया जाता है, उनका साइज़ बदला जा सकता है. हम सिर्फ़ फ़ुलस्क्रीन विंडोविंग मोड में साइज़ बदलने की अनुमति देते हैं. हालांकि, हम ऐप्लिकेशन को साइज़ बदलने वाले मल्टी-विंडो (एक से ज़्यादा ऐप, एक साथ) मोड में नहीं ले जाते.

HIDE_PROP_ICUBINARY_DATA_PATH

चेंज आईडी: 171979766
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, android.icu.impl.ICUBinary.dataPath प्रॉपर्टी का ऐक्सेस हटा दिया जाता है.

IGNORE_ALLOW_BACKUP_IN_D2D

चेंज आईडी: 183147249
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, एक डिवाइस से दूसरे डिवाइस (डी2डी) पर माइग्रेशन के दौरान, android:allowBackup को अनदेखा कर दिया जाता है.

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

चेंज आईडी: 180523564
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, android:fullBackupContent का इस्तेमाल करके तय किए गए, शामिल करने और बाहर रखने के नियम, एक डिवाइस से दूसरे डिवाइस (डी2डी) पर ट्रांसफ़र के दौरान अनदेखा कर दिए जाते हैं.

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

चेंज आईडी: 169273070
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, getSupportedLocales() अब सेट न होने पर, डिफ़ॉल्ट सिस्टम स्थान-भाषा के बजाय, स्थान-भाषा की खाली सूची दिखाता है.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

चेंज आईडी: 158482162
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, isBackupServiceActive() के लिए ज़रूरी BACKUP अनुमति, BackupManager में क्लाइंट-साइड के बजाय सर्विस-साइड पर लागू की जाती है.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

चेंज आईडी: 169897160
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

चालू होने पर, प्रूनिंग की नई रणनीति के मुताबिक कीस्टोर ऑपरेशन बनाने में समस्या आ सकती है. Keystore इस अनुमान के तहत काम करता था कि क्रिप्टोग्राफ़िक ऑपरेशन हमेशा सफल होते हैं. हालांकि, KeyMint बैकएंड में ऑपरेशन स्लॉट की संख्या सीमित होती है.

"अनंत" ऑपरेशन स्लॉट की मौजूदगी बनाए रखने के लिए, Keystore डीमन, हाल ही में सबसे कम इस्तेमाल किए गए ऑपरेशन को हटा देता है. ऐसा तब होता है, जब कोई ऑपरेशन स्लॉट उपलब्ध न हो. इस वजह से, सही कार्रवाइयां समय से पहले खत्म हो सकती हैं. इससे AndroidKeystore में, सेवा में रुकावट (डीओएस) और अनचाहे लाइव लॉक की समस्या आ सकती है. उदाहरण के लिए, अगर पावर मैनेजमेंट ऑप्टिमाइज़ेशन की वजह से कई ऐप्लिकेशन एक ही समय पर चालू हो जाते हैं और क्रिप्टो ऑपरेशन करने की कोशिश करते हैं, तो वे बिना किसी प्रोग्रेस के एक-दूसरे के ऑपरेशन को बंद करना शुरू कर देते हैं.

लाइवलॉक से बचने और डीओएस के हमलों को रोकने के लिए, हमने प्रूनिंग की रणनीति में बदलाव किया है. इससे उन क्लाइंट को प्राथमिकता दी जाती है जो कुछ समय के लिए, कुछ ऑपरेशन स्लॉट का इस्तेमाल करते हैं. इस वजह से, पांच सेकंड से कम समय तक चलने वाले सिंगल ऑपरेशन, आम तौर पर प्रूनिंग की रणनीति से बिना किसी रुकावट के पूरे हो जाते हैं. फ़ाइल सिस्टम को एन्क्रिप्ट (सुरक्षित) करने से जुड़े कुछ ऐसे ऑपरेशन अब भी मौजूद हैं जो इन ऑपरेशन को भी हटा सकते हैं. हालांकि, ऐसा बहुत कम मामलों में होता है. इस नई प्रूनिंग रणनीति के खराब असर की वजह से, अब नया ऑपरेशन बनाने में समस्या आ सकती है. ऐसा तब हो सकता है, जब क्लाइंट की प्रूनिंग पावर, मौजूदा सभी ऑपरेशन से कम हो.

प्रूनिंग स्ट्रेटजी: सही कैंडिडेट ढूंढने के लिए, हम कॉलर और हर मौजूदा ऑपरेशन के लिए मैलस की गिनती करते हैं. मैलस, प्रूनिंग पावर (कॉलर) या प्रूनिंग रेज़िस्टेंस (मौजूदा ऑपरेशन) का उलटा होता है. कॉलर को किसी ऑपरेशन को हटाने के लिए, उसे ऐसा ऑपरेशन ढूंढना होगा जिसका मैलस उसके अपने मैलस से ज़्यादा हो. प्रूनिंग की रणनीति के बारे में ज़्यादा जानने के लिए, operation.rs को लागू करने का तरीका देखें. Android 11 (एपीआई लेवल 30) और इससे पहले के वर्शन पर, KeyStore2 खाली ऑपरेशन स्लॉट के लिए, Keystore डीमन को पोल करेगा. Android 11 (एपीआई लेवल 30) और इससे पहले के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, अब भी ऐसा लगेगा कि साइफ़र और सिग्नेचर ऑब्जेक्ट को शुरू करने की प्रोसेस हमेशा पूरी हो जाती है. हालांकि, किसी कार्रवाई को पूरा होने में ज़्यादा समय लग सकता है. Android के सभी वर्शन को, ऑपरेशन स्लॉट को बेहतर तरीके से शेड्यूल करने और किसी ऑपरेशन को पूरा करने का बेहतर मौका मिलता है.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

चेंज आईडी: 174664365
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, Intent.ACTION_CLOSE_SYSTEM_DIALOGS को तब तक नहीं भेजा जा सकता, जब तक ऐप्लिकेशन के पास android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS की अनुमति न हो. ध्यान दें कि यह #DROP_CLOSE_SYSTEM_DIALOGS का ज़्यादा पाबंदी वाला वर्शन है. इसमें ऐप्लिकेशन से यह उम्मीद की जाती है कि जब वह Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करना शुरू करे, तो Intent.ACTION_CLOSE_SYSTEM_DIALOGS इंटेंट भेजना बंद कर दे.

LOCK_DOWN_COLLAPSE_STATUS_BAR

चेंज आईडी: 173031413
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, सुरक्षा की वजहों से स्टेटस बार पैनल को छोटा करने के लिए, Manifest.permission.STATUS_BAR अनुमति ज़रूरी है. मैलवेयर इसका फ़ायदा उठाकर, उपयोगकर्ता को बहुत ज़रूरी सूचनाएं ऐक्सेस करने से रोकता था.

LOW_POWER_EXCEPTIONS

चेंज आईडी: 168936375
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, कम पावर वाले के तौर पर मार्क किए गए सभी LocationRequest ऑब्जेक्ट, अपवाद थ्रो करते हैं. ऐसा तब होता है, जब कॉलर के पास LOCATION_HARDWARE अनुमति न हो. इसके बजाय, अनुरोध के कम पावर वाले हिस्से को बिना किसी सूचना के ड्रॉप कर दिया जाता है.

MISSING_EXPORTED_FLAG

चेंज आईडी: 150232615
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, जब भी इंटेंट फ़िल्टर तय किया जाए, तब android:exported एट्रिब्यूट के लिए साफ़ तौर पर वैल्यू तय की जानी चाहिए.

इस बदलाव के बारे में ज़्यादा जानने के लिए, कॉम्पोनेंट को सुरक्षित तरीके से एक्सपोर्ट करना लेख पढ़ें.

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

चेंज आईडी: 207557677
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 32) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 32) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, AppZygote प्रोसेस और इसके डिसेंडेंट में नेटिव हीप ऐलोकेशन, सबसे अहम बाइट में नॉन-ज़ीरो टैग का इस्तेमाल करते हैं.

इस बदलाव के बारे में ज़्यादा जानने के लिए, टैग किए गए पॉइंटर देखें.

NATIVE_HEAP_ZERO_INIT

चेंज आईडी: 178038272
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

'नेटिव हीप मेमोरी का बंटवारा' प्रोसेस के लिए, अपने-आप शून्य से शुरू होने की सुविधा चालू करें.

NATIVE_MEMTAG_ASYNC

चेंज आईडी: 135772972
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

इस प्रोसेस में, एसिंक्रोनस (एक साथ काम नहीं करने वाली प्रोसेस) मेमोरी टैग की जांच करने की सुविधा चालू करें. इस फ़्लैग का असर सिर्फ़ उन हार्डवेयर पर पड़ता है जो ARM मेमोरी टैगिंग एक्सटेंशन (एमटीई) के साथ काम करते हैं.

NATIVE_MEMTAG_SYNC

चेंज आईडी: 177438394
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

इस प्रोसेस में, सिंक्रोनस (सिंक में काम करने वाली प्रोसेस) मेमोरी टैग की जांच करने की सुविधा चालू करता है. इस फ़्लैग का असर सिर्फ़ उन हार्डवेयर पर पड़ता है जो ARM मेमोरी टैगिंग एक्सटेंशन (एमटीई) के साथ काम करते हैं. अगर NATIVE_MEMTAG_ASYNC और यह विकल्प, दोनों चालू हैं, तो इस विकल्प को प्राथमिकता दी जाती है. साथ ही, MTE को सिंक मोड में चालू किया जाता है.

NEVER_SANDBOX_DISPLAY_APIS

चेंज आईडी: 184838306
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

चालू होने पर, Display API सैंडबॉक्सिंग को लेटरबॉक्स या एससीएम गतिविधि पर लागू होने से रोकता है. Display API, DisplayArea की सीमाओं की जानकारी देते रहेंगे.

इस बदलाव के बारे में ज़्यादा जानने के लिए, Android 12 के व्यवहार में हुए बदलावों के बारे में जानकारी देने वाले पेज पर जाएं. इसके बाद, डिसप्ले करने के ऐसे तरीके जो अब काम नहीं करते सेक्शन देखें.

NOTIFICATION_CANCELLATION_REASONS

चेंज आईडी: 175319604
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

इससे सूचना सुनने वाले लोगों को, सदस्यता रद्द करने की नई और ज़्यादा सटीक वजहों को समझने में मदद मिलती है.

NOTIFICATION_TRAMPOLINE_BLOCK

चेंज आईडी: 167676448
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

ऐप्लिकेशन की परफ़ॉर्मेंस और उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, Android 12 को टारगेट करने वाले ऐप्लिकेशन, सेवाओं या ब्रॉडकास्ट रिसीवर का इस्तेमाल सूचना ट्रैंपोलीन के तौर पर नहीं कर सकते.

इस बदलाव के बारे में ज़्यादा जानने के लिए, सेवाओं या ब्रॉडकास्ट रिसीवर से सूचना ट्रैंपोलीन नहीं बनाए जा सकते लेख पढ़ें.

NULL_TELEPHONY_THROW_NO_CB

चेंज आईडी: 182185642
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

इसका इस्तेमाल यह देखने के लिए किया जाता है कि मौजूदा प्रोसेस के लिए टारगेट एसडीके वर्शन, Android 12 (एपीआई लेवल 31) या इसके बाद का वर्शन है या नहीं.

यह इन तरीकों पर लागू होता है:

OVERRIDE_MIN_ASPECT_RATIO

चेंज आईडी: 174042980
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

यह बदलाव, उन सभी बदलावों को कंट्रोल करता है जिनके लिए कम से कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) तय करना ज़रूरी होता है. इस बदलाव को चालू करने पर, ये कम से कम आसपेक्ट रेशियो लागू किए जा सकते हैं:

किसी ऐप्लिकेशन पैकेज के लिए इस बदलाव को चालू करने पर, ऐप्लिकेशन के मेनिफ़ेस्ट में दिए गए कम से कम आसपेक्ट रेशियो को सबसे बड़े आसपेक्ट रेशियो से बदल दिया जाता है. ऐसा तब तक होता है, जब तक ऐप्लिकेशन के मेनिफ़ेस्ट में दी गई आसपेक्ट रेशियो की वैल्यू ज़्यादा न हो.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

चेंज आईडी: 180326787
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

जब OVERRIDE_MIN_ASPECT_RATIO भी चालू होता है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, गतिविधि का कम से कम आसपेक्ट रेशियो OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE के हिसाब से तय की गई बड़ी वैल्यू पर सेट हो जाता है.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

चेंज आईडी: 180326845
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए बंद है.

जब OVERRIDE_MIN_ASPECT_RATIO भी चालू होता है, तो किसी पैकेज के लिए इस बदलाव को चालू करने पर, गतिविधि का कम से कम आसपेक्ट रेशियो OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE के हिसाब से तय की गई मीडियम वैल्यू पर सेट हो जाता है.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

चेंज आईडी: 160794467
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, आपको अपने ऐप्लिकेशन से बनाए गए हर PendingIntent ऑब्जेक्ट के लिए, म्यूटेबिलिटी की जानकारी देनी होगी. इस अतिरिक्त ज़रूरी शर्त से, आपके ऐप्लिकेशन की सुरक्षा बेहतर होती है.

इस बदलाव के बारे में ज़्यादा जानने के लिए, पेंडिंग इंटेंट में बदलाव किया जा सकता है या नहीं, यह बताना ज़रूरी है लेख पढ़ें.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

चेंज आईडी: 165573442
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले व्यवस्थापक ऐप्लिकेशन, DevicePolicyManager.setPasswordQuality(ComponentName, int) का इस्तेमाल नहीं कर सकते. ऐसा करके, DevicePolicyManager.getParentProfileInstance(ComponentName) को कॉल करके मिले DevicePolicyManager इंस्टेंस पर पासवर्ड की क्वालिटी सेट नहीं की जा सकती. इसके बजाय, उन्हें DevicePolicyManager.setRequiredPasswordComplexity(int) का इस्तेमाल करके, पूरे डिवाइस के लिए पासवर्ड से जुड़ी सामान्य शर्तें सेट करनी चाहिए.

RATE_LIMIT_TOASTS

चेंज आईडी: 174840628
डिफ़ॉल्ट स्थिति: इस बदलाव को टॉगल नहीं किया जा सकता. इसे सिर्फ़ कंपैटबिलिटी फ़्रेमवर्क लॉग करता है.

यह सेटिंग, Toast.show() कॉल की संख्या पर दर सीमा लागू करती है. इससे, कम समय में उपयोगकर्ता को बहुत ज़्यादा टोस्ट (पॉप-अप सूचनाएं) नहीं दिखाई देती. किसी तय समयसीमा में, अनुमति से ज़्यादा टोस्ट दिखाने पर, उन टोस्ट को खारिज कर दिया जाता है.

REQUIRE_EXACT_ALARM_PERMISSION

चेंज आईडी: 171306433
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, यह ज़रूरी है कि उनके पास Manifest.permission.SCHEDULE_EXACT_ALARM की अनुमति हो. इससे वे एग्ज़ैक्ट अलार्म सेट करने के लिए, किसी भी एपीआई का इस्तेमाल कर पाएंगे. जैसे, setExactAndAllowWhileIdle(int, long, PendingIntent) और setAlarmClock(AlarmClockInfo, PendingIntent).

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

चेंज आईडी: 182478738
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, TelephonyCallback.ActiveDataSubscriptionIdListener को कॉल करने के लिए, ऐप्लिकेशन के पास Manifest.permission.READ_PHONE_STATE की अनुमति होनी चाहिए.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

चेंज आईडी: 184323934
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, TelephonyCallback.CellInfoListener को कॉल करने के लिए, ऐप्लिकेशन के पास Manifest.permission.READ_PHONE_STATE की अनुमति होनी चाहिए.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

चेंज आईडी: 183164979
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, TelephonyCallback.DisplayInfoListener को कॉल करने के लिए, ऐप्लिकेशन के पास Manifest.permission.READ_PHONE_STATE की अनुमति होनी चाहिए.

RESTRICT_ADB_BACKUP

चेंज आईडी: 171032338
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, adb backup अपने-आप चालू हो जाता है. ऐसा उन ऐप्लिकेशन के लिए होता है जो डीबग करने लायक (android:debuggable को true पर सेट किया गया है) के तौर पर काम करते हैं. साथ ही, यह सुविधा किसी अन्य ऐप्लिकेशन के लिए उपलब्ध नहीं होती.

RESTRICT_DOMAINS

चेंज आईडी: 175408749
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, ऐप्लिकेशन लिंक की पुष्टि करने वाले एपीआई का अपडेट किया गया वर्शन ज़रूरी है. इस ज़रूरी शर्त का मतलब है कि किसी ऐप्लिकेशन को इंटेंट फ़िल्टर में डोमेन का एलान करना होगा. इसमें ये सभी चीज़ें शामिल होनी चाहिए:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • सिर्फ़ IntentFilter.SCHEME_HTTP और/या IntentFilter.SCHEME_HTTPS, कोई अन्य स्कीम नहीं

Android के पिछले वर्शन पर, Intent.CATEGORY_BROWSABLE ज़रूरी नहीं था. अन्य स्कीम इस्तेमाल करने की अनुमति थी. साथ ही, किसी भी इंटेंट फ़िल्टर में autoVerify को true पर सेट करने से, यह माना जाता था कि सभी इंटेंट फ़िल्टर, autoVerify="true" पर सेट हैं.

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

चेंज आईडी: 151105954
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, यह ज़रूरी है कि noteOp(String, int, String), noteProxyOp(String, String), और startOp(String, int, String) को भेजे गए सभी attributionTags, उस पैकेज के मेनिफ़ेस्ट में तय किए गए हों जिसे तरीकों के पैरामीटर के तौर पर बताया गया है.

इस बदलाव को चालू करने के लिए, noteOp(String, int, String) को कॉल करने वाले पैकेज और तरीके के पैरामीटर के तौर पर बताए गए पैकेज, दोनों के लिए यह बदलाव चालू होना चाहिए.

SELINUX_LATEST_CHANGES

चेंज आईडी: 143539591
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, SELinux में किए गए नए बदलावों को ऑप्ट इन करता है. Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, इस बदलाव को बंद करने से कोई असर नहीं पड़ता. शेयर किए गए यूज़र आईडी का इस्तेमाल करने वाले ऐप्लिकेशन पर भी इसका कोई असर नहीं पड़ता.

SETTINGS_API_V2

चेंज आईडी: 178111421
डिफ़ॉल्ट स्थिति: सभी ऐप्लिकेशन के लिए चालू है.

AndroidManifest.xml इंटेंट फ़िल्टर में autoVerify=true के तौर पर मार्क किए गए डोमेन की पुष्टि करने के लिए, उपयोगकर्ता की प्राथमिकता वाला नया एपीआई, मौजूदा प्लैटफ़ॉर्म की झलक में अब तक लागू नहीं किया गया है. फ़िलहाल, उपयोगकर्ता की पसंद में किए गए नए बदलावों की झलक देखी जा सकती है. इसके लिए, ChangeId को चालू करें और adb shell pm set-app-links-user-selection और मिलते-जुलते निर्देशों का इस्तेमाल करें.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

चेंज आईडी: 183972877
डिफ़ॉल्ट स्थिति: यह सुविधा उन ऐप्लिकेशन के लिए चालू है जो Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करते हैं.

Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, यह तय करता है कि ऐप्लिकेशन के फ़ोरग्राउंड सेवा शुरू करने पर, स्टैंडबाय बकेट को ACTIVE पर सेट करने से पहले, कम समयसीमा का इस्तेमाल करना है या नहीं.