पेश है Android 17

13 मिनट में पढ़ा जा सकता है
मैथ्यू मैककलो की प्रोफ़ाइल देखें
Matthew McCullough वाइस प्रेसिडेंट, प्रॉडक्ट मैनेजमेंट, Android डेवलपर

आज हम Android 17 को रिलीज़ कर रहे हैं. यह सुविधा, Android 17 के साथ काम करने वाले ज़्यादातर Pixel डिवाइसों पर उपलब्ध होगी. आने वाले महीनों में, Android 17 पर काम करने वाले नए डिवाइसों के बारे में जानें.

AfD-Android-17.gif

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

पिछले एक साल में, हमने डेवलपर कम्यूनिटी के कई लोगों के साथ मिलकर काम किया है. हमने Canary चैनल से लेकर बीटा रिलीज़ तक, आपके साथ मिलकर एक ऐसा प्लैटफ़ॉर्म बनाया है जिस पर आप और आपके उपयोगकर्ता भरोसा कर सकें. इसलिए, इस समय Android ओपन सोर्स प्रोजेक्ट (AOSP) पर सोर्स कोड उपलब्ध है. इससे आपको Android के काम करने के तरीके के बारे में ज़्यादा जानकारी मिलती है. इसके लिए, सोर्स कोड की जांच की जा सकती है.

आइए, Android 17 के बारे में ज़्यादा जानें.

इंटेलिजेंस सिस्टम

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

Jetpack लाइब्रेरी, फ़िलहाल ऐल्फ़ा वर्शन में है. इसकी मदद से, AppFunctions को क्लास में एनोटेट करने और KDoc टिप्पणियां जोड़ने की तरह ही आसानी से जोड़ा जा सकता है. 

/**
 *   A note app's [AppFunction]s.
 */
