सुविधाओं और एपीआई के बारे में खास जानकारी

Android 15 में, डेवलपर के लिए बेहतरीन सुविधाएं और एपीआई जोड़े गए हैं. इन सुविधाओं के बारे में खास जानकारी देने के लिए, यहां दिए गए सेक्शन में इनके बारे में बताया गया है. इससे, आपको इनसे जुड़े एपीआई का इस्तेमाल शुरू करने में मदद मिलेगी.

जोड़े गए, बदले गए, और हटाए गए एपीआई की पूरी सूची के लिए, एपीआई के बीच अंतर की रिपोर्ट पढ़ें. जोड़े गए एपीआई के बारे में जानकारी पाने के लिए, Android एपीआई का रेफ़रंस देखें — Android 15 के लिए, एपीआई लेवल 35 में जोड़े गए एपीआई देखें. जिन जगहों पर प्लैटफ़ॉर्म में हुए बदलावों का आपके ऐप्लिकेशन पर असर पड़ सकता है उनके बारे में जानने के लिए, Android 15 को टारगेट करने वाले ऐप्लिकेशन और सभी ऐप्लिकेशन के लिए, Android 15 के काम करने के तरीके में हुए बदलावों के बारे में ज़रूर पढ़ें.

कैमरा और मीडिया

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

Android मीडिया और कैमरे के लिए उपलब्ध नई सुविधाओं और डेवलपर के लिए उपलब्ध सलूशन के बारे में ज़्यादा जानने के लिए, Google I/O में Android मीडिया और कैमरे के बेहतर अनुभव बनाने के बारे में दी गई बातचीत देखें.

कम रोशनी वाला मोड

Android 15 में कम रोशनी में बेहतर फ़ोटो क्वालिटी की सुविधा जोड़ी गई है. यह ऑटो-एक्सपोज़र मोड है, जो Camera 2 और नाइट मोड कैमरा एक्सटेंशन, दोनों के लिए उपलब्ध है. कम रोशनी वाला मोड, कम रोशनी वाली स्थितियों में झलक स्ट्रीम के एक्सपोज़र को अडजस्ट करता है. यह तरीका, नाइट मोड कैमरा एक्सटेंशन के स्टिल इमेज बनाने के तरीके से अलग है. ऐसा इसलिए है, क्योंकि नाइट मोड एक बेहतर इमेज बनाने के लिए, बर्स्ट फ़ोटो को जोड़ता है. नाइट मोड, स्टिल इमेज बनाने के लिए बहुत अच्छा काम करता है. हालांकि, यह फ़्रेम की लगातार स्ट्रीम नहीं बना सकता. हालांकि, लो लाइट बूस्ट की सुविधा से ऐसा किया जा सकता है. इसलिए, कम रोशनी में बेहतर फ़ोटो लेने की सुविधा, कैमरे की इन सुविधाओं को चालू करती है:

  • इमेज की बेहतर झलक दिखाने की सुविधा, ताकि उपयोगकर्ता कम रोशनी में बेहतर तरीके से फ़ोटो खींच सकें
  • कम रोशनी में क्यूआर कोड स्कैन करना

कम रोशनी वाला मोड चालू करने पर, यह कम रोशनी होने पर अपने-आप चालू हो जाता है और ज़्यादा रोशनी होने पर बंद हो जाता है.

ऐप्लिकेशन, कम रोशनी में झलक वाली स्ट्रीम को रिकॉर्ड कर सकते हैं, ताकि ज़्यादा रोशनी वाला वीडियो सेव किया जा सके.

ज़्यादा जानकारी के लिए, कम रोशनी में बेहतर फ़ोटो लेने की सुविधा देखें.

ऐप्लिकेशन में कैमरे के कंट्रोल

Android 15 में एक एक्सटेंशन जोड़ा गया है. इससे, जिन डिवाइसों पर यह वर्शन काम करता है उन पर कैमरे के हार्डवेयर और उसके एल्गोरिदम को ज़्यादा बेहतर तरीके से कंट्रोल किया जा सकता है:

  • फ़्लैश की रोशनी में बदलाव करने की बेहतर सुविधा. इससे इमेज कैप्चर करते समय, SINGLE और TORCH, दोनों मोड में फ़्लैश की रोशनी को सटीक तरीके से कंट्रोल किया जा सकता है.

एचडीआर हेडरूम कंट्रोल

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

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

आवाज़ कम या ज़्यादा करना

Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.

To enable this feature, you need to ensure loudness metadata is available in your AAC content and enable the platform feature in your app. For this, you instantiate a LoudnessCodecController object by calling its create factory method with the audio session ID from the associated AudioTrack; this automatically starts applying audio updates. You can pass an OnLoudnessCodecUpdateListener to modify or filter loudness parameters before they are applied on the MediaCodec.

// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = 
val audioTrack = AudioTrack.Builder()
                                .setSessionId(sessionId)
                                .build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
   val lcController = LoudnessCodecController.create(mSessionId)
   // Starts applying audio updates for each added MediaCodec
}

AndroidX media3 ExoPlayer will also be updated to use the LoudnessCodecController APIs for a seamless app integration.

वर्चुअल MIDI 2.0 डिवाइस

Android 13 added support for connecting to MIDI 2.0 devices using USB, which communicate using Universal MIDI Packets (UMP). Android 15 extends UMP support to virtual MIDI apps, enabling composition apps to control synthesizer apps as a virtual MIDI 2.0 device just like they would with an USB MIDI 2.0 device.

AV1 सॉफ़्टवेयर डिकोडिंग की सुविधा ज़्यादा बेहतर तरीके से काम करती है

dav1d का लोगो

VideoLAN का लोकप्रिय AV1 सॉफ़्टवेयर डीकोडर dav1d, उन Android डिवाइसों के लिए उपलब्ध है जिनमें हार्डवेयर में AV1 को डिकोड करने की सुविधा नहीं है. dav1d, लेगसी AV1 सॉफ़्टवेयर डीकोडर की तुलना में तीन गुना ज़्यादा बेहतर परफ़ॉर्म करता है. इससे ज़्यादा उपयोगकर्ताओं के लिए, एचडी AV1 प्लेबैक की सुविधा मिलती है. इनमें कुछ लो और मिड टीयर डिवाइस भी शामिल हैं.

