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

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

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

यहां कुछ ऐसे काम दिए गए हैं जो कंपैटिबिलिटी फ़्रेमवर्क टूल का इस्तेमाल करके किए जा सकते हैं:

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

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

कंपैटबिलिटी फ़्रेमवर्क में शामिल व्यवहार से जुड़े बदलाव

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

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

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

ALWAYS_SANDBOX_DISPLAY_APIS

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

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

इस बदलाव के बारे में ज़्यादा जानने के लिए, 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 अनुमति न होने पर, SecurityException थ्रो किया जाता है. ऐसा तब होता है, जब ऐप्लिकेशन डीबग मोड में चलता है और 200 हर्ट्ज़ से ज़्यादा की दर पर सैंपलिंग का अनुरोध करता है.HIGH_SAMPLING_RATE_SENSORS

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) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन को, सार्वजनिक नेटिव शेयर की गई लाइब्रेरी के लिए डिपेंडेंसी का एलान करना होगा. ये लाइब्रेरी, डिवाइस बनाने वाली कंपनी ने uses-native-library टैग का इस्तेमाल करके AndroidManifest.xml में तय की हैं. अगर कोई डिपेंडेंसी पूरी नहीं होती है, तो पैकेज मैनेजर ऐप्लिकेशन को इंस्टॉल नहीं करेगा. उदाहरण के लिए, अगर कोई डिपेंडेंसी मौजूद नहीं है, तो पैकेज मैनेजर ऐप्लिकेशन को इंस्टॉल नहीं करेगा. टैग में 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) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, डिवाइस के InputConnection होने पर non-interactive पूरा करें.

अगर मौजूदा 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) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, डिवाइस-से-डिवाइस (D2D) माइग्रेशन के दौरान android:allowBackup को अनदेखा कर दिया जाता है.

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

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

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

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) और उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, BACKUP की अनुमति, BackupManager में क्लाइंट-साइड के बजाय सर्विस-साइड पर लागू की जाती है.isBackupServiceActive()

KEYSTORE_OPERATION_CREATION_MAY_FAIL

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

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

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

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

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

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

NATIVE_MEMTAG_SYNC

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

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

NEVER_SANDBOX_DISPLAY_APIS

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

इस सेटिंग के चालू होने पर, डिसप्ले एपीआई सैंडबॉक्सिंग को लेटरबॉक्स या एससीएम गतिविधि पर लागू होने से रोका जाता है. डिसप्ले एपीआई, 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.setPasswordQuality(ComponentName, int) का इस्तेमाल नहीं किया जा सकता. इसके बजाय, उन्हें 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) और उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, Manifest.permission.READ_PHONE_STATE को कॉल करने के लिए, ऐप्लिकेशन के पास Manifest.permission.READ_PHONE_STATE अनुमति होनी चाहिए.TelephonyCallback.ActiveDataSubscriptionIdListener

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

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

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

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

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

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

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) और इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, यह नियम लागू होता है. इसके तहत, यह ज़रूरी है कि attributionTags को noteOp(String, int, String), noteProxyOp(String, String), और startOp(String, int, String) में भेजा जाए. साथ ही, इन्हें पैकेज के मेनिफ़ेस्ट में तय किया गया हो. इस पैकेज को, तरीकों के पैरामीटर के तौर पर तय किया गया है.

इस बदलाव को लागू करने के लिए, 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 में अपग्रेड करने से पहले, कम समय वाला टाइम आउट इस्तेमाल करना है या नहीं.