Android ऐप्लिकेशन बंडल में, टेक्सचर कंप्रेस करने के फ़ॉर्मैट को टारगेट करना

टेक्सचर ऐसी इमेज होती हैं जिन्हें 3D मॉडल की सतह पर लागू किया जा सकता है. टेक्सचर का इस्तेमाल, 2D रेंडरर भी करते हैं. इससे स्प्राइट या बैकग्राउंड जैसे एलिमेंट बनाए जाते हैं. इस पेज पर, गेम में इस्तेमाल किए जाने वाले लोकप्रिय टेक्सचर कंप्रेशन फ़ॉर्मैट के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि उन्हें Android ऐप्लिकेशन बंडल में कैसे टारगेट किया जाए. इस गाइड को शुरू करने से पहले, Android ऐप्लिकेशन बंडल और Play ऐसेट डिलीवरी के बारे में पढ़ें.

बैकग्राउंड

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

यहां आधुनिक मोबाइल हार्डवेयर पर, टेक्सचर कंप्रेस करने के सामान्य फ़ॉर्मैट दिए गए हैं:

  • एएसटीसी: यह नया फ़ॉर्मैट है, जिसे पुराने फ़ॉर्मैट की जगह लेने के लिए डिज़ाइन किया गया है. यह पिछले फ़ॉर्मैट की तुलना में ज़्यादा सुविधाजनक है, क्योंकि इसमें अलग-अलग साइज़ के ब्लॉक इस्तेमाल किए जा सकते हैं. इस फ़ॉर्मैट का इस्तेमाल करके, अपने गेम के साइज़ को ऑप्टिमाइज़ किया जा सकता है.
  • ETC2: यह उन सभी डिवाइसों पर काम करता है जिन पर OpenGL ES 3.0 और इसके बाद के वर्शन काम करते हैं. इसमें, इस्तेमाल किए जा रहे करीब-करीब सभी Android फ़ोन या टैबलेट शामिल हैं.

ये फ़ॉर्मैट, Android डिवाइसों के इन अनुमानित प्रतिशत के साथ काम करते हैं:

टेक्स्चर कंप्रेस करने का फ़ॉर्मैट Google Play की सुविधा वाले डिवाइसों का प्रतिशत
ASTC >80%
ETC2 >95%

Google Play Games on PC का इस्तेमाल करने वाले डेस्कटॉप कंप्यूटर के जीपीयू भी इस फ़ॉर्मैट के साथ काम करते हैं:

  • डीडीएस या S3TC: इसे कभी-कभी BCn, DXTC या DXTn भी कहा जाता है.

टेक्सचर कंप्रेस करने के पुराने फ़ॉर्मैट, जिनका अब सुझाव नहीं दिया जाता:

  • ETC1: यह ज़्यादातर डिवाइसों पर काम करता है. इस फ़ॉर्मैट में पारदर्शिता की सुविधा नहीं होती. हालांकि, गेम में ऐल्फ़ा कॉम्पोनेंट के लिए, दूसरी टेक्स्चर फ़ाइल का इस्तेमाल किया जा सकता है.
  • PVRTC: यह iOS गेम के लिए लोकप्रिय है. साथ ही, यह कुछ Android डिवाइसों पर भी काम करता है.

ETC1 की सुविधा सिर्फ़ उन गेम के लिए ज़रूरी है जो बहुत पुराने डिवाइसों या चुनिंदा Android TV डिवाइसों पर काम करते हैं. इन डिवाइसों पर OpenGL ES 3.0 और इसके बाद के वर्शन काम नहीं करते.

डिफ़ॉल्ट फ़ॉर्मैट

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

अगर आपको बहुत पुराने डिवाइस हार्डवेयर को टारगेट नहीं करना है, तो डिफ़ॉल्ट फ़ॉर्मैट के लिए ETC2 एक अच्छा विकल्प है. OpenGL ES 3.0 में काम करने वाले ETC2 फ़ॉर्मैट का इस्तेमाल करें. ये फ़ॉर्मैट, Vulkan ग्राफ़िक्स एपीआई में भी उपलब्ध हैं.

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