आपके ऐप्लिकेशन को dav1d का इस्तेमाल करने के लिए, नाम "c2.android.av1-dav1d.decoder" डालकर उसे ऑप्ट-इन करना होगा. अगले अपडेट में, dav1d को डिफ़ॉल्ट AV1 सॉफ़्टवेयर डिकोडर बनाया जाएगा. यह सुविधा, Android 11 वाले उन डिवाइसों के लिए स्टैंडर्ड और बैकपोर्ट की गई है जिन्हें Google Play के सिस्टम अपडेट मिलते हैं.

डेवलपर की प्रोडक्टिविटी और टूल

आपकी प्रॉडक्टिविटी बढ़ाने के लिए, हम Android Studio, Jetpack Compose, और Android Jetpack लाइब्रेरी जैसे टूल पर काम करते हैं. हालांकि, हम हमेशा प्लैटफ़ॉर्म में ऐसे तरीके ढूंढते रहते हैं जिनसे आपको अपने लक्ष्य को आसानी से हासिल करने में मदद मिल सके.

OpenJDK 17 के अपडेट

Android 15 में, Android की मुख्य लाइब्रेरी को रीफ़्रेश करने का काम जारी है, ताकि इसे OpenJDK LTS के नए रिलीज़ की सुविधाओं के साथ अलाइन किया जा सके.

इसमें ये मुख्य सुविधाएं और सुधार शामिल हैं:

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

PDF में हुए सुधार

Android 15 में, PdfRenderer एपीआई में काफ़ी सुधार किए गए हैं. ऐप्लिकेशन में बेहतर सुविधाएं शामिल की जा सकती हैं. जैसे, पासवर्ड से सुरक्षित फ़ाइलों को रेंडर करना, एनोटेशन, फ़ॉर्म में बदलाव करना, खोजना, और कॉपी करने के साथ चुनें. लीनियर फ़ॉर्मैट में PDF लोकल PDF देखने की रफ़्तार और संसाधन के इस्तेमाल को कम करने के लिए, ऑप्टिमाइज़ेशन का इस्तेमाल किया जा सकता है. Jetpack PDF लाइब्रेरी में इन एपीआई का इस्तेमाल किया जाता है, ताकि PDF को आसानी से जोड़ा जा सके देखने की क्षमता बढ़ाने के लिए.

PDF रेंडरिंग के नए अपडेट में, इस तरह की सुविधाएं शामिल हैं एम्बेड की गई PDF फ़ाइल को खोजकर देखा जा सकता है.

PdfRenderer को ऐसे मॉड्यूल में ले जाया गया है जिसे Google का इस्तेमाल करके अपडेट किया जा सकता है Play के सिस्टम से जुड़े अपडेट, प्लैटफ़ॉर्म के रिलीज़ होने के बाद भी उपलब्ध नहीं होते. हम ये बदलाव, Android 11 (एपीआई लेवल 30) पर वापस आ जाएंगे. इसके लिए, यह एपीआई लेवल 30 के साथ काम करने वाला Android 15 से पहले का एपीआई सरफ़ेस का वर्शन. PdfRendererPreV.

भाषा अपने-आप बदलने की सुविधा को बेहतर बनाना

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

बेहतर OpenType वैरिएबल फ़ॉन्ट एपीआई

Android 15, OpenType वैरिएबल के फ़ॉन्ट की उपयोगिता को बेहतर बनाता है. अब ये काम किए जा सकते हैं बिना जानकारी दिए वैरिएबल फ़ॉन्ट से FontFamily इंस्टेंस बनाएं buildVariableFamily एपीआई का इस्तेमाल करके वज़न ऐक्सिस. टेक्स्ट रेंडरर ओवरराइड करता है दिखाए जा रहे टेक्स्ट से मैच करने के लिए, wght ऐक्सिस की वैल्यू.

नए एपीआई का इस्तेमाल करके, यह Typeface बनाने के कोड को आसान बनाता है काफ़ी:

Kotlin

val newTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build()

Java

Typeface newTypeface = Typeface.CustomFallbackBuilder(
            new FontFamily.Builder(
                new Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build();

पहले, इसी Typeface को बनाने के लिए, आपको ज़्यादा कोड की ज़रूरत होगी:

Kotlin

val oldTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf")
                    .setFontVariationSettings("'wght' 400")
                    .setWeight(400)
                    .build())
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 100")
                        .setWeight(100)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 200")
                        .setWeight(200)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 300")
                        .setWeight(300)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 500")
                        .setWeight(500)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 600")
                        .setWeight(600)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 700")
                        .setWeight(700)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 800")
                        .setWeight(800)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 900")
                        .setWeight(900)
                        .build()
                ).build()
        ).build()

Java

Typeface oldTypeface = new Typeface.CustomFallbackBuilder(
    new FontFamily.Builder(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 400")
            .setWeight(400)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 100")
            .setWeight(100)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 200")
            .setWeight(200)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 300")
            .setWeight(300)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 500")
            .setWeight(500)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 600")
            .setWeight(600)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 700")
            .setWeight(700)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 800")
            .setWeight(800)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 900")
            .setWeight(900)
            .build()
    )
    .build()
).build();

यहां एक उदाहरण दिया गया है कि पुराने और नए, दोनों एपीआई का इस्तेमाल करके Typeface कैसे बनाई गई रेंडर करता है:

इसका एक उदाहरण कि टाइपफ़ेस की रेंडरिंग, नए और पुराने वर्शन के हिसाब से किस तरह अलग है
API

इस उदाहरण में, पुराने एपीआई की मदद से बनाए गए Typeface में के लिए सही फ़ॉन्ट वेट बनाने की सुविधा 350, 450, 550 और 650 Font इंस्टेंस, इसलिए रेंडरर सबसे नज़दीकी वज़न पर वापस चला जाता है. इसलिए, इस मामले में, 350 के बजाय 300 रेंडर होता है, 450 के बजाय 400 रेंडर होता है और इसी तरह. इसके उलट, नए एपीआई की मदद से बनाया गया Typeface डाइनैमिक तरीके से बनाता है दिए गए वज़न के लिए एक Font इंस्टेंस, इसलिए 350 के लिए सटीक वेट रेंडर किए जाते हैं, 450, 550, और 650 भी हैं.

लाइन ब्रेक को बेहतर तरीके से कंट्रोल करने की सुविधा

Starting in Android 15, a TextView and the underlying line breaker can preserve the given portion of text in the same line to improve readability. You can take advantage of this line break customization by using the <nobreak> tag in string resources or createNoBreakSpan. Similarly, you can preserve words from hyphenation by using the <nohyphen> tag or createNoHyphenationSpan.

