अलग-अलग एपीआई लेवल के लिए कई APK बनाएं

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

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

पुष्टि करें कि आपको एक से ज़्यादा APK की ज़रूरत है

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

अगर आप इसे प्रबंधित कर सकते हैं, तो अपने ऐप्लिकेशन को एक APK तक सीमित रखने के लिए कई फ़ायदों में ये शामिल हैं:

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

इस लेसन के बाकी हिस्से को यह माना जाता है कि आपने इस विषय पर रिसर्च की है और में हमने लेख पब्लिश किया है. साथ ही, यह भी तय किया है कि कई APK आपके का इस्तेमाल करें.

अपनी ज़रूरी शर्तें चार्ट पर रखें

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

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

3 4 5 6 7 8 9 10 11 12 13 +

अब चार्ट में बस इस तरह रंग भरें कि हर रंग एक APK को दिखाता हो. यहां इसका एक उदाहरण दिया गया है, जिससे आप प्रत्येक APK को API स्तरों की निश्चित श्रेणी पर लागू कर सकते हैं.

3 4 5 6 7 8 9 10 11 12 13 +

एक बार जब आप यह चार्ट बना लें, तो इसे अपनी टीम को वितरित करें. अपने प्रोजेक्ट के बारे में टीम से बातचीत करना यह तुरंत आसान हो गया, क्योंकि "एपीआई लेवल 3 से 6 के लिए APK की परफ़ॉर्मेंस कैसी है, आप जानते हैं, Android 1.x एक. यह कैसा रहेगा?" बस यह कहा जा सकता है कि "How is the Blue APK आ रहा है साथ-साथ?"

सभी कॉमन कोड और संसाधनों को किसी लाइब्रेरी प्रोजेक्ट में डालें

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

ध्यान दें: फ़ाइलों को लागू करने के दौरान, इसमें लाइब्रेरी प्रोजेक्ट शामिल नहीं हैं. यह इस लेसन में नहीं है. ज़्यादा जानने के लिए, Android लाइब्रेरी बनाएं लेख पढ़ें.

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

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

नए APK प्रोजेक्ट बनाना

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

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-red

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

मेनिफ़ेस्ट में बदलाव करें

जब कोई उपयोगकर्ता ऐसा ऐप्लिकेशन डाउनलोड करता है जो Google Play पर कई APK का इस्तेमाल करता है, तो सही इस्तेमाल के लिए APK, दो आसान नियमों का इस्तेमाल करके चुना जाता है:

  • मेनिफ़ेस्ट को यह दिखाना होगा कि खास APK को मंज़ूरी दी गई है
  • ज़रूरी शर्तें पूरी करने वाले APK में से, सबसे ज़्यादा वर्शन होने पर जीत मिली

उदाहरण के तौर पर, चलिए, पहले बताए गए अलग-अलग APK का सेट लेते हैं और यह मान लेते हैं कि हमने किसी भी APK के लिए ज़्यादा से ज़्यादा एपीआई लेवल सेट करें. अलग-अलग लिया जाता है, तो प्रत्येक APK की संभावित सीमा इस तरह दिखें:

3 4 5 6 7 8 9 10 11 12 13 +
3 4 5 6 7 8 9 10 11 12 13 +
3 4 5 6 7 8 9 10 11 12 13 +

क्योंकि यह ज़रूरी है कि ज़्यादा minSdkVersion वाले APK में हम जानते हैं कि versionCode की वैल्यू के हिसाब से, लाल ≥ हरा ≥ नीला. इसलिए, चार्ट को छोटा करके, हम उसे कुछ इस तरह देख सकते हैं:

3 4 5 6 7 8 9 10 11 12 13 +

अब, यह मान लेते हैं कि Red APK में कुछ ज़रूरी शर्तें हैं, जो बाकी दोनों में नहीं हैं. इसके Google Play पर फ़िल्टर पेज Android डेवलपर गाइड में संभावित अपराधियों की पूरी सूची दी गई है. उदाहरण के लिए, मान लेते हैं कि लाल रंग के लिए सामने के कैमरे की ज़रूरत है. असल में, लाल APK के साथ सामने वाले कैमरे को एपीआई में जोड़े गए शानदार नए फ़ंक्शन के साथ मिलाया जा सकता है 11. हालांकि, एपीआई 11 पर काम करने वाले सभी डिवाइसों में सामने के कैमरे नहीं होते! कॉन्टेंट बनाने हॉरर!