अगर आपका गेम, Google Play Games on PC के साथ काम करता है और Vulkan का इस्तेमाल करता है, तो आपको S3TC टेक्स्चर शामिल करने चाहिए. S3TC फ़ॉर्मैट, सभी डेस्कटॉप जीपीयू के साथ काम करते हैं.

ऐप्लिकेशन बंडल बनाना

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

अगर आपका गेम Unity में नहीं है, तो ऐप्लिकेशन बंडल बनाने के लिए Gradle का इस्तेमाल करें. ऐडवांस उपयोगकर्ता, bundletool का इस्तेमाल करना चाह सकते हैं.

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

Gradle का इस्तेमाल करना

  1. अपने प्रोजेक्ट की build.gradle फ़ाइल में, Android Gradle प्लगिन के वर्शन को 4.1 या इसके बाद के वर्शन पर अपडेट करें. उदाहरण के लिए, com.android.tools.build:gradle:4.1.0.

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

  3. पिछले चरण में बताए गए हर टेक्सचर कंप्रेशन फ़ॉर्मैट के लिए, अपनी ऐसेट के वर्शन बनाएं. इसमें TexturePacker जैसे सॉफ़्टवेयर का इस्तेमाल करके, स्प्राइट शीट जनरेट करना या ऐसी स्क्रिप्ट चलाना शामिल हो सकता है जो रॉ ऐसेट को किसी खास फ़ॉर्मैट में बदलती है. उदाहरण के लिए, astc-encoder.

  4. ऐसेट पैक बनाएं (C++ या Java के लिए बनाएं देखें). इनमें आपके गेम की ऐसेट होती हैं और इनका इस्तेमाल Play ऐसेट डिलीवरी के लिए किया जाता है. उदाहरण के लिए, हर लेवल के लिए एक ऐसेट पैक या गेम के अलग-अलग हिस्सों के लिए ऐसेट पैक बनाए जा सकते हैं.

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

    एक ऐसी डायरेक्ट्री बनाएं जिसके नाम में कोई सफ़िक्स न हो (उदाहरण के लिए, common/src/main/assets/textures/). इस डायरेक्ट्री में, अपनी टेक्सचर ऐसेट का डिफ़ॉल्ट फ़ॉर्मैट डालें. यह डिफ़ॉल्ट फ़ॉर्मैट, ज़्यादातर डिवाइसों पर काम करना चाहिए. उदाहरण के लिए, ETC1 या ETC2. अगर कोई डिवाइस, बताए गए अन्य फ़ॉर्मैट के साथ काम नहीं करता है, तो Google Play Store इस डायरेक्ट्री को इंस्टॉल करता है. उदाहरण के लिए, नीचे दी गई टेबल में PVRTC और ASTC.

    पहले की डायरेक्ट्री इसके बाद की डायरेक्ट्री
    common ऐसेट पैक:
    common/build.gradle
    common/src/main/assets/textures/...
    common ऐसेट पैक:
    common/build.gradle
    common/src/main/assets/textures/...
    common/src/main/assets/textures#tcf_astc/...
    common/src/main/assets/textures#tcf_pvrtc/...
    level1 ऐसेट पैक:
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1 ऐसेट पैक:
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1/src/main/assets/textures#tcf_astc/...
    level1/src/main/assets/textures#tcf_pvrtc/...
    level2 ऐसेट पैक:
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2 ऐसेट पैक:
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2/src/main/assets/textures#tcf_astc/...
    level2/src/main/assets/textures#tcf_pvrtc/...
  6. अपने ऐप्लिकेशन की build.gradle फ़ाइल को अपडेट करें, ताकि टेक्सचर के हिसाब से ऐसेट पैक को अलग-अलग करने की सुविधा चालू की जा सके.

    // In the app build.gradle file:
    android {
        ...
        bundle {
            texture {
                enableSplit true
            }
        }
    }
    
  7. Android Studio में, Build > Generate Signed Bundle / APK को चुनें या अपना बंडल जनरेट करने के लिए, कमांड लाइन से Gradle टास्क लॉन्च करें.

