पेश है Android 17

13 मिनट में पढ़ें
Matthew McCullough
वाइस प्रेसिडेंट, प्रॉडक्ट मैनेजमेंट, Android डेवलपर

आज हम 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 कोड अपने-आप जनरेट करती है. यह LLM टूल-कॉलिंग के लिए, आपके KDocs को ऑप्टिमाइज़ करती है. इसके अलावा, यह टेस्टिंग और डीबग करने के लिए ADB कमांड उपलब्ध कराती है.

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

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

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

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

यह पक्का करने के लिए कि ऐप्लिकेशन, सभी साइज़, डाइमेंशन या कॉन्फ़िगरेशन के डिवाइसों पर बेहतरीन अनुभव दें, Android 17 (एपीआई लेवल 37) ने डेवलपर के लिए, ओरिएंटेशन और साइज़ बदलने से जुड़ी पाबंदियों को ऑप्ट-आउट करने की सुविधा हटा दी है. यह सुविधा, एपीआई लेवल 37 को टारगेट करने वाले ऐप्लिकेशन के लिए, बड़ी स्क्रीन वाले डिवाइसों (sw > 600 dp) पर उपलब्ध थी. इनमें कनेक्ट किए गए डिसप्ले पर डेस्कटॉप मोड में चल रहे मोबाइल डिवाइस भी शामिल हैं. सिस्टम, लेगसी मेनिफ़ेस्ट एट्रिब्यूट और रनटाइम एपीआई को अनदेखा करेगा. इनमें 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-first है

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

Lock-Free MessageQueue

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

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

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

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

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

मेमोरी के इस्तेमाल को कम करने के लिए, हम कस्टम सूचना व्यू के साइज़ को और सीमित कर रहे हैं. इस अपडेट से, उस लूपहोल को बंद किया जा सकेगा जिसकी वजह से ऐप्लिकेशन, यूआरआई का इस्तेमाल करके मौजूदा सीमाओं को बायपास कर पाते हैं. यह सुविधा, टारगेट एसडीके वर्शन के हिसाब से उपलब्ध होती है. साथ ही, यह API 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 के बिल्ट-इन SDK कॉम्पोनेंट के साथ अपने-आप काम करती हैं. साथ ही, ये 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 MIME टाइप को तय करना होगा. साथ ही, MediaCodecInfo में नई VVC प्रोफ़ाइलें जोड़नी होंगी और 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, लाइब्रेरी, टूल या गेम इंजन बनाया है, तो ज़रूरी अपडेट अभी तैयार कर लें. इससे, आपके डाउनस्ट्रीम ऐप्लिकेशन और गेम डेवलपर को कंपैटिबिलिटी से जुड़ी समस्याओं की वजह से ब्लॉक होने से बचाया जा सकेगा. साथ ही, उन्हें एसडीके की नई सुविधाओं का इस्तेमाल करने की अनुमति दी जा सकेगी. अगर Android 17 को पूरी तरह से सपोर्ट करने के लिए अपडेट ज़रूरी हैं, तो कृपया अपने डाउनस्ट्रीम डेवलपर को इसकी जानकारी दें.

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

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

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

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

पार्टनर डिवाइसों पर 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 की डेवलपर साइट पर जाएं.

लेखक:

पढ़ना जारी रखें