class NoteFunctions(
    private val noteRepository: NoteRepository
) {
    /**
     *   Adds a new note to the app.
     *
     *   @param appFunctionContext The execution context.
     *   @param title The title of the note.
     *   @param content The note's content.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun createNote(
        appFunctionContext: AppFunctionContext,
        title: String,
        content: String
    ): Note {
        return noteRepository.createNote(title, content)
    }
}

हमने AppFunctions एजेंट स्किल भी लॉन्च की है. यह आपके ऐप्लिकेशन के मुख्य वर्कफ़्लो का विश्लेषण करती है, ज़रूरी Kotlin कोड अपने-आप जनरेट करती है, एलएलएम टूल-कॉलिंग के लिए आपके KDocs को ऑप्टिमाइज़ करती है, और टेस्टिंग और डीबग करने के लिए ADB कमांड उपलब्ध कराती है.

फ़िलहाल, Gemini इंटिग्रेशन की सुविधा भरोसेमंद टेस्टर के लिए उपलब्ध है. हालाँकि, अब अपने ऐप्लिकेशन तैयार किए जा सकते हैं. AppFunctions को लागू करने के लिए, ADB कमांड के अलावा, हमने एक टेस्ट एजेंट ऐप्लिकेशन उपलब्ध कराया है. इसमें AppFunctions को खोजने और लागू करने के लिए एक इंटरफ़ेस शामिल है. साथ ही, इसमें एआई एजेंट इंटिग्रेशन को सिम्युलेट करने की सुविधा भी है. इंटिग्रेशन के लिए, रिलीज़ होने से पहले इस्तेमाल करने का ऐक्सेस देने वाले हमारे कार्यक्रम में शामिल हों. इसके लिए, goo.gle/eap-af पर जाएं. इससे आपको उन ऐप्लिकेशन में शामिल होने का मौका मिलेगा जो प्रोडक्शन के लिए AppFunctions को सबसे पहले डिप्लॉय करेंगे.

अडैप्टिव-फ़र्स्ट

आपके उपयोगकर्ता अब सिर्फ़ एक तरह के डिवाइस का इस्तेमाल नहीं करते. वे फ़ोन, फ़ोल्ड किए जा सकने वाले डिवाइस, टैबलेट, लैपटॉप, कार में लगे डिसप्ले, और इमर्सिव XR एनवायरमेंट के बीच स्विच करते हैं. अब उपयोगकर्ताओं के पास 58 करोड़ से ज़्यादा बड़ी स्क्रीन वाले डिवाइस हैं. साथ ही, Googlebooks जल्द ही लॉन्च होने वाला है. Android स्टैक पर बनाया गया ChromeOS का नया वर्शन, अब सिर्फ़ एक तकनीकी लक्ष्य नहीं है. इससे, ऐप्लिकेशन में दिलचस्पी दिखाने वाले ज़्यादा से ज़्यादा लोगों तक पहुंचा जा सकता है. यही वजह है कि हम ऐडैप्टिव-फ़र्स्ट डेवलपमेंट स्टैंडर्ड पर स्विच कर रहे हैं.

बड़ी स्क्रीन पर, साइज़ बदलने/ओरिएंटेशन से जुड़ी कोई पाबंदी नहीं है

यह पक्का करने के लिए कि ऐप्लिकेशन, सभी डिवाइसों पर बेहतरीन अनुभव दें, Android 17 (एपीआई लेवल 37) ने डेवलपर के लिए, बड़ी स्क्रीन वाले डिवाइसों (sw > 600 dp) पर ओरिएंटेशन और साइज़ बदलने से जुड़ी पाबंदियों को ऑप्ट-आउट करने की सुविधा हटा दी है. यह सुविधा, एपीआई लेवल 37 को टारगेट करने वाले ऐप्लिकेशन के लिए हटाई गई है. इसमें कनेक्ट किए गए डिसप्ले पर डेस्कटॉप मोड में चल रहे मोबाइल डिवाइस भी शामिल हैं. सिस्टम, लेगसी मेनिफ़ेस्ट एट्रिब्यूट और रनटाइम एपीआई को अनदेखा करेगा. इनमें screenOrientationsetRequestedOrientation()resizeableActivity=false, और आसपेक्ट रेशियो की सीमाएं (minAspectRatio/maxAspectRatio) शामिल हैं. गेम (Google Play में ऐप्लिकेशन की कैटगरी के आधार पर) को इस नियम से छूट मिली हुई है. आपका ऐप्लिकेशन, विंडो के किसी भी साइज़ के हिसाब से काम करने के लिए तैयार होना चाहिए. साथ ही, उपयोगकर्ता के डिवाइस के पसंदीदा पोस्चर का पालन करना चाहिए. इसके अलावा, इसमें फ़्री-फ़ॉर्म विंडो मोड की सुविधा होनी चाहिए.

अगली जनरेशन की मल्टीटास्किंग: ऐप्लिकेशन बबल, बबल बार, और डेस्कटॉप पर इंटरैक्टिव पीआईपी

Android 17 में, विंडो को मैनेज करने की नई सुविधाएं जोड़ी गई हैं. इनसे उपयोगकर्ताओं को मल्टीटास्किंग करने में मदद मिलती है. साथ ही, आपके ऐप्लिकेशन के लेआउट को ज़्यादा बेहतर बनाया जा सकता है:

  • ऐप्लिकेशन बबल: मैसेजिंग बबल एपीआई से आगे बढ़ते हुए, अब उपयोगकर्ता किसी भी ऐप्लिकेशन को फ़्लोटिंग बबल में बदल सकते हैं. इसके लिए, उन्हें लॉन्चर पर मौजूद ऐप्लिकेशन के आइकॉन को दबाकर रखना होगा. यह सुविधा फ़ोन, फ़ोल्ड किए जा सकने वाले डिवाइसों, और टैबलेट पर उपलब्ध है. इससे किसी भी वर्कफ़्लो के लिए, आसानी से एक साथ कई काम किए जा सकते हैं.
  • बबल बार: बड़ी स्क्रीन (टैबलेट और फ़ोल्ड किए जा सकने वाले डिवाइसों) पर, सिस्टम टास्कबार में अब एक खास बबल बार शामिल है. इसकी मदद से, फ़्लोटिंग ऐप्लिकेशन बबल को व्यवस्थित किया जा सकता है, उनके बीच स्विच किया जा सकता है, और उन्हें डॉक किया जा सकता है.
  • डेस्कटॉप पर इंटरैक्टिव पीआईपी: डेस्कटॉप एनवायरमेंट में, Android 17 में इंटरैक्टिव पिक्चर में पिक्चर (पीआईपी) की सुविधा जोड़ी गई है. आम तौर पर, पीआईपी विंडो सिर्फ़ देखी जा सकती हैं. हालांकि, पिन की गई इन विंडो के साथ पूरी तरह से इंटरैक्ट किया जा सकता है. साथ ही, ये हमेशा अन्य ऐप्लिकेशन विंडो के ऊपर दिखती हैं.
Bubbles (1).gif
ऐप्लिकेशन बबल्स और बबल बार का इस्तेमाल

गतिविधि के रीक्रिएशन से जुड़े अपडेट

स्टेट के अचानक गायब होने और अटकने की समस्या को रोकने के लिए, Android 17 में Activity को फिर से बनाने के डिफ़ॉल्ट तरीके को अपडेट किया गया है. सिस्टम, कॉन्फ़िगरेशन में होने वाले सामान्य बदलावों के लिए, अब डिफ़ॉल्ट रूप से गतिविधियों को फिर से शुरू नहीं करेगा. इन बदलावों के लिए, पूरे यूज़र इंटरफ़ेस (यूआई) को फिर से रेंडर करने की ज़रूरत नहीं होती. इनमें CONFIG_KEYBOARD, CONFIG_KEYBOARD_HIDDEN, CONFIG_NAVIGATION, CONFIG_TOUCHSCREEN, और CONFIG_COLOR_MODE शामिल हैं.

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

इस पर जारी रखें

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

Continue On.png
टैबलेट पर हैंडऑफ़ करने का सुझाव
class MyHandoffActivity : Activity() {

    ...

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // Do stuff
    ...
    // Enable handoff
    setHandoffEnabled(true, null)
  }

  // Override and implement onHandoffActivityDataRequested
  override fun onHandoffActivityDataRequested(handoffRequestInfo: HandoffActivityDataRequestInfo) : HandoffActivityData {
    // Create and return handoff data
  }
}

Jetpack Compose की मदद से, अडैप्टिव ऐप्लिकेशन बनाना

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

  • अडैप्टिव नेविगेशन: Material 3 अडैप्टिव लाइब्रेरी से NavigationSuiteScaffold का इस्तेमाल करके, मोबाइल पर सबसे नीचे मौजूद नेविगेशन बार और बड़ी स्क्रीन पर किनारे पर मौजूद नेविगेशन रेल के बीच अपने-आप ट्रांज़िशन करें.
  • एक से ज़्यादा पैनल वाले लेआउट: फ़्रैगमेंट ट्रांज़ैक्शन के बजाय, नेविगेशन 3 सीन (ListDetailSceneStrategy और SupportingPaneSceneStrategy) का इस्तेमाल करके, सूची की जानकारी और साथ में दिखने वाले पैनल के लेआउट को नेटिव तौर पर लागू करें.
  • FlexBox और Grid API: Compose 1.11 के डाइनैमिक लेआउट कॉम्पोनेंट का इस्तेमाल करें. इससे, रीयल टाइम में लाइन और कॉलम के स्पैन को आसानी से अडजस्ट किया जा सकता है. साथ ही, यह पक्का किया जा सकता है कि आपका कॉन्टेंट हमेशा स्क्रीन पर सही तरीके से दिखे.
  • बिना टच किए इनपुट देने की ऐडवांस सुविधा: Compose 1.11 में ट्रैकपैड और माउस के लिए बेहतर सपोर्ट उपलब्ध है. इसका फ़ायदा लें. इसमें नेटिव फ़ोकस रिंग और नए एपीआई (जैसे, TrackpadInjectionScope और performTrackpadInput) शामिल हैं. इनकी मदद से, Googlebooks और डेस्कटॉप मोड पर "लैपटॉप-क्लास" अनुभव को आसानी से टेस्ट किया जा सकता है और डिलीवर किया जा सकता है.
  • विंडो की डाइनैमिक स्थितियां: Compose के रिएक्टिव स्टेट मॉडल का इस्तेमाल करें. इससे, ऐप्लिकेशन के फ़ुल स्क्रीन से फ़्लोटिंग ऐप्लिकेशन बबल या इंटरैक्टिव डेस्कटॉप PiP विंडो में स्विच होने पर, आपके यूज़र इंटरफ़ेस (यूआई) में बिना किसी रुकावट के बदलाव हो सकेगा. इससे कम से कम डाइमेंशन पर भी बेहतरीन अनुभव मिलेगा.

Android में Compose को प्राथमिकता दी जाती है

Compose, अडैप्टिव ऐप्लिकेशन बनाने का सबसे आसान तरीका है. यह कई वजहों में से सिर्फ़ एक वजह है कि हम मानते हैं कि Android के सभी यूज़र इंटरफ़ेस (यूआई) को Compose की मदद से बनाया जाना चाहिए. इसलिए, Android डेवलपमेंट के लिए अब Compose का इस्तेमाल मुख्य तौर पर किया जाता है. Android के सभी नए एपीआई, लाइब्रेरी, टूल, और डेवलपर गाइड सिर्फ़ Jetpack Compose के लिए बनाए जाएंगे. android.widget पैकेज में मौजूद लेगसी व्यू कॉम्पोनेंट और व्यू पर आधारित Jetpack लाइब्रेरी (जैसे, Fragments, RecyclerView, और ViewPager) अब रखरखाव मोड में हैं. उन्हें सिर्फ़ ज़रूरी गड़बड़ियों को ठीक करने वाले अपडेट मिलेंगे. साथ ही, उन्हें नई सुविधाएं नहीं मिलेंगी.


सलाह क्या आपको माइग्रेट करना है? हमारे एआई की मदद से काम करने वाले XML से Compose में माइग्रेट करने की सुविधा का इस्तेमाल करें. इससे आपके लेगसी व्यू लेआउट का अपने-आप विश्लेषण हो जाएगा और उन्हें Compose के अडैप्टिव कोड में बदल दिया जाएगा.


परफ़ॉर्मेंस और क्षमता

ऐप्लिकेशन की परफ़ॉर्मेंस का मतलब है कि ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) आसानी से इस्तेमाल किया जा सके, ऐप्लिकेशन तेज़ी से शुरू हो, और एक साथ कई काम आसानी से किए जा सकें. Android 17 में इन सभी पहलुओं में काफ़ी सुधार किया गया है. 

ऐप्लिकेशन के लिए मेमोरी की सीमाएं

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

Android 17 से, सिस्टम डिवाइस की कुल रैम के आधार पर, ऐप्लिकेशन के लिए मेमोरी की सीमाएं तय करेगा. साथ ही, उल्लंघन करने वाली प्रोसेस को अचानक बंद कर देगा. इन ज़रूरी शर्तों को पूरा करने में आपकी मदद करने के लिए, नई सुविधाएँ:

  • R8 ऑप्टिमाइज़र:  R8 ऑप्टिमाइज़र, क्लास, मेथड, और फ़ील्ड के नामों को छोटा करके, आपके ऐप्लिकेशन के बाइटकोड मेमोरी फ़ुटप्रिंट को काफ़ी कम कर देता है. साथ ही, यह इस्तेमाल न होने वाले कोड और संसाधनों को हटा देता है. R8 कॉन्फ़िगरेशन ऐनलिसिस टूल के साथ-साथ, R8 को फ़ुल मोड में इस्तेमाल करें. इससे यह पक्का किया जा सकेगा कि आपके ऐप्लिकेशन को R8 का ज़्यादा से ज़्यादा फ़ायदा मिल रहा है.
R8 Configuration Analyzer.png
R8 कॉन्फ़िगरेशन ऐनललाइज़र
  • Android Studio Panda में LeakCanary: प्रोफ़ाइलर में अब LeakCanary को एक खास टास्क के तौर पर इंटिग्रेट किया गया है. यह आपके आईडीई और सोर्स कोड के साथ पूरी तरह से इंटिग्रेट हो गया है.
  • ApplicationExitInfo: अगर इन सीमाओं की वजह से आपका ऐप्लिकेशन बंद हो जाता है, तो ApplicationExitInfo से getDescription() "MemoryLimiter:AnonSwap" दिखाएगा.
  • डिवाइस पर गड़बड़ी की पहचान करना: यह ProfilingManager का हिस्सा है. इसमें TRIGGER_TYPE_ANOMALY का इस्तेमाल करके, ट्रिगर पर आधारित प्रोफ़ाइलिंग की सुविधा का फ़ायदा उठाया जा सकता है. इससे मेमोरी की सीमा पूरी होने पर, हीप डंप अपने-आप कैप्चर हो जाते हैं.
val profilingManager = applicationContext
   .getSystemService(ProfilingManager::class.java)

val triggers = ArrayList<ProfilingTrigger>().apply {
  add(ProfilingTrigger.Builder(
    ProfilingTrigger.TRIGGER_TYPE_ANOMALY).build())
}
profilingManager.addProfilingTriggers(triggers)

साथ ही, हम Google Play Console में आपको फ़ील्ड में मौजूद मेमोरी की ज़्यादा मेट्रिक दिखाने के लिए काम कर रहे हैं.

जनरेशनल गारबेज कलेक्शन

Android 17, ART के Concurrent Mark-Compact गार्बेज कलेक्टर (GC) में, युवा पीढ़ी के कलेक्शन को ज़्यादा बार और कम संसाधनों का इस्तेमाल करके पेश करता है. कम समय तक इस्तेमाल होने वाले ऑब्जेक्ट को लंबे समय तक इस्तेमाल होने वाले ऑब्जेक्ट से अलग करके, सिस्टम बार-बार "यंग-जनरेशन" स्वीप करता है. यह फ़ुल-हीप स्कैन की तुलना में कम संसाधन इस्तेमाल करता है. इससे सीपीयू का इस्तेमाल, बैटरी खत्म होने की दर, और यूज़र इंटरफ़ेस (यूआई) में होने वाली रुकावटें काफ़ी कम हो जाती हैं. हमारी जांच में यह पता चला है कि ऐप्लिकेशन थ्रेड के साथ जीसी के इंटरफ़ेरंस में काफ़ी सुधार हुआ है. साथ ही, मेमोरी में मौजूद सेट साइज़ (आरएसएस) में कमी आई है. Google Play सिस्टम अपडेट के ज़रिए, ART में किए गए सुधारों को Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर काम करने वाले एक अरब से ज़्यादा डिवाइसों पर भी उपलब्ध कराया गया है.

Lock-Free MessageQueue

SDK 37 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, कोर android.os.MessageQueue अब लॉक-फ़्री आर्किटेक्चर लागू करता है. इससे छूटे हुए फ़्रेम की संख्या में काफ़ी कमी आती है. साथ ही, ऐप्लिकेशन के खुलने में लगने वाला समय कम होता है. इसके अलावा, मल्टीथ्रेडिंग के मामलों में व्यस्त कतारों की परफ़ॉर्मेंस में काफ़ी सुधार होता है. ध्यान दें: इससे उन ऐप्लिकेशन में समस्याएं आ सकती हैं जो प्राइवेट MessageQueue फ़ील्ड और तरीकों पर रिफ़्लेक्शन का इस्तेमाल करते हैं.  peekWhen और poll एपीआई को TestLooperManager में जोड़ा गया है, ताकि MessageQueue के इंटरनल पर भरोसा किए बिना इंस्ट्रुमेंटेशन टेस्टिंग की जा सके. 

स्टैटिक फ़ाइनल फ़ील्ड अब वाकई फ़ाइनल हैं

Android 17 से, SDK 37 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन, “static final” फ़ील्ड में बदलाव नहीं कर पाएंगे. इससे रनटाइम को परफ़ॉर्मेंस ऑप्टिमाइज़ेशन को ज़्यादा बेहतर तरीके से लागू करने की अनुमति मिलेगी. ऐसा रिफ़्लेक्शन (या डीप रिफ़्लेक्शन) के ज़रिए करने पर, IllegalAccessException थ्रो हो जाएगा. 

JNI के SetStatic<Type>Field तरीकों के फ़ैमिली ग्रुप का इस्तेमाल करके, उनमें बदलाव करने पर ऐप्लिकेशन तुरंत क्रैश हो जाएगा.

कस्टम सूचनाओं को देखने से जुड़ी पाबंदियां

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

गोपनीयता और सुरक्षा

Android ईकोसिस्टम में, उपयोगकर्ताओं का भरोसा बनाए रखना सबसे अहम है. Android 17 में, संवेदनशील डेटा को सुरक्षित रखने वाली बेहतरीन सुविधाएं जोड़ी गई हैं. साथ ही, उपयोगकर्ता अनुभव को बेहतर बनाया गया है.

निजता बनाए रखने से जुड़े विकल्प

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

  • सिस्टम-लेवल कॉन्टैक्ट पिकर: ACTION_PICK_CONTACTS का इस्तेमाल करके, ऐप्लिकेशन सिर्फ़ उन फ़ील्ड का कुछ समय के लिए ऐक्सेस पाने का अनुरोध कर सकते हैं जिन्हें उपयोगकर्ता ने चुना है.जैसे, ईमेल या फ़ोन नंबर. इससे, READ_CONTACTS की अनुमति की ज़रूरत नहीं पड़ती. यह वर्क/निजी प्रोफ़ाइल को अलग-अलग रखने की सुविधा के साथ भी काम करता है.
  • फ़ोटो पिकर के आसपेक्ट रेशियो को पसंद के मुताबिक बनाया जा सकता है: PhotoPickerUiCustomizationParams का इस्तेमाल करके, सिस्टम फ़ोटो पिकर को पसंद के मुताबिक बनाया जा सकता है, ताकि पोर्ट्रेट मोड में थंबनेल दिखाए जा सकें. यह उन ऐप्लिकेशन के लिए सबसे सही है जो हमेशा पोर्ट्रेट मोड में फ़ोटो और वीडियो दिखाते हैं. जैसे, वीडियो पर आधारित सोशल मीडिया ऐप्लिकेशन.
  • सिस्टम से रेंडर किया गया लोकेशन बटन: सिस्टम से रेंडर किया गया एक नया लोकेशन बटन, जिसे अपने ऐप्लिकेशन में एम्बेड किया जा सकता है. इससे सिर्फ़ मौजूदा सेशन के लिए जगह की सटीक जानकारी ऐक्सेस करने की अनुमति मिलती है.
  • EyeDropper API: सिस्टम लेवल पर काम करने वाला नया एपीआई, ACTION_OPEN_EYE_DROPPER, आपके ऐप्लिकेशन को सिस्टम की मदद से आईड्रॉपर बनाने की सुविधा देता है. इससे उपयोगकर्ता, डिसप्ले पर मौजूद किसी भी पिक्सल से रंग चुन सकता है. इससे, रंग चुनने का सुरक्षित और निजता बनाए रखने वाला अनुभव मिलता है. साथ ही, स्क्रीन कैप्चर करने या मीडिया प्रोजेक्शन की संवेदनशील अनुमतियों की ज़रूरत नहीं पड़ती.
val eyeDropperLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
   if (result.resultCode == Activity.RESULT_OK) {
       val color = result.data?.getIntExtra(Intent.EXTRA_COLOR, Color.BLACK)
       // Use the picked color in your app
   }
}
fun launchColorPicker() {
   val intent = Intent(Intent.ACTION_OPEN_EYE_DROPPER)
   eyeDropperLauncher.launch(intent)
}
Eyedropper Tester.webp
सिस्टम के EyeDropper की मदद से, स्क्रीन पर मौजूद किसी भी रंग को चुनना

स्थानीय नेटवर्क एक्सेस

Android 17 को टारगेट करने वाले ऐप्लिकेशन को अब लोकल नेटवर्क पर कम्यूनिकेट करने के लिए, ACCESS_LOCAL_NETWORK रनटाइम अनुमति की ज़रूरत होती है. इसके अलावा, वे निजता बनाए रखने वाले सिस्टम-मीडिएटेड डिवाइस पिकर का इस्तेमाल कर सकते हैं. जैसे, स्मार्ट होम डिवाइसों से बात करना या कास्टिंग रिसीवर. ACCESS_LOCAL_NETWORK, मौजूदा NEARBY_DEVICES अनुमतियों का समूह के तहत आता है. इसलिए, जिन उपयोगकर्ताओं ने पहले ही अन्य NEARBY_DEVICES अनुमतियां दी हैं उन्हें फिर से प्रॉम्प्ट नहीं किया जाएगा.

एसएमएस से मिलने वाले ओटीपी की सुरक्षा

Android 17 में, एसएमएस से मिले एक बार इस्तेमाल होने वाले पासवर्ड (ओटीपी) को ज़्यादा सुरक्षित बनाया गया है. इसके तहत, एसएमएस को तीन घंटे तक ऐक्सेस नहीं किया जा सकेगा:

छूट: डिफ़ॉल्ट मैसेज (एसएमएस), Assistant, और कनेक्ट किए गए कंपैनियन ऐप्लिकेशन को छूट दी गई है. हमारा सुझाव है कि ऐप्लिकेशन, SMS Retriever या SMS User Consent API पर माइग्रेट करें.

पोस्ट-क्वांटम क्रिप्टोग्राफ़ी (पीक्यूसी)

Android 17, क्रिप्टोग्राफ़िक सुरक्षा की अगली पीढ़ी के लिए तैयार है:

  • कीस्टोर इंटिग्रेशन: जिन डिवाइसों पर यह सुविधा काम करती है वे सुरक्षित हार्डवेयर में एमएल-डीएसए (मॉड्यूल-लैटिस-आधारित डिजिटल सिग्नेचर एल्गोरिदम) कुंजियां जनरेट कर सकते हैं. इससे क्वांटम-सेफ़ सिग्नेचर जनरेट किए जा सकते हैं. ये सिग्नेचर, स्टैंडर्ड जेसीए एपीआई के ज़रिए उपलब्ध कराए जाते हैं.
  • हाइब्रिड APK साइनिंग: हम v3.2 APK सिग्नेचर स्कीम लॉन्च कर रहे हैं. इसमें ऐप्लिकेशन को सुरक्षित तरीके से डिलीवर करने के लिए, क्लासिकल सिग्नेचर के साथ एमएल-डीएसए सिग्नेचर का इस्तेमाल किया जाता है.

नेटिव डाइनैमिक कोड लोडिंग की बेहतर सुरक्षा

अगर आपका ऐप्लिकेशन, एसडीके 37 या इसके बाद के वर्शन को टारगेट करता है, तो DEX और JAR फ़ाइलों के लिए, Android 14 में पेश की गई ज़्यादा सुरक्षित डाइनैमिक कोड लोडिंग (डीसीएल) की सुविधा, अब नेटिव लाइब्रेरी के लिए भी उपलब्ध है. System.load का इस्तेमाल करके लोड की गई सभी नेटिव फ़ाइलों को रीड-ओनली के तौर पर मार्क किया जाना चाहिए. ऐसा न होने पर, सिस्टम UnsatisfiedLinkError दिखाता है.

फ़िज़िकल इनपुट के लिए, पासवर्ड की बेहतर सुरक्षा

Android 17 में, हम फ़िज़िकल कीबोर्ड का इस्तेमाल करते समय पासवर्ड, पिन, और अन्य सीक्रेट जानकारी डालने की सुविधा को ज़्यादा सुरक्षित बना रहे हैं. इसके लिए, हम डिफ़ॉल्ट रूप से टाइप किए गए आखिरी वर्ण को नहीं दिखाएंगे.

उपयोगकर्ता अब भी अपनी पसंद के मुताबिक, डिसप्ले सेटिंग को आसानी से पसंद के मुताबिक बना सकते हैं. हालांकि, यह सुविधा डिवाइस बनाने वाली कंपनी के हिसाब से अलग-अलग हो सकती है.

निजता की सुरक्षा को बेहतर बनाने वाली ये सुविधाएं, Android के बिल्ट-इन एसडीके कॉम्पोनेंट के साथ अपने-आप काम करती हैं. साथ ही, ये SecureTextFields के लिए Compose 1.12 में काम करेंगी. 
 

Hide First Letter.gif
फ़िज़िकल कीबोर्ड से टाइप किए गए पासवर्ड को ज़्यादा सुरक्षित रखने की सुविधा

मीडिया और कैमरे से जुड़ी ऐसी सुविधाएं जो क्रिएटर्स को बेहतर कॉन्टेंट बनाने में मदद करती हैं और उपयोगकर्ताओं को पसंद आती हैं

Android 17 में, क्रिएटर्स के लिए नई सुविधाएं जोड़ी गई हैं. इनसे क्रिएटर्स को प्रो-क्वालिटी वाले कैमरे और मीडिया का ऐक्सेस मिलता है. साथ ही, इससे उपभोक्ताओं को बेहतर अनुभव मिलता है.

  • Eclipsa Video: यह एचडीआर वीडियो स्टैंडर्ड, SMPTE ST 2094-50 स्पेसिफ़िकेशन पर आधारित है. यह नया मेटाडेटा उपलब्ध कराता है, ताकि डिवाइसों को कॉन्टेंट को अपने डिसप्ले हेडरूम और ऐंबियंट लाइट के हिसाब से अडजस्ट करने में मदद मिल सके. साथ ही, स्टैंडर्ड और एचडीआर कॉन्टेंट को एक साथ बेहतर तरीके से डिसप्ले किया जा सके.
  • RAW14 इमेज फ़ॉर्मैट: RAW14 इमेज फ़ॉर्मैट के लिए नया सपोर्ट उपलब्ध है. इससे आपके प्रोफ़ेशनल कैमरा ऐप्लिकेशन को, साथ काम करने वाले कैमरा सेंसर से ज़्यादा से ज़्यादा जानकारी और कलर डेप्थ कैप्चर करने में मदद मिलती है.
  • वेंडर के तय किए गए कैमरा एक्सटेंशन: वेंडर के तय किए गए एक्सटेंशन की मदद से, हार्डवेयर पार्टनर कस्टम कैमरा एक्सटेंशन मोड तय और लागू कर सकते हैं. इससे उन्हें कैमरे की सबसे अच्छी और नई सुविधाओं का ऐक्सेस मिलता है.
  • Extended HE-AAC सॉफ़्टवेयर एन्कोडर: सिस्टम की ओर से उपलब्ध कराया गया नया Extended HE-AAC सॉफ़्टवेयर एन्कोडर. यह यूनिफ़ाइड स्पीच और ऑडियो कोडिंग का इस्तेमाल करके, कम और ज़्यादा बिटरेट, दोनों के साथ काम करता है. इससे कम बैंडविथ की स्थितियों में, वॉइस मैसेज की ऑडियो क्वालिटी काफ़ी बेहतर हो जाती है. इसमें लाउडनेस मेटाडेटा के लिए भी सहायता मिलती है.
  • वर्सटाइल वीडियो कोडिंग (H.266):  इससे ओईएम, कोडेक के लिए सहायता जोड़ सकते हैं. इसके लिए, उन्हें MediaFormat में video/vvc एमआईएमई टाइप को तय करना होगा. साथ ही, MediaCodecInfo में नई वीवीसी प्रोफ़ाइलें जोड़नी होंगी और MediaExtractor में सहायता को इंटिग्रेट करना होगा.
  • कैमरा डिवाइस टाइप: नए एपीआई, डिवाइस टाइप के बारे में क्वेरी करते हैं. इससे यह पता चलता है कि कैमरा, बिल्ट-इन हार्डवेयर है, बाहरी यूएसबी वेबकैम है या वर्चुअल कैमरा है.
  • वीडियो रिकॉर्डिंग के लिए कॉन्स्टेंट क्वालिटी:  MediaRecorder में setVideoEncodingQuality, वीडियो एनकोडर के लिए कॉन्स्टेंट क्वालिटी (सीक्यू) मोड कॉन्फ़िगर करता है. इससे यह पक्का किया जाता है कि पूरे वीडियो में विज़ुअल फ़िडेलिटी एक जैसी हो.

कान की मशीनों के लिए बेहतर सपोर्ट

  • ब्लूटूथ LE Audio के साथ काम करने वाली कान की मशीन के लिए सहायता: Android में अब ब्लूटूथ लो एनर्जी (बीएलई) ऑडियो के साथ काम करने वाली कान की मशीनों के लिए, एक खास डिवाइस कैटगरी शामिल है. इसमें नया AudioDeviceInfo.TYPE_BLE_HEARING_AID कॉन्स्टेंट शामिल है. इससे आपका ऐप्लिकेशन, कान की मशीनों को सामान्य हेडसेट से अलग पहचान सकता है. इससे सुनने में सहायता करने वाले डिवाइसों का इस्तेमाल करने वाले लोगों को बेहतर अनुभव मिल सकता है.
  • सुनने में मदद करने वाले डिवाइसों के लिए, ऑडियो को अलग-अलग डिवाइसों पर रूट करने की सुविधा: Android 17 में, उपयोगकर्ताओं को यह तय करने की सुविधा मिलती है कि सिस्टम की आवाज़ें किस डिवाइस पर सुनाई देंगी. वे सूचनाओं, रिंगटोन, और अलार्म को कनेक्ट की गई कान की मशीनों या डिवाइस के बिल्ट-इन स्पीकर पर रूट करने का विकल्प चुन सकते हैं. इससे कान की मशीनों के मैनेजमेंट ऐप्लिकेशन के लिए ब्लूटूथ कनेक्शन बनाए रखते हुए, कान में होने वाली अवांछित रुकावटों से बचा जा सकता है.

CameraX और Media3

Android 17 के लिए, CameraX और Media3 को अपडेट किया गया है. ये एपीआई, मीडिया डेवलपमेंट से जुड़ी मुश्किलों को दूर करने में मदद करते हैं. साथ ही, भरोसेमंद तरीके से कैमरा कैप्चर करने, आसानी से मीडिया चलाने, और क्रिएटिव और जटिल एडिटिंग के अनुभव को आसान बनाने में मदद करते हैं. 

हमने एक एजेंट स्किल लॉन्च की है. इसकी मदद से, लेगसी Android कैमरा इंप्लीमेंटेशन (Camera1 या रॉ Camera2 एपीआई) को CameraX पर माइग्रेट किया जा सकता है.  

ध्यान दें: Android 17 डिवाइसों पर, डाइनैमिक रेंज मोड जोड़ने से जुड़ी समस्या को ठीक करने के लिए, आपको CameraX को 1.5.2 या 1.6.0+ वर्शन पर अपडेट करना होगा.

अपने ऐप्लिकेशन, लाइब्रेरी, टूल, और गेम इंजन तैयार करें!

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

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

  • बड़ी स्क्रीन पर साइज़ बदलने की सुविधा: Android 17 (SDK 37) को टारगेट करने के बाद, आपके पास स्क्रीन की दिशा, साइज़ बदलने, और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदियों को बड़ी स्क्रीन पर लागू न करने का विकल्प नहीं होगा.
  • डाइनैमिक कोड लोडिंग: अगर आपका ऐप्लिकेशन एसडीके 37 या इसके बाद के वर्शन को टारगेट करता है, तो DEX और JAR फ़ाइलों के लिए, Android 14 में पेश की गई सुरक्षित डाइनैमिक कोड लोडिंग (डीसीएल) की सुविधा अब नेटिव लाइब्रेरी के लिए भी उपलब्ध है. System.load() का इस्तेमाल करके लोड की गई सभी नेटिव फ़ाइलों को रीड-ओनली के तौर पर मार्क किया जाना चाहिए. ऐसा न होने पर, सिस्टम UnsatisfiedLinkError दिखाता है.
  • सीटी को डिफ़ॉल्ट रूप से चालू करें: सर्टिफ़िकेट ट्रांसपैरेंसी (सीटी) डिफ़ॉल्ट रूप से चालू होती है. (Android 16 पर, सीटी की सुविधा उपलब्ध है. हालांकि, इसके लिए ऐप्लिकेशन को ऑप्ट इन करना होता है.)
  • लोकल नेटवर्क के ऐक्सेस से जुड़ी सुरक्षा: SDK 37 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, लोकल नेटवर्क का ऐक्सेस डिफ़ॉल्ट रूप से ब्लॉक होता है. अगर हो सके, तो निजता बनाए रखने वाले पिकर का इस्तेमाल करें. साथ ही, बड़े पैमाने पर और लगातार ऐक्सेस करने के लिए, नई ACCESS_LOCAL_NETWORK अनुमति का इस्तेमाल करें.
  • बैकग्राउंड में चलने वाले ऑडियो को सुरक्षित बनाना: Android 17 से, ऑडियो फ़्रेमवर्क बैकग्राउंड में चलने वाले ऑडियो के इंटरैक्शन पर पाबंदियां लागू करता है. इनमें ऑडियो चलाने, ऑडियो फ़ोकस के अनुरोध, और आवाज़ में बदलाव करने वाले एपीआई शामिल हैं. आपके सुझाव के आधार पर, हमने बीटा 2 के बाद से कुछ बदलाव किए हैं. इनमें, इस्तेमाल के दौरान टारगेटएसडीके गेटिंग, एफजीएस लागू करना, और अलार्म ऑडियो को छूट देना शामिल है. पूरी जानकारी, अपडेट किए गए दिशा-निर्देशों में उपलब्ध है.
  • एनपीयू के ऐक्सेस के बारे में जानकारी: Android 17 को टारगेट करने वाले जिन ऐप्लिकेशन को एनपीयू को सीधे तौर पर ऐक्सेस करना है उन्हें अपने मेनिफ़ेस्ट में  FEATURE_NEURAL_PROCESSING_UNIT के बारे में जानकारी देनी होगी. ऐसा न करने पर, उन्हें एनपीयू को ऐक्सेस करने से रोका जा सकता है. इसमें ऐसे ऐप्लिकेशन शामिल हैं जो LiteRT NPU डेलिगेट, वेंडर के हिसाब से SDK टूल, और बंद हो चुके NNAPI का इस्तेमाल करते हैं.

Android 17 का इस्तेमाल शुरू करना

अगर आपने Android Beta Program में पहले से रजिस्टर नहीं किया है, तो आपके Pixel डिवाइस पर Android 17 का अपडेट जल्द ही उपलब्ध होगा. अगर आपके पास Pixel डिवाइस नहीं है, तो Android Studio में Android Emulator के साथ 64-बिट सिस्टम इमेज का इस्तेमाल किया जा सकता है. अगर आपने Android 17 का बीटा 4.1 वर्शन इस्तेमाल किया है और अब तक Android 17 QPR1 का बीटा वर्शन इस्तेमाल नहीं किया है, तो प्रोग्राम से ऑप्ट आउट किया जा सकता है. इसके बाद, आपको Android 17 का रिलीज़ के लिए तैयार वर्शन ओटीए (ओवर-द-एयर) अपडेट के तौर पर मिलेगा.

पार्टनर डिवाइसों पर Android 17 का बीटा वर्शन पाना

Android 17, हैंडसेट, टैबलेट, और फ़ोल्ड किए जा सकने वाले डिवाइसों पर बीटा वर्शन में उपलब्ध है. पार्टनर कंपनियों में Honor, iQOO, Lenovo, OnePlus, OPPO, Realme, Sharp, vivo, और Xiaomi शामिल हैं.

android-17-beta-partners.jpg

Android 17 के साथ डेवलपमेंट का बेहतर अनुभव पाने के लिए, हमारा सुझाव है कि आप Android Studio Quail के नए कैनरी बिल्ड का इस्तेमाल करें. सेट अप करने के बाद, आपको ये काम करने चाहिए:

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

Android डेवलपर प्रीव्यू और बीटा प्रोग्राम में हिस्सा लेने वाले सभी लोगों को एक बार फिर धन्यवाद. हम यह देखने के लिए उत्सुक हैं कि आपके ऐप्लिकेशन, Android 17 में हुए अपडेट का फ़ायदा कैसे उठाते हैं. साथ ही, हम आने वाले समय में आपको तेज़ी से अपडेट देने की योजना बना रहे हैं.

Android 17 के बारे में पूरी जानकारी पाने के लिए, कृपया Android 17 की डेवलपर साइट पर जाएं.

लेखक:
पढ़ना जारी रखें