For example, the following string resource doesn't include a line break, and renders with the text "Pixel 8 Pro." breaking in an undesirable place:

<resources>
    <string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>

In contrast, this string resource includes the <nobreak> tag, which wraps the phrase "Pixel 8 Pro." and prevents line breaks:

<resources>
    <string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>

The difference in how these strings are rendered is shown in the following images:

Layout for a line of text where the phrase "Pixel 8 Pro." isn't wrapped using a <nobreak> tag.
Layout for the same line of text where the phrase "Pixel 8 Pro." is wrapped using a <nobreak> tag.

ऐप्लिकेशन को संग्रहित करना

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

REQUEST_DELETE_PACKAGES अनुमति वाले ऐप्लिकेशन, PackageInstaller requestArchive तरीके का इस्तेमाल करके, इंस्टॉल किए गए ऐप्लिकेशन पैकेज को संग्रहित करने का अनुरोध कर सकते हैं. इससे APK और कैश मेमोरी में सेव की गई सभी फ़ाइलें हट जाती हैं, लेकिन उपयोगकर्ता का डेटा सेव रहता है. संग्रहित किए गए ऐप्लिकेशन, डिसप्ले करने लायक ऐप्लिकेशन के तौर पर वापस दिखेंगे. इसके लिए, LauncherApps एपीआई; उपयोगकर्ताओं को एक यूज़र इंटरफ़ेस (यूआई) दिखेगा, ताकि यह हाइलाइट किया जा सके कि वे ऐप्लिकेशन संग्रहित किए जाते हैं. अगर कोई उपयोगकर्ता संग्रहित किए गए किसी ऐप्लिकेशन पर टैप करता है, तो ऐप्लिकेशन इंस्टॉल करने वाले व्यक्ति को उसे अनअर्काइव करने का अनुरोध मिलेगा. साथ ही, ऐप्लिकेशन को वापस लाने की प्रोसेस को ACTION_PACKAGE_ADDED ब्रॉडकास्ट से मॉनिटर किया जा सकता है.

डेवलपर के लिए उपलब्ध विकल्पों का इस्तेमाल करके, किसी डिवाइस पर 16 केबी मोड चालू करना

किसी डिवाइस को 16 केबी मोड में बूट करने के लिए, 16 केबी पेज साइज़ के साथ बूट करें डेवलपर विकल्प को टॉगल करें.

Android 15 QPR1 से, कुछ डिवाइसों पर उपलब्ध डेवलपर के विकल्प का इस्तेमाल करके, डिवाइस को 16 केबी मोड में बूट किया जा सकता है. साथ ही, डिवाइस पर टेस्टिंग की जा सकती है. डेवलपर के लिए उपलब्ध विकल्प का इस्तेमाल करने से पहले, सेटिंग -> सिस्टम -> सॉफ़्टवेयर अपडेट पर जाएं और उपलब्ध सभी अपडेट लागू करें.

डेवलपर के लिए यह विकल्प, इन डिवाइसों पर उपलब्ध है:

  • Pixel 8 और 8 Pro (Android 15 QPR1 या उसके बाद के वर्शन पर काम करने वाले)

    चेतावनी: Android 15 QPR2 Beta 3 में एक समस्या है. इस वजह से, Pixel 8 डिवाइसों पर Android 15 QPR2 Beta 3 इंस्टॉल करने और डिवाइस को 16 KB मोड में बूट करने के बाद, टचस्क्रीन काम नहीं करती. इस समस्या का असर, Pixel 8 Pro डिवाइसों पर नहीं पड़ता.

  • Pixel 8a (Android 15 QPR1 या इसके बाद के वर्शन पर काम करने वाला)

    चेतावनी: Android 15 QPR2 Beta 3 में एक समस्या है. इस वजह से, Pixel 8a डिवाइसों पर Android 15 QPR2 Beta 3 इंस्टॉल करने और डिवाइस को 16 KB मोड में बूट करने के बाद, टचस्क्रीन काम नहीं करती.

  • Pixel 9, 9 Pro, और 9 Pro XL (Android 15 QPR2 Beta 2 या इसके बाद के वर्शन पर)

ग्राफ़िक्स

Android 15 में ग्राफ़िक्स से जुड़े नए सुधार किए गए हैं. इनमें ANGLE और कैनवस ग्राफ़िक्स सिस्टम में किए गए बदलाव भी शामिल हैं.

Android के जीपीयू ऐक्सेस को आधुनिक बनाना

Vulkan logo

Android hardware has evolved quite a bit from the early days where the core OS would run on a single CPU and GPUs were accessed using APIs based on fixed-function pipelines. The Vulkan® graphics API has been available in the NDK since Android 7.0 (API level 24) with a lower-level abstraction that better reflects modern GPU hardware, scales better to support multiple CPU cores, and offers reduced CPU driver overhead — leading to improved app performance. Vulkan is supported by all modern game engines.

Vulkan is Android's preferred interface to the GPU. Therefore, Android 15 includes ANGLE as an optional layer for running OpenGL® ES on top of Vulkan. Moving to ANGLE will standardize the Android OpenGL implementation for improved compatibility, and, in some cases, improved performance. You can test out your OpenGL ES app stability and performance with ANGLE by enabling the developer option in Settings -> System -> Developer Options -> Experimental: Enable ANGLE on Android 15.

The Android ANGLE on Vulkan roadmap

Roadmap of upcoming changes to the Android GPU APIs.

As part of streamlining our GPU stack, going forward we will be shipping ANGLE as the GL system driver on more new devices, with the future expectation that OpenGL/ES will be only available through ANGLE. That being said, we plan to continue support for OpenGL ES on all devices.

Recommended next steps

Use the developer options to select the ANGLE driver for OpenGL ES and test your app. For new projects, we strongly encourage using Vulkan for C/C++.

कैनवस में किए गए सुधार

Android 15 में, Android के कैनवस ग्राफ़िक सिस्टम को और बेहतर बनाया गया है. इसमें ये नई सुविधाएं भी जोड़ी गई हैं:

  • Matrix44, निर्देशांकों को बदलने के लिए 4x4 मैट्रिक उपलब्ध कराता है. इसका इस्तेमाल तब करना चाहिए, जब आपको कैनवस को 3D में बदलना हो.
  • clipShader, मौजूदा क्लिप को तय किए गए शेडर के साथ इंटरसेक्शन करता है. वहीं, clipOutShader, क्लिप को मौजूदा क्लिप और शेडर के अंतर पर सेट करता है. दोनों ही शेडर को ऐल्फ़ा मास्क के तौर पर इस्तेमाल करते हैं. इससे जटिल आकार आसानी से बनाए जा सकते हैं.