Google Play Unity प्लगिन का इस्तेमाल करना

टेक्सचर के हिसाब से बनाए गए ऐसेट पैक वाला ऐप्लिकेशन बंडल बनाने के लिए, Play ऐसेट डिलीवरी के लिए Unity प्लगिन (या पैकेज) डाउनलोड करें.

ऐसेट तैयार करना

ऐप्लिकेशन बंडल बनाने के लिए, टेक्सचर एसेट तैयार करने के लिए, यह तरीका अपनाएं:

  1. अपने सीन और ऐसेट को कई Unity AssetBundles में पैकेज करें.

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

  3. अपने गेम की बिल्ड स्क्रिप्ट में बदलाव करें, ताकि AssetBundles को कई बार जनरेट किया जा सके. आपको जिस टेक्सचर फ़ॉर्मैट के लिए AssetBundles जनरेट करना है उसके लिए एक बार जनरेट करें. यहां दी गई स्क्रिप्ट का उदाहरण देखें:

    using Google.Android.AppBundle.Editor;
    using UnityEditor;
    
    public class MyBundleBuilder
    {
       [MenuItem("Assets/Build AssetBundles TCF variants")]
       public static void BuildAssetBundles()
       {
           // Describe the AssetBundles to be built:
           var assetBundlesToBuild = new []
           {
               new AssetBundleBuild
               {
                   assetBundleName = "level1-textures",
                   assetNames = new[] {"level1/character-textures", "level1/background-textures"}
               },
               new AssetBundleBuild
               {
                   assetBundleName = "level2-textures",
                   assetNames = new[] {"level2/character-textures", "level2/background-textures"}
               }
           };
    
           // Describe where to output the asset bundles and in which formats:
           var outputPath = "Assets/AssetBundles";
           var defaultTextureFormat = MobileTextureSubtarget.ETC2;
           var additionalTextureFormats = new[] { MobileTextureSubtarget.ASTC, MobileTextureSubtarget.PVRTC }
           var allowClearDirectory = true;
    
           // Generate asset bundles:
           AssetBundleBuilder.BuildAssetBundles(
               outputPath,
               assetBundlesToBuild,
               BuildAssetBundleOptions.UncompressedAssetBundle,
               defaultTextureFormat,
               additionalTextureFormats,
               allowClearDirectory);
    
           // While in this example we're using the UI to configure the
           // AssetBundles, you can use the value returned by BuildAssetBundles
           // to configure the asset packs, if you want to build the bundle
           // entirely using the scripting API.
       }
    }
    
  4. पुष्टि करें कि हर टेक्सचर ऐसेट, डायरेक्ट्री में सही सफ़िक्स के साथ आउटपुट की गई हो. उदाहरण के लिए, #tcf_astc.

    पुष्टि करें कि आउटपुट के तौर पर ऐसी डायरेक्ट्री मौजूद हो जिसके नाम में कोई सफ़िक्स न हो. उदाहरण के लिए, Assets/AssetBundles/. इस डायरेक्ट्री में, आपकी टेक्सचर ऐसेट का डिफ़ॉल्ट फ़ॉर्मैट मौजूद होता है. यह डिफ़ॉल्ट फ़ॉर्मैट, ज़्यादातर डिवाइसों पर काम करना चाहिए. उदाहरण के लिए, ETC2. अगर कोई डिवाइस, बताए गए अन्य फ़ॉर्मैट के साथ काम नहीं करता है, तो Google Play Store इस डायरेक्ट्री को इंस्टॉल करता है. उदाहरण के लिए, पिछले चरण के कोड में ASTC.

    Assets/AssetBundles.meta
    Assets/AssetBundles/AssetBundles
    Assets/AssetBundles/AssetBundles.manifest
    Assets/AssetBundles/AssetBundles.manifest.meta
    Assets/AssetBundles/AssetBundles.meta
    Assets/AssetBundles/samplescene
    Assets/AssetBundles/samplescene.manifest
    Assets/AssetBundles/samplescene.manifest.meta
    Assets/AssetBundles/samplescene.meta
    Assets/AssetBundles/texturesbundle
    Assets/AssetBundles/texturesbundle.manifest
    Assets/AssetBundles/texturesbundle.manifest.meta
    Assets/AssetBundles/texturesbundle.meta
    Assets/AssetBundles#tcf_astc.meta
    Assets/AssetBundles#tcf_astc/AssetBundles
    Assets/AssetBundles#tcf_astc/AssetBundles.manifest
    Assets/AssetBundles#tcf_astc/AssetBundles.manifest.meta
    Assets/AssetBundles#tcf_astc/AssetBundles.meta
    Assets/AssetBundles#tcf_astc/samplescene
    Assets/AssetBundles#tcf_astc/samplescene.manifest
    Assets/AssetBundles#tcf_astc/samplescene.manifest.meta
    Assets/AssetBundles#tcf_astc/samplescene.meta
    Assets/AssetBundles#tcf_astc/texturesbundle
    Assets/AssetBundles#tcf_astc/texturesbundle.manifest
    Assets/AssetBundles#tcf_astc/texturesbundle.manifest.meta
    Assets/AssetBundles#tcf_astc/texturesbundle.meta
    
  5. Google > Android > Assets Delivery को चुनें.

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

    AssetBundle के लिए, डिलीवरी मोड सेट करना न भूलें.

    Unity AssetBundle Delivery का डिफ़ॉल्ट फ़ॉर्मैट

  7. किसी दूसरे फ़ॉर्मैट (उदाहरण के लिए, एएसटीसी) के लिए बनाए गए AssetBundles वाले फ़ोल्डर को जोड़ने के लिए, फ़ोल्डर जोड़ें पर क्लिक करें. ज़रूरत के हिसाब से दोहराएं.

    हर AssetBundle के लिए, डिलीवरी मोड सेट करना न भूलें.

    Unity AssetBundle Delivery ASTC फ़ॉर्मैट