अच्छी बात यह है कि अगर कोई उपयोगकर्ता ऐसे किसी डिवाइस से Google Play ब्राउज़ कर रहा है, तो Google Play को देखते हैं, तो देखते हैं कि Red ने सामने वाले कैमरे को एक आवश्यकता के रूप में सूचीबद्ध कर दिया है और धीरे-धीरे इसे अनदेखा कर देता है, ने यह तय कर लिया है कि रेड और वह डिवाइस डिजिटल स्वर्ग से मेल नहीं खाते हैं. इसके बाद, उसे हरा रंग सिर्फ़ एपीआई 11 वाले डिवाइसों के साथ काम नहीं करता है (क्योंकि कोई maxSdkVersion तय नहीं किया गया था), लेकिन इस बात की परवाह नहीं होती कि वीडियो में फ़्रंट-फ़ेसिंग कैमरा है या नहीं! ऐप्लिकेशन अब भी डाउनलोड किया जा सकता है को ट्रैक किया है, क्योंकि फ़्रंट कैमरे में गड़बड़ी के बावजूद, वह APK जो उस खास एपीआई लेवल के साथ काम करता हो.

अपने सभी APK को अलग-अलग "ट्रैक" पर रखने के लिए, ज़रूरी है कि आपके पास एक अच्छा वर्शन कोड हो स्कीम. सुझाया गया तरीका, इसके वर्शन कोड क्षेत्र पर देखा जा सकता है हमारी डेवलपर गाइड देखें. APK का उदाहरण सेट, तीन में से किसी एक का ही इस्तेमाल कर रहा है में बदलना चाहते हैं, तो प्रत्येक APK को 1000 से अलग करना होगा, उस खास APK के लिए minSdkVersion डालें और वहां से बढ़ाएं. यह ऐसा दिख सकता है:

नीला: 03001, 03002, 03003, 03004...
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है हरा: 07001, 07002, 07003, 07004...
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है लाल:11,001, 11,002, 11,003, 11,004...

इन सभी को एक साथ मिलाकर, आपके Android मेनिफ़ेस्ट कुछ इस तरह दिखेंगे:

नीला:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="03001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="3" />
    ...

हरा:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="07001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="7" />
    ...

लाल:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="11001" android:versionName="1.0" package="com.example.foo">
    <uses-sdk android:minSdkVersion="11" />
    ...

अपने ऐप्लिकेशन के लॉन्च से पहले की चेकलिस्ट की समीक्षा करें

Google Play पर अपलोड करने से पहले, इन आइटम की दोबारा जांच करें. याद रखें कि ये खास तौर पर, एक से ज़्यादा APK के लिए होते हैं. ये किसी भी तरीके से, Google Play पर अपलोड किए जा रहे सभी ऐप्लिकेशन की पूरी चेकलिस्ट नहीं दिखाते हैं.

  • सभी APK का पैकेज नाम एक ही होना चाहिए
  • सभी APK एक ही सर्टिफ़िकेट से साइन किए जाने चाहिए
  • अगर प्लैटफ़ॉर्म वर्शन के APK एक-दूसरे से ओवरलैप करते हैं, तो minSdkVersion का बाद वाले APK का वर्शन कोड सबसे बाद में होना चाहिए
  • अलग-अलग जानकारी ढूंढने के लिए, मेनिफ़ेस्ट फ़िल्टर दोबारा जांच लें. ऐसा APK जो सिर्फ़ XLARGE स्क्रीन पर कपकेक के साथ काम करता है, इसलिए यह किसी को नहीं दिखेगा
  • हर APK का मेनिफ़ेस्ट कम से कम किसी एक स्क्रीन, OpenGL टेक्सचर या प्लैटफ़ॉर्म वर्शन में अलग-अलग होना चाहिए
  • हर APK को कम से कम एक डिवाइस पर टेस्ट करने की कोशिश करें. इसके अलावा, आपके पास अपनी डेवलपमेंट मशीन पर मौजूद, कारोबार के सबसे ज़्यादा पसंद के मुताबिक बनाए जा सकने वाले डिवाइस एम्युलेटर में से एक है. पागल करें!