परफ़ॉर्मेंस और बैटरी

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

बैटरी की खपत कम करने के सबसे सही तरीके, नेटवर्क और बिजली के इस्तेमाल को डीबग करने के बारे में जानने के लिए, Google I/O में Android पर बैकग्राउंड में चलने वाले कामों की बैटरी खपत को कम करना शीर्षक वाली बातचीत देखें. इससे आपको यह भी पता चलेगा कि हम Android 15 और इसके बाद के वर्शन में, बैकग्राउंड में चलने वाले कामों की बैटरी खपत को कैसे कम कर रहे हैं.

ApplicationStartInfo API

Android के पिछले वर्शन में, ऐप्लिकेशन के शुरू होने की प्रोसेस को समझना थोड़ा मुश्किल था. आपके ऐप्लिकेशन में यह तय करना मुश्किल था कि वह कोल्ड, वॉर्म या हॉट स्टैटस से शुरू हुआ था. यह जानना भी मुश्किल था कि ऐप्लिकेशन को लॉन्च करने के अलग-अलग चरणों में कितना समय लगा: प्रोसेस को फ़ॉर्क करना, onCreate को कॉल करना, पहला फ़्रेम बनाना वगैरह. जब आपकी Application क्लास को इंस्टैंशिएट किया गया था, तब आपके पास यह जानने का कोई तरीका नहीं था कि ऐप्लिकेशन किसी ब्रॉडकास्ट, कॉन्टेंट प्रोवाइडर, जॉब, बैकअप, बूट पूरा होने, अलार्म या Activity से शुरू हुआ है.

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

ऐप्लिकेशन के साइज़ के बारे में ज़्यादा जानकारी

Android 8.0 (एपीआई लेवल 26) से, Android में StorageStats.getAppBytes एपीआई शामिल है. यह एपीआई, किसी ऐप्लिकेशन के इंस्टॉल किए गए साइज़ की जानकारी, बाइट के तौर पर देता है. यह साइज़, APK के साइज़, APK से निकाली गई फ़ाइलों के साइज़, और डिवाइस पर जनरेट की गई फ़ाइलों के साइज़ का कुल योग होता है. जैसे, पहले से (एओटी) कंपाइल किया गया कोड. इस नंबर से यह पता नहीं चलता कि आपका ऐप्लिकेशन स्टोरेज का इस्तेमाल कैसे कर रहा है.

Android 15 में StorageStats.getAppBytesByDataType([type]) एपीआई जोड़ा गया है. इससे आपको यह जानकारी मिलती है कि आपका ऐप्लिकेशन, स्टोरेज का कितना हिस्सा इस्तेमाल कर रहा है. इसमें APK फ़ाइल के अलग-अलग हिस्से, AOT और तेज़ी से काम करने से जुड़ा कोड, dex मेटाडेटा, लाइब्रेरी, और गाइडेड प्रोफ़ाइलें शामिल हैं.

ऐप्लिकेशन से मैनेज की जाने वाली प्रोफ़ाइलिंग

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

अपने ऐप्लिकेशन में प्रोफ़ाइलिंग के अनुरोधों को आसानी से बनाने के लिए, हमारा सुझाव है कि आप Core 1.15.0-rc01 या इसके बाद के वर्शन में उपलब्ध, उससे जुड़े Profiling AndroidX API का इस्तेमाल करें.

SQLite डेटाबेस में सुधार

Android 15 में SQLite एपीआई उपलब्ध कराए गए हैं, जो इसमें मौजूद SQLite इंजन, जो परफ़ॉर्मेंस की उन समस्याओं को टारगेट करता है जो मेनिफ़ेस्ट करते हैं. ये एपीआई SQLite के अपडेट को वर्शन में शामिल करते हैं 3.44.3.

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

  • रीड-ओनली डेफ़र्ड ट्रांज़ैक्शन: रीड-ओनली ट्रांज़ैक्शन जारी करते समय (लिखने के स्टेटमेंट शामिल न करें), रीड-ओनली DEFERRED ट्रांज़ैक्शन जारी करने के लिए, beginTransactionReadOnly() और beginTransactionWithListenerReadOnly(SQLiteTransactionListener) का इस्तेमाल करें. ऐसे लेन-देन चलाए जा सकते हैं और डेटाबेस के WAL मोड में होने पर, ये दोनों काम कर सकते हैं IMMEDIATE या EXCLUSIVE लेन-देन के साथ चलाए जाते हैं.
  • लाइन की संख्या और आईडी: एपीआई जोड़े गए हैं, ताकि बदली गई लाइनों की संख्या या डाली गई आखिरी लाइन का आईडी, अतिरिक्त क्वेरी जारी किए बिना वापस पाया जा सके. getLastChangedRowCount(), मौजूदा ट्रांज़ैक्शन में सबसे हाल ही के एसक्यूएल स्टेटमेंट की मदद से डाली गई, अपडेट की गई या मिटाई गई पंक्तियों की संख्या दिखाता है. वहीं, getTotalChangedRowCount(), मौजूदा कनेक्शन की गिनती दिखाता है. getLastInsertRowId(), आखिरी पंक्ति का rowid दिखाता है को चालू करने के लिए किया जा सकता है.
  • रॉ स्टेटमेंट: रॉ SQlite स्टेटमेंट जारी करें. इससे, सुविधाजनक रैपर और प्रोसेसिंग के लिए होने वाले अतिरिक्त खर्च से बचा जा सकता है.

Android डाइनैमिक परफ़ॉर्मेंस फ़्रेमवर्क से जुड़े अपडेट

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

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

अपने ऐप्लिकेशन और गेम में ADPF का इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, दस्तावेज़ पर जाएं.

निजता

Android 15 में कई सुविधाएं शामिल हैं. इनकी मदद से, ऐप्लिकेशन डेवलपर उपयोगकर्ता की निजता को सुरक्षित रख सकते हैं.

स्क्रीन रिकॉर्डिंग का पता लगाना

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

val mCallback = Consumer<Int> { state ->
  if (state == SCREEN_RECORDING_STATE_VISIBLE) {
    // We're being recorded
  } else {
    // We're not being recorded
  }
}

override fun onStart() {
   super.onStart()
   val initialState =
      windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
   mCallback.accept(initialState)
}

