प्रॉडक्ट से जुड़ी खबरें
Android 17 में, स्क्रीन के साइज़ में बदलाव और ओरिएंटेशन से जुड़े बदलावों के लिए अपने ऐप्लिकेशन को तैयार करना
पढ़ने में 6 मिनट लगेंगे
हमने 2025 में Android 16 लॉन्च किया था. इस दौरान, हमने डिवाइस के ऐसे इकोसिस्टम के बारे में अपनी सोच शेयर की थी जिसमें ऐप्लिकेशन, किसी भी स्क्रीन के हिसाब से अपने-आप अडजस्ट हो जाते हैं. चाहे वह फ़ोन हो, फ़ोल्ड किया जा सकने वाला डिवाइस हो, टैबलेट हो, डेस्कटॉप हो, कार का डिसप्ले हो या XR डिवाइस हो. लोगों को उम्मीद होती है कि उनके ऐप्लिकेशन हर डिवाइस पर काम करें. चाहे टैबलेट पर मल्टीटास्किंग करना हो, आराम से पढ़ने के लिए डिवाइस को अनफ़ोल्ड करना हो या डेस्कटॉप विंडोइंग एनवायरमेंट में ऐप्लिकेशन चलाना हो, लोगों को उम्मीद होती है कि यूज़र इंटरफ़ेस (यूआई), डिसप्ले की पूरी जगह में दिखे और डिवाइस की पोज़िशन के हिसाब से अडजस्ट हो.
हमने ओरिएंटेशन और स्क्रीन के साइज़ में बदलाव से जुड़े एपीआई में अहम बदलाव किए हैं. इससे ऐप्लिकेशन को अडैप्टिव बनाने में मदद मिलेगी. साथ ही, हमने आपको ट्रांज़िशन में मदद करने के लिए, अस्थायी तौर पर ऑप्ट-आउट करने का विकल्प दिया है. हमने पहले ही कई डेवलपर को एपीआई लेवल 36 को टारगेट करते समय, इस ट्रांज़िशन के हिसाब से अपने ऐप्लिकेशन को अडजस्ट करते हुए देखा है.
अब हम Android 17 के बीटा वर्शन को लॉन्च कर रहे हैं. इसके साथ ही, हम अडैप्टिव रोडमैप के अगले फ़ेज़ में जा रहे हैं: Android 17 (एपीआई लेवल 37) में, बड़ी स्क्रीन वाले डिवाइसों (sw > 600 dp) पर, ओरिएंटेशन और स्क्रीन के साइज़ में बदलाव से जुड़ी पाबंदियों के लिए, डेवलपर के ऑप्ट-आउट करने के विकल्प को हटा दिया गया है. एपीआई लेवल 37 को टारगेट करने पर, आपके ऐप्लिकेशन में अलग-अलग डिसप्ले साइज़ के हिसाब से अडजस्ट होने की क्षमता होनी चाहिए.
काम करने के तरीके में हुए बदलावों से यह पक्का होता है कि Android इकोसिस्टम, सभी डिवाइस फ़ॉर्म फ़ैक्टर पर एक जैसा और बेहतर अनुभव दे.
Android 17 में क्या बदल रहा है
Android 17 को टारगेट करने वाले ऐप्लिकेशन के लिए, यह पक्का करना ज़रूरी है कि वे Android 16 में पेश किए गए मेनिफ़ेस्ट एट्रिब्यूट और रनटाइम एपीआई के साथ काम करें. हम जानते हैं कि कुछ ऐप्लिकेशन के लिए यह एक बड़ा ट्रांज़िशन हो सकता है. इसलिए, हमने इस ब्लॉग पोस्ट में, बाद में होने वाली सामान्य समस्याओं से बचने के लिए सबसे सही तरीके और टूल शामिल किए हैं.
Android 16 के बाद से कोई नया बदलाव नहीं किया गया है. हालांकि, अब डेवलपर के पास ऑप्ट-आउट करने का विकल्प नहीं है. आपको याद दिला दें कि जब आपका ऐप्लिकेशन, बड़ी स्क्रीन पर चलता है, तो बड़ी स्क्रीन का मतलब है कि डिसप्ले का छोटा डाइमेंशन, 600 dp या उससे ज़्यादा है. ऐसे में, मेनिफ़ेस्ट के इन एट्रिब्यूट और एपीआई को अनदेखा किया जाता है:
ध्यान दें: जैसा कि Android 16 के बारे में पहले बताया गया था, ये बदलाव, sw 600 dp से छोटी स्क्रीन या android:appCategory फ़्लैग के आधार पर गेम के तौर पर कैटगरी में शामिल किए गए ऐप्लिकेशन पर लागू नहीं होते.
| मेनिफ़ेस्ट एट्रिब्यूट/एपीआई | अनदेखी की जाने वाली वैल्यू |
| screenOrientation | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
| setRequestedOrientation() | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
| resizeableActivity | सभी |
| minAspectRatio | सभी |
| maxAspectRatio | सभी |
इसके अलावा, लोगों के पास कंट्रोल बनाए रखने का विकल्प होता है. आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की सेटिंग में, लोग साफ़ तौर पर ऐप्लिकेशन के अनुरोध किए गए व्यवहार का इस्तेमाल करने के लिए ऑप्ट-इन कर सकते हैं.
अपने ऐप्लिकेशन को तैयार करना
ऐप्लिकेशन को, लैंडस्केप और पोर्ट्रेट लेआउट के साथ-साथ, आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की पूरी रेंज में डिसप्ले साइज़ के लिए काम करना होगा. इसमें, वे सभी डिवाइस शामिल हैं जिन पर लोग ऐप्लिकेशन का इस्तेमाल कर सकते हैं. इनमें, साइज़ बदलने वाली विंडो भी शामिल हैं. ऐसा इसलिए, क्योंकि अब आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) और ओरिएंटेशन को पोर्ट्रेट या लैंडस्केप तक सीमित करने का कोई तरीका नहीं होगा.
अपने ऐप्लिकेशन की जांच करना
सबसे पहले, अपने ऐप्लिकेशन की जांच करें, ताकि यह पक्का किया जा सके कि वह अलग-अलग डिसप्ले साइज़ पर ठीक से काम करता है.
Android Studio में, Pixel Tablet और Pixel Fold सीरीज़ के एम्युलेटर के साथ Android 17 का बीटा वर्शन 1 इस्तेमाल करें. साथ ही, targetSdkPreview = “CinnamonBun” सेट करें. इसके अलावा, अगर आपका ऐप्लिकेशन अब तक एपीआई लेवल 36 को टारगेट नहीं करता है, तो ऐप्लिकेशन की कंपैटिबिलिटी फ़्रेमवर्क का इस्तेमाल करके, UNIVERSAL_RESIZABLE_BY_DEFAULT फ़्लैग को चालू किया जा सकता है.
हमारे पास ऐसे टूल मौजूद हैं जिनसे यह पक्का किया जा सकता है कि आपके लेआउट सही तरीके से अडजस्ट हों. Compose UI Check की मदद से, यूज़र इंटरफ़ेस (यूआई) का ऑडिट अपने-आप किया जा सकता है. साथ ही, यूज़र इंटरफ़ेस (यूआई) को ज़्यादा अडैप्टिव बनाने के लिए सुझाव पाए जा सकते हैं. इसके अलावा, DeviceConfigurationOverride का इस्तेमाल करके, अपनी जांच में डिसप्ले की खास विशेषताओं को सिम्युलेट किया जा सकता है.
ऐसे ऐप्लिकेशन जो पहले ओरिएंटेशन और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को सीमित करते थे उनमें, आम तौर पर ये समस्याएं देखी जाती हैं: कैमरे की झलक का तिरछा या गलत ओरिएंटेशन में दिखना, लेआउट का स्ट्रेच होना, बटन का ऐक्सेस न हो पाना या कॉन्फ़िगरेशन में बदलावों को मैनेज करते समय, उपयोगकर्ता की स्थिति का डेटा खो जाना.
आइए, इन सामान्य समस्याओं को हल करने के लिए कुछ रणनीतियों पर नज़र डालते हैं.
पक्का करें कि कैमरा कंपैटिबल हो
लैंडस्केप में फ़ोल्ड किए जा सकने वाले डिवाइसों या मल्टी-विंडो, डेस्कटॉप विंडोइंग या कनेक्टेड डिसप्ले जैसे सिनेरियो में, आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की कैलकुलेशन के दौरान, आम तौर पर यह समस्या होती है कि कैमरे की झलक स्ट्रेच, रोटेट या क्रॉप होकर दिखती है.
पक्का करें कि कैमरे की झलक स्ट्रेच या रोटेट न हो.
यह समस्या अक्सर बड़ी स्क्रीन और फ़ोल्ड किए जा सकने वाले डिवाइसों पर होती है. ऐसा इसलिए होता है, क्योंकि ऐप्लिकेशन, कैमरे की सुविधाओं (जैसे, आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) और सेंसर ओरिएंटेशन) और डिवाइस की सुविधाओं (जैसे, डिवाइस ओरिएंटेशन और नैचुरल ओरिएंटेशन) के बीच तय किए गए संबंधों को मानते हैं.
यह पक्का करने के लिए कि कैमरे की झलक, विंडो के किसी भी साइज़ या ओरिएंटेशन के हिसाब से सही तरीके से अडजस्ट हो, इन चार तरीकों को अपनाएं:
पहला तरीका: Jetpack CameraX (इसे इस्तेमाल करने की सलाह दी जाती है)
सबसे आसान और मज़बूत तरीका है कि Jetpack CameraX लाइब्रेरी का इस्तेमाल किया जाए. इसके PreviewView यूज़र इंटरफ़ेस (यूआई) एलिमेंट को, झलक से जुड़ी सभी मुश्किलों को अपने-आप मैनेज करने के लिए डिज़ाइन किया गया है:
PreviewView, सेंसर ओरिएंटेशन, डिवाइस रोटेशन, और स्केलिंग के हिसाब से सही तरीके से अडजस्ट होता है- PreviewView, कैमरे की इमेज के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को बनाए रखता है. आम तौर पर, यह इमेज को बीच में रखकर और क्रॉप करके (
FILL_CENTER) ऐसा करता है - ज़रूरत पड़ने पर, झलक को लेटरबॉक्स करने के लिए, स्केल टाइप को
FIT_CENTERपर सेट किया जा सकता है
ज़्यादा जानकारी के लिए, CameraX के दस्तावेज़ में झलक लागू करना लेख पढ़ें.
दूसरा तरीका: CameraViewfinder
अगर Camera2 के मौजूदा कोडबेस का इस्तेमाल किया जा रहा है, तो CameraViewfinder लाइब्रेरी (एपीआई लेवल 21 के साथ बैकवर्ड कंपैटिबल) एक और आधुनिक तरीका है. यह TextureView या SurfaceView का इस्तेमाल करके, कैमरे के फ़ीड को दिखाने की प्रोसेस को आसान बनाता है. साथ ही, यह आपके लिए ज़रूरी सभी बदलाव (आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात), स्केल, और रोटेशन) लागू करता है.
ज़्यादा जानकारी के लिए, Camera Viewfinder लॉन्च किया जा रहा है ब्लॉग पोस्ट और कैमरे की झलक डेवलपर गाइड देखें.
तीसरा तरीका: Camera2 को मैन्युअल तरीके से लागू करना
अगर CameraX या CameraViewfinder का इस्तेमाल नहीं किया जा सकता, तो आपको मैन्युअल तरीके से ओरिएंटेशन और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की कैलकुलेशन करनी होगी. साथ ही, यह पक्का करना होगा कि कॉन्फ़िगरेशन में हर बदलाव के साथ, कैलकुलेशन अपडेट हो:
CameraCharacteristicsसे, कैमरे के सेंसर का ओरिएंटेशन (उदाहरण के लिए, 0, 90, 180, 270 डिग्री) पाएं- डिवाइस के डिसप्ले का मौजूदा रोटेशन (उदाहरण के लिए, 0, 90, 180, 270 डिग्री) पाएं
SurfaceViewयाTextureViewके लिए ज़रूरी बदलावों का पता लगाने के लिए, कैमरे के सेंसर के ओरिएंटेशन और डिसप्ले रोटेशन की वैल्यू का इस्तेमाल करें- यह पक्का करें कि आपके आउटपुट
Surfaceका आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात), कैमरे की झलक के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से मेल खाता हो, ताकि इमेज में कोई गड़बड़ी न हो
अहम जानकारी: ध्यान दें कि कैमरा ऐप्लिकेशन, स्क्रीन के किसी हिस्से में चल रहा हो सकता है. यह मल्टी-विंडो या डेस्कटॉप विंडोइंग मोड में या कनेक्टेड डिसप्ले पर हो सकता है. इसलिए, कैमरे के व्यूफ़ाइंडर के डाइमेंशन तय करने के लिए, स्क्रीन साइज़ का इस्तेमाल नहीं किया जाना चाहिए. इसके बजाय, विंडो मेट्रिक का इस्तेमाल करें. ऐसा न करने पर, कैमरे की झलक स्ट्रेच हो सकती है.
ज़्यादा जानकारी के लिए, कैमरे की झलक डेवलपर गाइड और अलग-अलग फ़ॉर्म फ़ैक्टर पर आपका कैमरा ऐप्लिकेशन वीडियो देखें.
चौथा तरीका: इंटेंट का इस्तेमाल करके, कैमरे की बुनियादी कार्रवाइयां करना
अगर आपको कैमरे की ज़्यादा सुविधाओं की ज़रूरत नहीं है, तो एक आसान और सीधा तरीका यह है कि डिवाइस के डिफ़ॉल्ट कैमरा ऐप्लिकेशन का इस्तेमाल करके, फ़ोटो या वीडियो कैप्चर करने जैसी बुनियादी कार्रवाइयां की जाएं. इस मामले में, रखरखाव और अडैप्टेबिलिटी को आसान बनाने के लिए, कैमरा लाइब्रेरी के साथ इंटिग्रेट करने के बजाय, सिर्फ़ Intent का इस्तेमाल किया जा सकता है.
ज़्यादा जानकारी के लिए, कैमरे के इंटेंट लेख पढ़ें.
स्ट्रेच हुए यूज़र इंटरफ़ेस (यूआई) या ऐक्सेस न किए जा सकने वाले बटन से बचना
अगर आपका ऐप्लिकेशन, डिवाइस के किसी खास ओरिएंटेशन या डिसप्ले के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को मानता है, तो अलग-अलग ओरिएंटेशन या विंडो साइज़ में इस्तेमाल किए जाने पर, ऐप्लिकेशन में समस्याएं आ सकती हैं.
पक्का करें कि बड़ी स्क्रीन पर बटन, टेक्स्ट फ़ील्ड, और अन्य एलिमेंट स्ट्रेच न हों.
हो सकता है कि आपने बटन, टेक्स्ट फ़ील्ड, और कार्ड को fillMaxWidth या match_parent पर सेट किया हो. फ़ोन पर, यह बहुत अच्छा दिखता है. हालांकि, टैबलेट या लैंडस्केप में फ़ोल्ड किए जा सकने वाले डिवाइस पर, यूज़र इंटरफ़ेस (यूआई) एलिमेंट, पूरी बड़ी स्क्रीन पर स्ट्रेच हो जाते हैं. Jetpack Compose में, कॉम्पोनेंट के लिए ज़्यादा से ज़्यादा चौड़ाई सेट करने के लिए, widthIn मॉडिफ़ायर का इस्तेमाल किया जा सकता है. इससे कॉन्टेंट स्ट्रेच नहीं होता:
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize()
) {
Column(
modifier = Modifier
.widthIn(max = 300.dp) // Prevents stretching beyond 300dp
.fillMaxWidth() // Fills width up to 300dp
.padding(16.dp)
) {
// Your content
}
}
अगर कोई व्यक्ति, फ़ोल्ड किए जा सकने वाले डिवाइस या टैबलेट पर, लैंडस्केप ओरिएंटेशन में आपका ऐप्लिकेशन खोलता है, तो स्क्रीन के सबसे नीचे मौजूद, सेव करें या लॉग इन करें जैसे ऐक्शन बटन, स्क्रीन से बाहर दिख सकते हैं. अगर कंटेनर को स्क्रोल नहीं किया जा सकता, तो उपयोगकर्ता आगे नहीं बढ़ पाएगा. Jetpack Compose में, अपने कॉम्पोनेंट में verticalScroll मॉडिफ़ायर जोड़ा जा सकता है:
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(16.dp)
)
ज़्यादा से ज़्यादा चौड़ाई की पाबंदियों को वर्टिकल स्क्रोलिंग के साथ मिलाकर, यह पक्का किया जा सकता है कि आपका ऐप्लिकेशन काम करता रहे और इस्तेमाल किया जा सके. भले ही, ऐप्लिकेशन की विंडो का साइज़ कितना भी बड़ा या छोटा हो जाए.
_अडैप्टिव लेआउट बनाने_ के बारे में हमारी गाइड देखें.
कॉन्फ़िगरेशन में बदलावों के साथ स्थिति बनाए रखना
ओरिएंटेशन और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदियों को हटाने का मतलब है कि आपके ऐप्लिकेशन की विंडो का साइज़, ज़्यादा बार बदलेगा. लोग अपने डिवाइस को रोटेट कर सकते हैं, उसे फ़ोल्ड/अनफ़ोल्ड कर सकते हैं या स्प्लिट-स्क्रीन या डेस्कटॉप विंडोइंग मोड में, आपके ऐप्लिकेशन का साइज़ डाइनैमिक तरीके से बदल सकते हैं.
डिफ़ॉल्ट रूप से, कॉन्फ़िगरेशन में इन बदलावों की वजह से, आपकी गतिविधि खत्म हो जाती है और फिर से शुरू होती है. अगर आपका ऐप्लिकेशन, लाइफ़साइकल के इस इवेंट को सही तरीके से मैनेज नहीं करता है, तो लोगों को परेशानी होगी: स्क्रोल की पोज़िशन, सबसे ऊपर पर रीसेट हो जाती हैं, आधे भरे हुए फ़ॉर्म मिट जाते हैं, और नेविगेशन इतिहास खो जाता है. अडैप्टिव अनुभव को बेहतर बनाने के लिए, यह ज़रूरी है कि आपका ऐप्लिकेशन, कॉन्फ़िगरेशन में इन बदलावों के दौरान स्थिति बनाए रखे. Jetpack Compose की मदद से, फिर से शुरू होने से ऑप्ट-आउट किया जा सकता है. इसके बजाय, विंडो के साइज़ में बदलावों की अनुमति दी जा सकती है, ताकि यूज़र इंटरफ़ेस (यूआई) को फिर से कंपोज़ किया जा सके और उपलब्ध नई जगह दिखाई जा सके.
_यूज़र इंटरफ़ेस (यूआई) की स्थिति सेव करने_ के बारे में हमारी गाइड देखें.
अगस्त 2027 तक, एपीआई लेवल 37 को टारगेट करना
अगर आपके ऐप्लिकेशन ने पहले एपीआई लेवल 36 को टारगेट करते समय, इन बदलावों से ऑप्ट-आउट किया था, तो आपके ऐप्लिकेशन पर, Android 17 में ऑप्ट-आउट करने की सुविधा को हटाने का असर, सिर्फ़ तब पड़ेगा, जब आपका ऐप्लिकेशन एपीआई लेवल 37 को टारगेट करेगा. आपको पहले से तैयारी करने और अपने ऐप्लिकेशन में ज़रूरी बदलाव करने में मदद करने के लिए, यहां वह समयावधि दी गई है जिसके दौरान ये बदलाव लागू होंगे:
- Android 17: ऊपर बताए गए बदलाव, बड़ी स्क्रीन वाले डिवाइसों (सबसे छोटी स्क्रीन की चौड़ाई > 600 dp) के लिए, एपीआई लेवल 37 को टारगेट करने वाले ऐप्लिकेशन के लिए, डिफ़ॉल्ट अनुभव होंगे. डेवलपर के पास ऑप्ट-आउट करने का विकल्प नहीं होगा.
किसी खास एपीआई लेवल को टारगेट करने की समयसीमा, ऐप्लिकेशन स्टोर के हिसाब से अलग-अलग होती है. Google Play के लिए, नए ऐप्लिकेशन और अपडेट को एपीआई लेवल 37 को टारगेट करना होगा. इसलिए, अगस्त 2027 में डिस्ट्रिब्यूशन के लिए, यह ज़रूरी होगा.
Android 17 के लिए तैयारी करना
Android 17 में ऐप्लिकेशन पर असर डालने वाले सभी बदलावों के बारे में जानने के लिए, Android 17 में हुए बदलावों का पेज देखें. अपने ऐप्लिकेशन की जांच करने के लिए, Android 17 का बीटा वर्शन 1 डाउनलोड करें और targetSdkPreview = “CinnamonBun” पर अपडेट करें. इसके अलावा, खास बदलावों को चालू करने के लिए, ऐप्लिकेशन की कंपैटिबिलिटी फ़्रेमवर्क का इस्तेमाल करें.
Android का भविष्य अडैप्टिव है. हम आपको वहां तक पहुंचने में मदद करेंगे. हमारा सुझाव है कि Android 17 के लिए तैयारी करते समय, अडैप्टिव लेआउट बनाने के बारे में हमारी गाइड और बड़ी स्क्रीन की क्वालिटी के लिए दिशा-निर्देश देखें. इन संसाधनों को, अलग-अलग फ़ॉर्म फ़ैक्टर और विंडो साइज़ को आसानी से मैनेज करने में मदद करने के लिए डिज़ाइन किया गया है.
देर न करें. Android 17 के लिए आज ही से तैयारी शुरू करें!
पढ़ना जारी रखें
-
प्रॉडक्ट से जुड़ी खबरें
Android इकोसिस्टम में, Pixel 10 Pro Fold जैसे नए फ़ॉर्म फ़ैक्टर शामिल होने के साथ, फ़ोन, टैबलेट, और फ़ोल्ड किए जा सकने वाले डिवाइसों पर बेहतर उपयोगकर्ता अनुभव देने के लिए, अडैप्टिव ऐप्लिकेशन डेवलपमेंट ज़रूरी है.
Fahd Imtiaz, Miguel Montemayor • पढ़ने में 3 मिनट लगेंगे
-
प्रॉडक्ट से जुड़ी खबरें
मोबाइल इकोसिस्टम हमेशा बदलता रहता है. इससे नए अवसर और नए खतरे दोनों सामने आते हैं. इन बदलावों के बावजूद, Android और Google Play यह पक्का करने के लिए प्रतिबद्ध हैं कि अरबों लोग, भरोसे के साथ अपने ऐप्लिकेशन का इस्तेमाल जारी रख सकें और डेवलपर के इनोवेशन को बढ़ावा मिल सके.
Vijaya Kaza • पढ़ने में 3 मिनट लगेंगे
-
प्रॉडक्ट से जुड़ी खबरें
Jetpack Compose का अप्रैल '26 वर्शन, स्टेबल है. इस वर्शन में, Compose के मुख्य मॉड्यूल का वर्शन 1.11 (BOM मैपिंग देखें), शेयर किए गए एलिमेंट के डीबग टूल, ट्रैकपैड इवेंट वगैरह शामिल हैं.
Meghan Mehta • पढ़ने में 5 मिनट लगेंगे
अप-टू-डेट रहें
हर हफ़्ते, Android डेवलपमेंट से जुड़ी नई जानकारी अपने इनबॉक्स में पाएं.