बनाएं

अपने गेम का Unity बिल्ड लॉन्च करने के लिए, Google > Android ऐप्लिकेशन बंडल बनाएं को चुनें. यह AssetBundles को कई ऐसेट पैक में भी पैकेज करता है. इसमें हर AssetBundle के नाम को एक ऐसेट पैक में बदल दिया जाता है.

(ऐडवांस) bundletool का इस्तेमाल करना

bundletool के बारे में ज़्यादा जानकारी के लिए, bundletool का इस्तेमाल करके ऐप्लिकेशन बंडल बनाना लेख पढ़ें.

ऐप्लिकेशन बंडल बनाने के लिए, यह तरीका अपनाएं:

  1. bundletool को इसकी GitHub रिपॉज़िटरी से डाउनलोड करें.

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

  3. पिछले चरण में बताए गए हर टेक्सचर कंप्रेशन फ़ॉर्मैट के लिए, अपनी ऐसेट के वर्शन बनाएं. इसमें TexturePacker जैसे सॉफ़्टवेयर का इस्तेमाल करके, स्प्राइट शीट जनरेट करना या ऐसी स्क्रिप्ट चलाना शामिल हो सकता है जो रॉ ऐसेट को किसी खास फ़ॉर्मैट में बदलती है. उदाहरण के लिए, astc-encoder.

  4. ऐसेट पैक बनाएं (C++ या Java के लिए बनाएं देखें). इनमें आपके गेम की ऐसेट होती हैं और इनका इस्तेमाल Play ऐसेट डिलीवरी के लिए किया जाता है. उदाहरण के लिए, हर लेवल के लिए एक ऐसेट पैक या गेम के अलग-अलग हिस्सों के लिए ऐसेट पैक बनाए जा सकते हैं.

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

    एक ऐसी डायरेक्ट्री बनाएं जिसके नाम में कोई सफ़िक्स न हो (उदाहरण के लिए, common/src/main/assets/textures/). इस डायरेक्ट्री में, अपनी टेक्सचर ऐसेट का डिफ़ॉल्ट फ़ॉर्मैट डालें. यह डिफ़ॉल्ट फ़ॉर्मैट, ज़्यादातर डिवाइसों पर काम करना चाहिए. उदाहरण के लिए, ETC1 या ETC2. अगर कोई डिवाइस, बताए गए अन्य फ़ॉर्मैट के साथ काम नहीं करता है, तो Google Play Store इस डायरेक्ट्री को इंस्टॉल करता है. उदाहरण के लिए, नीचे दी गई टेबल में PVRTC और ASTC.

    पहले की डायरेक्ट्री इसके बाद की डायरेक्ट्री
    common ऐसेट पैक:
    common/build.gradle
    common/src/main/assets/textures/...
    common ऐसेट पैक:
    common/build.gradle
    common/src/main/assets/textures/...
    common/src/main/assets/textures#tcf_astc/...
    common/src/main/assets/textures#tcf_pvrtc/...
    level1 ऐसेट पैक:
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1 ऐसेट पैक:
    level1/build.gradle
    level1/src/main/assets/textures/...
    level1/src/main/assets/textures#tcf_astc/...
    level1/src/main/assets/textures#tcf_pvrtc/...
    level2 ऐसेट पैक:
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2 ऐसेट पैक:
    level2/build.gradle
    level2/src/main/assets/textures/...
    level2/src/main/assets/textures#tcf_astc/...
    level2/src/main/assets/textures#tcf_pvrtc/...
  6. ऐप्लिकेशन बंडल की मेटाडेटा फ़ाइल (BundleConfig.json) में टीसीएफ़ डाइमेंशन जोड़ें. value फ़ील्ड के लिए, TEXTURE_COMPRESSION_FORMAT का इस्तेमाल करें:

    {
      ...
      "optimizations": {
        "splitsConfig": {
          "splitDimension": [
          ...
          {
             "value": "TEXTURE_COMPRESSION_FORMAT",
             "negate": false,
             "suffixStripping": {
               "enabled": true,
               "defaultSuffix": ""
              }
          }],
        }
      }
    }

    ऐसेट पैक जनरेट करते समय, डायरेक्ट्री के नामों से सफ़िक्स (उदाहरण के लिए, #tcf_astc) हटाने के लिए, suffixStripping.enabled को true पर सेट करें. इससे आपका गेम, किसी जाने-माने डायरेक्ट्री नाम (जैसे, level1/assets/textures) से फ़ाइलें पढ़ सकता है. कुछ गेम इंजन, फ़ाइल के फ़ॉर्मैट का पता लगा सकते हैं. इसलिए, आपके गेम को उन टेक्सचर ऐसेट के फ़ॉर्मैट से कोई फ़र्क़ नहीं पड़ता जिनके साथ उसे इंस्टॉल किया गया था.

    suffixStripping.defaultSuffix, डायरेक्ट्री के लिए डिफ़ॉल्ट सफ़िक्स तय करता है. ऐसा तब होता है, जब bundletool, Android 5.0 (एपीआई लेवल 21) और इससे पहले के वर्शन वाले डिवाइसों के लिए, स्टैंडअलोन APK जनरेट करता है. ऊपर दी गई उदाहरण टेबल में, इन डिवाइसों पर टेक्सचर ऐसेट का डिफ़ॉल्ट वर्शन इंस्टॉल किया गया है. ज़्यादातर मामलों में, ऐसा ही होता है.

  7. ऐप्लिकेशन बंडल बनाएं:

    bundletool build-bundle --config=BUILD_CONFIG.json \
      --modules=level1.zip,level2.zip,common.zip,base.zip --output=MY_BUNDLE.aab
    

ऐप्लिकेशन बंडल के कॉन्टेंट की पुष्टि करना

अगर आपने अब तक ऐसा नहीं किया है, तो GitHub की रिपॉज़िटरी से bundletool डाउनलोड करें.

आउटपुट ऐप्लिकेशन बंडल के कॉन्टेंट की पुष्टि करने के लिए, उससे APK बनाएं और उनकी जांच करें:

bundletool build-apks --output=APKS.apks --bundle=MY_BUNDLE.aab
zipinfo APKS.apks

आउटपुट कुछ ऐसा होना चाहिए:

toc.pb
splits/base-master.apk
splits/base-armeabi_v7a.apk
splits/…
asset-slices/level1-astc.apk
asset-slices/level1-other_tcf.apk
asset-slices/level1-pvrtc.apk

इन नामों से पता चलता है कि टीसीएफ़ टारगेटिंग को सही तरीके से लागू किया गया है. अगर किसी लेवल APK (उदाहरण के लिए, asset-slices/level1-astc.apk) के कॉन्टेंट को एक्सट्रैक्ट किया जाता है, तो यह पुष्टि की जा सकती है कि textures नाम की सिर्फ़ एक डायरेक्ट्री मौजूद है.

ऐप्लिकेशन बंडल की जांच करना

कोई डिवाइस कनेक्ट करें और ज़रूरी ऐसेट पैक इंस्टॉल करें:

bundletool install-apks --apks=APKS.apks

यह कमांड सिर्फ़ उन ऐसेट पैक को इंस्टॉल करता है जो डिवाइस की खास जानकारी से मेल खाते हैं. इन खास बातों में एबीआई, स्क्रीन डेंसिटी, भाषा, और सबसे सही टेक्सचर कंप्रेशन फ़ॉर्मैट शामिल है. यह ऑपरेशन, पब्लिश किए गए आपके गेम के लिए, Google Play Store की प्रोसेस को सिम्युलेट करता है.

यह पुष्टि करने के लिए कि सही ऐसेट पैक इंस्टॉल किए गए हैं, इनमें से कोई एक तरीका अपनाएं:

  • अपने डिवाइस पर इंस्टॉल किए गए APK को किसी डायरेक्ट्री में आउटपुट करने के लिए, bundletool extract-apks कमांड का इस्तेमाल करें. इसके बाद, इस डायरेक्ट्री की जांच करें.

    1. अपने डिवाइस की जानकारी निकालें:

      bundletool get-device-spec --output=MY_DEVICE_SPEC.json
      
    2. bundletool extract-apks को डिवाइस की इन सुविधाओं के साथ चलाएं:

      bundletool extract-apks --apks=APKS.apks --device-spec=MY_DEVICE_SPEC.json \
          --output-dir out
      
    3. out डायरेक्ट्री में मौजूद फ़ाइलों की सूची बनाएं और पुष्टि करें कि सही ऐसेट पैक इंस्टॉल किए गए हैं. ऐसेट पैक के नामों के आखिर में, टेक्सचर फ़ॉर्मैट का नाम जोड़ा जाता है. उदाहरण के लिए, level1-astc.apk.

  • अपने गेम में लॉग स्टेटमेंट जोड़ें, जो टेक्सचर लोड करते समय टेक्सचर फ़ॉर्मैट को आउटपुट करते हैं.

  • टेक्सचर का एक टेस्ट सेट जनरेट करें. उदाहरण के लिए, किसी दिए गए फ़ॉर्मैट के लिए, टेक्सचर को एक चमकीले रंग से बदलें. गेम चलाएं और पुष्टि करें कि यह मौजूद है.

अगर आपके ऐप्लिकेशन में on-demand या fast-follow ऐसेट पैक शामिल हैं, तो ऐसेट डिलीवरी के लिए लोकल टेस्टिंग टूल का इस्तेमाल करें.

टेक्सचर डायरेक्ट्री के नामों के लिए इस्तेमाल किए जा सकने वाले सफ़िक्स

Google Play, टेक्सचर डायरेक्ट्री के नामों में इस्तेमाल किए गए इन सफ़िक्स को पहचानता है:

  • अडैप्टिव स्केलेबल टेक्सचर कंप्रेशन (एएसटीसी) के लिए #tcf_astc
  • #tcf_atc, एटीआई टेक्स्चर कंप्रेसन (एटीसी) के लिए
  • #tcf_dxt1, S3 DXT1 टेक्स्चर कंप्रेशन (DXT1) के लिए
  • #tcf_latc, ल्यूमिनेंस-ऐल्फ़ा टेक्स्चर कंप्रेशन (एलएटीसी) के लिए
  • जेनेरिक पैलेटेड टेक्सचर कंप्रेशन के लिए #tcf_paletted
  • PowerVR टेक्स्चर कंप्रेशन (PVRTC) के लिए #tcf_pvrtc
  • #tcf_etc1, Ericsson texture compression (ETC1) के लिए
  • #tcf_etc2, Ericsson texture compression 2 (ETC2) के लिए
  • S3 टेक्स्चर कंप्रेशन (S3TC) के लिए #tcf_s3tc
  • #tcf_3dc, ATI 3Dc टेक्स्चर कंप्रेशन (3Dc) के लिए

Google Play पर विज्ञापन दिखाने के नियम

Google Play, डिवाइस पर इस्तेमाल की गई OpenGL एक्सटेंशन स्ट्रिंग और डिवाइस पर काम करने वाले OpenGL वर्शन की जांच करता है. Google Play इस जानकारी का इस्तेमाल करके, Android ऐप्लिकेशन बंडल से डिवाइस पर डिलीवर करने के लिए सही टेक्सचर फ़ॉर्मैट तय करता है.

Google Play, नीचे दी गई क्रम वाली सूची में दिए गए क्रम के हिसाब से, पहले फ़ॉर्मैट को डिलीवर करता है. यह फ़ॉर्मैट, डिवाइस पर काम करता है.

अगर डिवाइस पर ऐप्लिकेशन बंडल में मौजूद कोई भी टेक्सचर फ़ॉर्मैट काम नहीं करता है, तो Google Play डिफ़ॉल्ट फ़ॉर्मैट में पैकेज किए गए टेक्सचर फ़ॉर्मैट डिलीवर करता है. (अगर आपको किसी खास डिवाइस हार्डवेयर को टारगेट नहीं करना है, तो डिफ़ॉल्ट फ़ॉर्मैट के लिए ETC1 या ETC2 अच्छे विकल्प हैं.) डिफ़ॉल्ट फ़ॉर्मैट में ऐसेट को पैकेज करने के तरीके के बारे में जानने के लिए, bundletool का इस्तेमाल करना या Google Play Unity प्लग इन का इस्तेमाल करना लेख पढ़ें.

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

फ़ॉर्मैट (tcf_xxxx में तय किया गया) यह सुविधा उन डिवाइसों पर काम करती है जिनमें OpenGL एक्सटेंशन स्ट्रिंग मौजूद होती है
astc GL_KHR_texture_compression_astc_ldr
pvrtc GL_IMG_texture_compression_pvrtc
s3tc GL_EXT_texture_compression_s3tc
dxt1 GL_EXT_texture_compression_dxt1
latc GL_EXT_texture_compression_latc
atc GL_AMD_compressed_ATC_texture
3dc GL_AMD_compressed_3DC_texture
etc2 लागू नहीं. डिवाइस में OpenGL ES वर्शन 3.0 या इसके बाद का वर्शन होना चाहिए.
etc1 GL_OES_compressed_ETC1_RGB8_texture
पैलेट किया गया GL_OES_compressed_paletted_texture