override fun onStop() {
    super.onStop()
    windowManager.removeScreenRecordingCallback(mCallback)
}

IntentFilter की सुविधाओं में हुई बढ़ोतरी

Android 15 में, UriRelativeFilterGroup के ज़रिए Intent को ज़्यादा सटीक तरीके से हल करने की सुविधा पहले से मौजूद है. इसमें UriRelativeFilter ऑब्जेक्ट का एक सेट होता है, जो Intent मैच करने वाले नियमों का एक सेट बनाता है. इन नियमों को पूरा करना ज़रूरी है. इनमें यूआरएल क्वेरी पैरामीटर, यूआरएल फ़्रैगमेंट, और ब्लॉक करने या बाहर रखने के नियम शामिल हैं.

इन नियमों को AndroidManifest एक्सएमएल फ़ाइल में, <uri-relative-filter-group> टैग की मदद से तय किया जा सकता है. इसमें android:allow टैग भी शामिल किया जा सकता है. इन टैग में ऐसे <data> टैग शामिल हो सकते हैं जिनमें मौजूदा डेटा टैग एट्रिब्यूट के साथ-साथ, android:query और android:fragment एट्रिब्यूट का इस्तेमाल किया जाता है.

यहां AndroidManifest सिंटैक्स का एक उदाहरण दिया गया है:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:domain="astore.com" />
  <uri-relative-filter-group>
    <data android:pathPrefix="/auth" />
    <data android:query="region=na" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:query="mobileoptout=true" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:fragmentPrefix="faq" />
  </uri-relative-filter-group>
</intent-filter>

प्राइवेट स्पेस

निजी स्पेसेज़ को अनलॉक और लॉक किया जा सकता है, ताकि किसी डिवाइस पर संवेदनशील ऐप्लिकेशन दिखाए या छिपाए जा सकें.

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

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

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

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

हमारा सुझाव है कि आप अपने ऐप्लिकेशन को प्राइवेट स्पेस में टेस्ट करें, ताकि यह पक्का किया जा सके कि आपका ऐप्लिकेशन उम्मीद के मुताबिक काम करता है. ऐसा खास तौर पर तब करें, जब आपका ऐप्लिकेशन इनमें से किसी कैटगरी में आता हो:

चुनी गई फ़ोटो का ऐक्सेस देने के लिए, उपयोगकर्ता के हाल ही के विकल्प के बारे में क्वेरी

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

Kotlin

val externalContentUri = MediaStore.Files.getContentUri("external")

val mediaColumns = arrayOf(
   FileColumns._ID,
   FileColumns.DISPLAY_NAME,
   FileColumns.MIME_TYPE,
)

val queryArgs = bundleOf(
   // Return only items from the last selection (selected photos access)
   QUERY_ARG_LATEST_SELECTION_ONLY to true,
   // Sort returned items chronologically based on when they were added to the device's storage
   QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",
   QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",
   QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(
       FileColumns.MEDIA_TYPE_IMAGE.toString(),
       FileColumns.MEDIA_TYPE_VIDEO.toString()
   )
)

Java

Uri externalContentUri = MediaStore.Files.getContentUri("external");

String[] mediaColumns = {
    FileColumns._ID,
    FileColumns.DISPLAY_NAME,
    FileColumns.MIME_TYPE
};

Bundle queryArgs = new Bundle();
queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true);
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC");
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?");
queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] {
    String.valueOf(FileColumns.MEDIA_TYPE_IMAGE),
    String.valueOf(FileColumns.MEDIA_TYPE_VIDEO)
});

Android पर Privacy Sandbox

Android 15 में, Android Ad Services के नए एक्सटेंशन शामिल हैं. इनमें Android पर Privacy Sandbox का नया वर्शन भी शामिल है. यह बदलाव, उपयोगकर्ता की निजता को बेहतर बनाने और मोबाइल ऐप्लिकेशन के लिए दिलचस्पी के हिसाब से असरदार विज्ञापन दिखाने वाली टेक्नोलॉजी बनाने के हमारे काम का हिस्सा है. हमारे Privacy Sandbox पेज पर, Android के डेवलपर प्रीव्यू और बीटा प्रोग्राम में Privacy Sandbox के बारे में ज़्यादा जानकारी दी गई है. इससे आपको इस प्रोग्राम को शुरू करने में मदद मिलेगी.

Health Connect

Android 15 में, Health Connect by Android के नए एक्सटेंशन इंटिग्रेट किए गए हैं. यह एक सुरक्षित और एक ही जगह से कंट्रोल किया जा सकने वाला प्लैटफ़ॉर्म है. इसकी मदद से, सेहत और फ़िटनेस से जुड़ा वह डेटा मैनेज और शेयर किया जा सकता है जो ऐप्लिकेशन इकट्ठा करता है. इस अपडेट में, फ़िटनेस, पोषण, त्वचा के तापमान, ट्रेनिंग प्लान वगैरह के लिए, अन्य डेटा टाइप का इस्तेमाल करने की सुविधा जोड़ी गई है.

त्वचा के तापमान को ट्रैक करने की सुविधा की मदद से, उपयोगकर्ता किसी पहने जा सकने वाले डिवाइस या किसी अन्य ट्रैकिंग डिवाइस से, तापमान का ज़्यादा सटीक डेटा सेव और शेयर कर सकते हैं.

ट्रेनिंग के प्लान, कसरत के प्लान होते हैं. इनकी मदद से, उपयोगकर्ता अपने फ़िटनेस लक्ष्यों को हासिल कर सकता है. ट्रेनिंग के प्लान में, कसरत पूरी करने और परफ़ॉर्मेंस से जुड़े कई लक्ष्य शामिल होते हैं:

Android में Health Connect में हुए नए अपडेट के बारे में यहां ज़्यादा जानें: Android के लिए, ज़रूरत के हिसाब से अनुभव तैयार करना Google I/O से स्वास्थ्य के बारे में जानकारी.

ऐप्लिकेशन की स्क्रीन शेयर करने की सुविधा

Android 15 支持应用屏幕共享,因此用户可以仅共享或录制应用窗口,而不是整个设备屏幕。此功能首次在 Android 14 QPR2 中启用,包含 MediaProjection 回调,可让您的应用自定义应用屏幕共享体验。请注意,对于以 Android 14(API 级别 34)或更高版本为目标平台的应用,每个 MediaProjection 捕获会话都需要征得用户同意

