अलग-अलग GL टेक्सचर के लिए एक से ज़्यादा APK बनाना

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

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

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

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

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

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

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

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

Android डेवलपर गाइड, Android ऐप्लिकेशन में इस्तेमाल की जा सकने वाली कुछ सामान्य बनावटों की आसान जानकारी देती है supports-gl-texture पेज पर जाएं. इस पेज में कुछ संकेत भी हैं कि कौनसे फ़ोन (या फ़ोन के परिवार) किस तरह से काम करते हैं का इस्तेमाल किया जा सकता है. ध्यान दें कि आम तौर पर आपके किसी एक APK का समर्थन करना ETC1 फ़ॉर्मैट में है, क्योंकि यह टेक्सचर फ़ॉर्मैट, Android की मदद से चलने वाले उन सभी डिवाइसों पर काम करता है जो OpenGL ES के साथ काम करते हैं 2.0 स्पेसिफ़िकेशन.

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

ईटीसी1 एटीआई पावरवीआर

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

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

चाहे आप किसी मौजूदा 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 की सूची में शामिल कोई भी टेक्सचर फ़ॉर्मैट, मार्केट में उपलब्ध डिवाइस पर काम करता है, तो तो उस डिवाइस को मंज़ूरी दी गई

जीएल टेक्सचर के लिए, आखिरी नियम अहम है. इसका मतलब है कि आपको इतने समय के लिए उदाहरण के लिए, एक ही ऐप्लिकेशन में अलग-अलग GL फ़ॉर्मैट का इस्तेमाल करते समय बहुत सावधानी बरतें. अगर आपको पहले PowerVR 99% समय इस्तेमाल किया जाता था, लेकिन ETC1 का इस्तेमाल अपनी स्प्लैश स्क्रीन के लिए करें... इसके बाद, आपका मेनिफ़ेस्ट यह ज़रूरी है कि यह दोनों फ़ॉर्मैट पर काम करता हो. ऐसा डिवाइस जिस पर सिर्फ़ ETC1 काम करता हो उसे Android 14 के साथ काम करने वाला माना जाएगा, आपका ऐप्लिकेशन डाउनलोड होगा, और उपयोगकर्ता को कुछ रोमांचकारी क्रैश दिखेगा मैसेज. सामान्य स्थिति यह होगी कि अगर आप खास तौर से टारगेट करने के लिए, कई APKs का इस्तेमाल कर रहे हैं के लिए अलग-अलग डिवाइस हैं, जो जीएल टेक्सचर सपोर्ट के हिसाब से काम करते हैं. इसलिए, हर APK के लिए यह एक टेक्सचर फ़ॉर्मैट होगा.

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

उदाहरण के तौर पर, कुछ डिवाइस लें और देखें कि पहले तय किए गए APK में से कितने हर APK में फ़िट होता है डिवाइस.

फ़ूफ़ोन Nexus S इवो
ईटीसी1 ईटीसी1 ईटीसी1
पावरवीआर एटीआई टीसी

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

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

नीला: 1001, 1002, 1003, 1004...
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है हरा: 2001, 2002, 2003, 2004...
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है लाल:3001, 3002, 3003, 3004...

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

नीला:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
    ...

हरा:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_AMD_compressed_ATC_texture" />
    ...

लाल:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_IMG_texture_compression_pvrtc" />
    ...

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

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

  • सभी APK का पैकेज नाम एक ही होना चाहिए
  • सभी 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: 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

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

क्यों? ज़रूरी अनुमति SEND_SMS जोड़ने से, android.hardware.telephony की सुविधा की ज़रूरी शर्त को अपने-आप जोड़ दिया गया. हालांकि, ज़्यादातर (अगर सभी नहीं) बड़े डिवाइस ऐसे हैं जिनमें टेलीफ़ोनी हार्डवेयर नहीं है, तो ऐसे मामलों में 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 सही डिवाइस को टारगेट कर रहा है. बधाई हो, आपने कर दिखाया!