मार्केट में भेजने से पहले, कंपाइल किए गए APK की जांच करना भी फ़ायदेमंद है, ताकि यह पक्का किया जा सके कि ऐसी कोई भी चीज़ जिससे Google Play पर आपका ऐप्लिकेशन छिप सकता है. यह टूल इस्तेमाल करना काफ़ी आसान है. "aapt" टूल. Aapt (Android ऐसेट पैकेजिंग टूल), ऐसी बिल्ड प्रोसेस का हिस्सा है जो कॉन्टेंट बनाने और जो आपके Android ऐप्लिकेशन को पैकेजिंग के लिए इस्तेमाल किया जाता है. यह उनके निरीक्षण करने का एक बहुत ही आसान टूल भी है.

>aapt dump badging
package: name='com.example.hello' versionCode='1' versionName='1.0'
sdkVersion:'11'
uses-permission:'android.permission.SEND_SMS'
application-label:'Hello'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Hello' icon='res/drawable-mdpi/icon.png'
launchable-activity: name='com.example.hello.HelloActivity'  label='Hello' icon=''
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'small' 'normal' 'large' 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

aapt आउटपुट की जांच करते समय, यह पक्का करें कि आपके पास और साथ में काम करने वाली स्क्रीन, और इसके साथ काम करने वाली स्क्रीन, और इसमें अनजाने में इस्तेमाल होने वाली "इस्तेमाल की सुविधा" वाला कोई विकल्प नहीं है मान जिन्हें मेनिफ़ेस्ट में सेट की गई अनुमतियों की वजह से जोड़ा गया था. ऊपर दिए गए उदाहरण में, APK बहुत सारे डिवाइसों को नहीं दिखेगा.

क्यों? ज़रूरी अनुमति SEND_SMS जोड़ने से, android.hardware.telephony की सुविधा की ज़रूरी शर्त को अपने-आप जोड़ दिया गया. एपीआई 11, Honeycomb (खास तौर पर टैबलेट के लिए ऑप्टिमाइज़ किया गया Android वर्शन) है और किसी भी Honeycomb डिवाइस में टेलीफ़ोनी हार्डवेयर नहीं है. इसलिए, Google Play इस APK को सभी मामलों में फ़िल्टर कर देगा. ऐसा तब तक होगा, जब तक आने वाले समय में, एपीआई लेवल की बेहतर सुविधाओं वाले डिवाइसों में टेलीफ़ोनी हार्डवेयर न हो.

अच्छी बात यह है कि अपने मेनिफ़ेस्ट में इन्हें जोड़कर, इस समस्या को आसानी से ठीक कर दिया जाता है:

<uses-feature android:name="android.hardware.telephony" android:required="false" />

android.hardware.touchscreen की ज़रूरी शर्त भी सीधे तौर पर जोड़ी गई है. अगर आप चाहते हैं कि आपका APK गैर-टचस्क्रीन डिवाइस वाले टीवी पर दिखाई दे, तो आपको अपने मेनिफ़ेस्ट में यह जानकारी जोड़नी चाहिए:

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

लॉन्च से पहले की चेकलिस्ट पूरी कर लेने के बाद, अपने APKs Google Play पर अपलोड करें. Google Play को ब्राउज़ करते समय ऐप्लिकेशन को दिखने में कुछ समय लग सकता है. हालांकि, ऐप्लिकेशन के दिखने पर आखिरी बार जांच करें. अपने किसी भी टेस्ट डिवाइस पर ऐप्लिकेशन को डाउनलोड करें. इससे यह पक्का किया जा सकेगा कि APK, सही डिवाइसों को टारगेट कर रहे हैं. बधाई हो, आपने कर दिखाया!