उपयोगकर्ता अनुभव और सिस्टम यूज़र इंटरफ़ेस (यूआई)

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

Android 15 में किए गए नए सुधारों का इस्तेमाल करके, अपने ऐप्लिकेशन के उपयोगकर्ता अनुभव को बेहतर बनाने के बारे में ज़्यादा जानने के लिए, Google I/O में हुई अपने Android ऐप्लिकेशन के उपयोगकर्ता अनुभव को बेहतर बनाएं टाॅक देखें.

जनरेट की गई झलकें दिखाने वाले एपीआई की मदद से, विजेट की ज़्यादा बेहतर झलकें

Android 15 से पहले, विजेट पिकर की झलक दिखाने का सिर्फ़ एक ही तरीका था. इसके लिए, स्टैटिक इमेज या लेआउट रिसॉर्स तय करना होता था. होम स्क्रीन पर विजेट को जोड़ने पर, ये झलकें अक्सर असल विजेट से काफ़ी अलग दिखती हैं. साथ ही, Jetpack Glance की मदद से स्टैटिक रिसॉर्स नहीं बनाए जा सकते. इसलिए, Glance के डेवलपर को विजेट की झलक देखने के लिए, अपने विजेट का स्क्रीनशॉट लेना पड़ता था या एक्सएमएल लेआउट बनाना पड़ता था.

Android 15 में, जनरेट की गई झलक देखने की सुविधा जोड़ी गई. इसका मतलब है कि ऐप्लिकेशन विजेट की सेवा देने वाली कंपनियां, स्टैटिक संसाधन के बजाय, पिकर की झलक के तौर पर इस्तेमाल करने के लिए RemoteViews जनरेट कर सकती हैं.

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

Push API

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

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

इसका अनुमानित फ़्लो यह होता है:

  1. विजेट की सेवा देने वाली कंपनी किसी भी समय setWidgetPreview को कॉल कर सकती है. दी गई झलकें, AppWidgetService में सेवा देने वाली कंपनी की अन्य जानकारी के साथ सेव की जाती हैं.
  2. setWidgetPreview, AppWidgetHost.onProvidersChanged कॉलबैक की मदद से, होस्ट को अपडेट की गई झलक की सूचना देता है. इसके जवाब में, विजेट होस्ट, सेवा देने वाली कंपनी की सारी जानकारी को फिर से लोड करता है.
  3. विजेट की झलक दिखाते समय, होस्ट AppWidgetProviderInfo.generatedPreviewCategories की जांच करता है. अगर चुनी गई कैटगरी उपलब्ध है, तो इस सेवा देने वाली कंपनी के लिए सेव की गई झलक दिखाने के लिए, AppWidgetManager.getWidgetPreview को कॉल किया जाता है.

setWidgetPreview को कब कॉल करें

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

यहां दी गई सूची में, झलक के इस्तेमाल के उदाहरणों की दो मुख्य कैटगरी के बारे में बताया गया है:

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

हो सकता है कि कुछ सेवा देने वाली कंपनियां, हब मोड पिकर पर स्टैटिक झलक दिखाएं, लेकिन होमस्क्रीन पिकर पर असल जानकारी दिखाएं. इन सेवा देने वाली कंपनियों को, झलक सेट करने के लिए, इस्तेमाल के इन दोनों उदाहरणों के लिए दिशा-निर्देशों का पालन करना चाहिए.

पिक्चर में पिक्चर

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

डेवलपर, ओवरले किए गए यूज़र इंटरफ़ेस (यूआई) एलिमेंट की विज़िबिलिटी को टॉगल करने वाले लॉजिक को तय करने के लिए, onPictureInPictureModeChanged कॉलबैक का इस्तेमाल करते हैं. यह कॉलबैक तब ट्रिगर होता है, जब PiP मोड में जाने या उससे बाहर निकलने का ऐनिमेशन पूरा हो जाता है. Android 15 से, PictureInPictureUiState क्लास में एक और स्टेटस शामिल है.

यूज़र इंटरफ़ेस (यूआई) की इस स्थिति की मदद से, Android 15 (एपीआई लेवल 35) को टारगेट करने वाले ऐप्लिकेशन, पीआईपी ऐनिमेशन के शुरू होते ही, isTransitioningToPip() के साथ Activity#onPictureInPictureUiStateChanged कॉलबैक को शुरू करते ही देखेंगे. ऐसे कई यूज़र इंटरफ़ेस (यूआई) एलिमेंट हैं जो पिन किए गए वीडियो के मोड में ऐप्लिकेशन के लिए काम के नहीं होते. उदाहरण के लिए, सुझाव, आने वाले वीडियो, रेटिंग, और टाइटल जैसी जानकारी देने वाले व्यू या लेआउट. जब ऐप्लिकेशन पिन किए गए विंडो मोड में चला जाता है, तो इन यूज़र इंटरफ़ेस (यूआई) एलिमेंट को छिपाने के लिए, onPictureInPictureUiStateChanged कॉलबैक का इस्तेमाल करें. जब ऐप्लिकेशन, PiP विंडो से फ़ुल स्क्रीन मोड पर स्विच करता है, तो इन एलिमेंट को अनहाइड करने के लिए onPictureInPictureModeChanged कॉलबैक का इस्तेमाल करें. इन उदाहरणों में दिखाया गया है कि ऐसा कैसे किया जा सकता है:

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
        if (pipState.isTransitioningToPip()) {
          // Hide UI elements
        }
    }
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
        if (isInPictureInPictureMode) {
          // Unhide UI elements
        }
    }

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

'परेशान न करें' मोड के बेहतर नियम

AutomaticZenRule की मदद से ऐप्लिकेशन, 'ध्यान दें' सुविधा को अपनी पसंद के मुताबिक बना सकते हैं मैनेजमेंट (परेशान न करें) के नियम और तय करें कि इन्हें कब चालू या बंद करना है उन्हें. Android 15, इन नियमों को बेहतर तरीके से दिखाता है. ऐसा करने का मकसद, उपयोगकर्ता अनुभव मिलता है. इसमें ये बदलाव शामिल हैं:

  • AutomaticZenRule में टाइप जोड़े जा रहे हैं. इससे सिस्टम, खास वैल्यू लागू कर सकता है कुछ नियम-कानूनों के बारे में बताता है.
  • AutomaticZenRule में आइकॉन जोड़ा जा रहा है. इससे मोड बेहतर तरीके से काम करेगा पहचानने लायक.
  • AutomaticZenRule में ऐसी triggerDescription स्ट्रिंग जोड़ी जा रही है जो यह बताए ऐसी शर्तें जिनके आधार पर, उपयोगकर्ता के लिए नियम चालू होना चाहिए.
  • जोड़े गए ZenDeviceEffects से AutomaticZenRule तक, जिससे नियम ग्रेस्केल जैसी चीज़ों को ट्रिगर कर सकेंगे वॉलपेपर की रोशनी कम करने के लिए भी किया जा सकता है.

सूचना चैनलों के लिए VibrationEffect सेट करना

Android 15 पर, आने वाली सूचनाओं के लिए शानदार वाइब्रेशन सेटिंग चालू की जा सकती है NotificationChannel.setVibrationEffect का इस्तेमाल कर रहे हैं, इसलिए आपके उपयोगकर्ता इसके बिना अलग-अलग तरह की सूचनाओं के बीच अंतर कर सकते हैं उन्हें अपने डिवाइस में देखना पड़ता है.

मीडिया प्रोजेक्शन स्टेटस बार चिप और अपने-आप बंद होना

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

स्क्रीन शेयर करने, कास्ट करने, और रिकॉर्ड करने के लिए स्टेटस बार चिप.

बड़ी स्क्रीन और फ़ॉर्म फ़ैक्टर

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

बड़ी स्क्रीन पर मल्टीटास्किंग की बेहतर सुविधा

Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。

Google I/O 大会上有一些关于构建自适应 Android 的会议 应用使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。

कवर स्क्रीन की सुविधा

आपका ऐप्लिकेशन, ऐसी प्रॉपर्टी का एलान कर सकता है जिसका इस्तेमाल Android 15, Application या Activity को फ़्लिप किए जा सकने वाले डिवाइसों की छोटी कवर स्क्रीन पर दिखाने के लिए करता है. ये स्क्रीन इतनी छोटी हैं कि इन्हें Android ऐप्लिकेशन के साथ काम करने वाले डिवाइसों के तौर पर नहीं माना जा सकता. हालांकि, आपका ऐप्लिकेशन इन डिवाइसों पर काम करने के लिए ऑप्ट-इन कर सकता है. इससे आपका ऐप्लिकेशन ज़्यादा जगहों पर उपलब्ध हो पाएगा.

कनेक्टिविटी

Android 15, प्लैटफ़ॉर्म को अपडेट करता है, ताकि आपके ऐप्लिकेशन को कम्यूनिकेशन और वायरलेस टेक्नोलॉजी से जुड़ी नई सुविधाओं का ऐक्सेस मिल सके.

सैटलाइट से जुड़ी सहायता

Android 15 继续扩大对卫星连接的平台支持,并包含一些界面元素,以确保在整个卫星连接环境中提供一致的用户体验。

应用可以使用 ServiceState.isUsingNonTerrestrialNetwork() 执行以下操作: 检测设备是否连接到卫星,让他们更清楚地了解 可能会导致完全网络服务不可用的原因此外,Android 15 支持短信和彩信应用以及预加载的 RCS 应用,以便使用卫星连接发送和接收消息。

当设备连接到卫星时,系统会显示通知。

एनएफ़सी की सुविधा को बेहतर बनाना

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

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

Wallet की भूमिका

Android 15 में Wallet की भूमिका को शामिल किया गया है. इससे, उपयोगकर्ता के पसंदीदा Wallet ऐप्लिकेशन के साथ बेहतर तरीके से इंटिग्रेशन किया जा सकता है. यह भूमिका, एनएफ़सी की डिफ़ॉल्ट तौर पर सेट की गई, टच किए बिना पेमेंट करने की सेटिंग की जगह ले लेती है. उपयोगकर्ता, सेटिंग > ऐप्लिकेशन > डिफ़ॉल्ट ऐप्लिकेशन पर जाकर, Wallet में भूमिका रखने वाले व्यक्ति को मैनेज कर सकते हैं.

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

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

सुरक्षा

Android 15 की मदद से, अपने ऐप्लिकेशन की सुरक्षा को बेहतर बनाया जा सकता है और उसके डेटा को सुरक्षित रखा जा सकता है. साथ ही, उपयोगकर्ताओं को उनके डेटा के बारे में ज़्यादा जानकारी दी जा सकती है और उस पर कंट्रोल दिया जा सकता है. उपयोगकर्ताओं की सुरक्षा को बेहतर बनाने और नए खतरों से आपके ऐप्लिकेशन को सुरक्षित रखने के लिए, हम क्या कर रहे हैं, इस बारे में ज़्यादा जानने के लिए Google I/O की Android पर उपयोगकर्ता की सुरक्षा करना टाॅक देखें.

Credential Manager को ऑटोमैटिक भरने की सुविधा के साथ इंटिग्रेट करना

Android 15 से, डेवलपर क्रेडेंशियल मैनेजर के अनुरोधों के साथ, उपयोगकर्ता नाम या पासवर्ड फ़ील्ड जैसे खास व्यू को लिंक कर सकते हैं. इससे, साइन-इन की प्रोसेस के दौरान उपयोगकर्ता को बेहतर अनुभव देना आसान हो जाता है. जब उपयोगकर्ता इनमें से किसी एक व्यू पर फ़ोकस करता है, तो उससे जुड़ा अनुरोध क्रेडेंशियल मैनेजर को भेजा जाता है. इस प्रोसेस से मिले क्रेडेंशियल, सभी सेवा देने वाली कंपनियों के साथ इकट्ठा किए जाते हैं और ऑटोमैटिक भरने की सुविधा के फ़ॉलबैक यूज़र इंटरफ़ेस (यूआई) में दिखाए जाते हैं. जैसे, इनलाइन सुझाव या ड्रॉप-डाउन सुझाव. डेवलपर के लिए, Jetpack androidx.credentials लाइब्रेरी का इस्तेमाल करना सबसे बेहतर है. यह लाइब्रेरी, Android 15 और इसके बाद के वर्शन में इस सुविधा को बेहतर बनाने के लिए जल्द ही उपलब्ध होगी.

बायोमेट्रिक प्रॉम्प्ट की मदद से, एक टैप से साइन-अप और साइन-इन करने की सुविधा को इंटिग्रेट करना

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

एंड-टू-एंड एन्क्रिप्शन के लिए पासकोड मैनेजमेंट

हम Android 15 में E2eeContactKeysManager को लॉन्च कर रहे हैं. इससे आपके Android ऐप्लिकेशन में एंड-टू-एंड एन्क्रिप्शन (E2EE) की सुविधा मिलती है. इसके लिए, क्रिप्टोग्राफ़िक सार्वजनिक कुंजियों को सेव करने के लिए, ओएस-लेवल का एपीआई उपलब्ध कराया जाता है.

E2eeContactKeysManager को प्लैटफ़ॉर्म के संपर्क ऐप्लिकेशन के साथ इंटिग्रेट करने के लिए डिज़ाइन किया गया है. इससे उपयोगकर्ताओं को अपने संपर्कों के सार्वजनिक कुंजियों को मैनेज करने और उनकी पुष्टि करने का एक ही तरीका मिलता है.

कॉन्टेंट यूआरआई के लिए अनुमति की जांच

Android 15 引入了一组用于对内容 URI 执行权限检查的 API:

सुलभता

Android 15 में ऐसी सुविधाएं जोड़ी गई हैं जिनसे उपयोगकर्ताओं के लिए ऐप्लिकेशन को ऐक्सेस करना आसान हो जाता है.

बेहतर ब्रेल

हमने Android 15 में, TalkBack को यूएसबी और सुरक्षित ब्लूटूथ, दोनों के ज़रिए HID स्टैंडर्ड का इस्तेमाल करने वाले ब्रेल डिसप्ले के साथ काम करने की सुविधा दी है.

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

इंटरनैशनलाइज़ेशन

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

सीजेके वैरिएबल फ़ॉन्ट

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

चाइनीज़, जैपनीज़, और कोरियन (CJK) भाषाओं के लिए, वैरिएबल फ़ॉन्ट अलग-अलग फ़ॉन्ट विड्थ के साथ कैसे दिखता है.

वर्णों के बीच स्पेस

Android 15 से, JUSTIFICATION_MODE_INTER_CHARACTER का इस्तेमाल करके, अक्षरों के बीच के स्पेस का इस्तेमाल करके टेक्स्ट को अलाइन किया जा सकता है. एक ही शब्द में दो बार सही ठहराने की वजह यह थी पहली बार Android 8.0 (एपीआई लेवल 26) और इंटर-कैरेक्टर में पेश किया गया था वजह बताने की सुविधा, उन भाषाओं के लिए समान सुविधाएं देती है जो चाइनीज़, जैपनीज़ वगैरह जैसे सेगमेंटेशन के लिए खाली सफ़ेद जगह.

JUSTIFICATION_MODE_NONE का इस्तेमाल करने वाले जैपनीज़ टेक्स्ट के लिए लेआउट.
JUSTIFICATION_MODE_NONE का इस्तेमाल करके अंग्रेज़ी टेक्स्ट के लिए लेआउट.


JUSTIFICATION_MODE_INTER_WORD का इस्तेमाल करके, जैपनीज़ टेक्स्ट के लिए लेआउट.
JUSTIFICATION_MODE_INTER_WORD का इस्तेमाल करके अंग्रेज़ी टेक्स्ट के लिए लेआउट.


JUSTIFICATION_MODE_INTER_CHARACTER का इस्तेमाल करके, जैपनीज़ टेक्स्ट के लिए लेआउट.
JUSTIFICATION_MODE_INTER_CHARACTER का इस्तेमाल करके अंग्रेज़ी टेक्स्ट का लेआउट.

लाइन ब्रेक का अपने-आप कॉन्फ़िगर होना

Android ने जैपनीज़ और कोरियन भाषा के लिए, फ़्रेज़ के आधार पर लाइन ब्रेक की सुविधा शुरू की Android 13 (एपीआई लेवल 33). हालांकि, वाक्यांश के आधार पर लाइन ब्रेक से, टेक्स्ट की छोटी पंक्तियों को पढ़ना आता है, इसलिए ये टेक्स्ट की लंबी लाइनों के लिए ठीक से काम नहीं करते. Android 15 में, ऐप्लिकेशन सिर्फ़ छोटी लाइनों के लिए, फ़्रेज़ के आधार पर लाइन ब्रेक का इस्तेमाल कर सकते हैं LINE_BREAK_WORD_STYLE_AUTO का इस्तेमाल करके, टेक्स्ट का इस्तेमाल किया गया है का विकल्प शामिल है. यह विकल्प, टेक्स्ट के लिए सबसे सही वर्ड स्टाइल विकल्प चुनता है.

टेक्स्ट की छोटी लाइनों के लिए, फ़्रेज़-आधारित लाइन ब्रेक का इस्तेमाल किया जाता है, जो एक जैसी होती हैं LINE_BREAK_WORD_STYLE_PHRASE के तौर पर, जैसा कि निम्न चित्र:

टेक्स्ट की छोटी लाइनों के लिए, LINE_BREAK_WORD_STYLE_AUTO टेक्स्ट पढ़ने में आसान बनाने के लिए, फ़्रेज़ के आधार पर लाइन ब्रेक लागू करता है. यह वैसा ही है जैसे LINE_BREAK_WORD_STYLE_PHRASE लागू करना.

टेक्स्ट की लंबी लाइनों के लिए, LINE_BREAK_WORD_STYLE_AUTO "नहीं" का इस्तेमाल करता है पंक्ति ब्रेक शब्द शैली, जो इसके समान है LINE_BREAK_WORD_STYLE_NONE, जैसा कि निम्न चित्र:

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

जापानी हेन्टाइगाना फ़ॉन्ट

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

जैपनीज़ हेंटाइगाना के लिए किरदार और टेक्स्ट की स्टाइल फ़ॉन्ट का इस्तेमाल करें.

VideoLAN cone कॉपीराइट (c) 1996-2010 VideoLAN. इस लोगो या इसके बदले गए वर्शन का इस्तेमाल, कोई भी व्यक्ति VideoLAN प्रोजेक्ट या VideoLAN टीम के बनाए गए किसी भी प्रॉडक्ट के बारे में बताने के लिए कर सकता है. हालांकि, इसका मतलब यह नहीं है कि प्रोजेक्ट ने इस प्रॉडक्ट का प्रमोशन किया है.

Vulkan और Vulkan का लोगो, Khronos Group Inc. के रजिस्टर किए हुए ट्रेडमार्क हैं.

OpenGL एक रजिस्टर किया गया ट्रेडमार्क है और OpenGL ES लोगो, हेवलेट पैकार्ड एंटरप्राइज़ का ट्रेडमार्क है. इसका इस्तेमाल, Khronos की अनुमति से किया जाता है.