डिवाइस टियर टारगेटिंग

अलग-अलग डिवाइसों पर उनके हार्डवेयर के हिसाब से, किसी ऐसेट के अलग-अलग वर्शन उपलब्ध कराने की सुविधा क्या है?

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

Play एसेट डिलीवरी की तरह ही, डिवाइस टीयर टारगेटिंग की सुविधा, एपीआई 16 (Jelly Bean 4.1) और इसके बाद के वर्शन पर काम करती है. हालांकि, एपीआई 19 (KitKat 4.4.X) और इससे पहले के वर्शन वाले डिवाइसों पर, डिवाइस के बिल्ड के बावजूद डिफ़ॉल्ट टीयर डिलीवर किया जाता है.

डेवलपर का सफ़र

अपने मौजूदा गेम में डीटीटी को इंटिग्रेट करने के लिए, आपको ये काम करने होंगे:

  1. डिवाइस टियर टारगेटिंग (और एक्सटेंशन के साथ, Play ऐसेट डिलीवरी) को अपने गेम में इंटिग्रेट करें
    • अगर आपने पहले से ही ऐसा नहीं किया है, तो अपने गेम में Play ऐसेट डिलीवरी को इंटिग्रेट करें
    • अपनी ऐसेट को ऐसेट पैक में बांटें
    • अपने कोड और एसेट को एक साथ पैकेज करें, ताकि आपको Play पर अपलोड करने के लिए, आखिरी Android ऐप्लिकेशन बंडल आर्टफ़ैक्ट मिल सके.
  2. डिवाइस टीयर टारगेटिंग कॉन्फ़िगरेशन बनाएं, ताकि Play को पता चले कि उपयोगकर्ता के डिवाइसों पर आपकी एसेट को कैसे डिलीवर किया जाए.
    • Google Play Developer API सेट अप करें (अगर पहले से सेट अप नहीं किया गया है), क्योंकि इसका इस्तेमाल Play पर डीटीटी कॉन्फ़िगरेशन भेजने के लिए किया जाएगा.
    • डीटीटी कॉन्फ़िगरेशन बनाने के लिए, यह तरीका अपनाएं.
  3. Play पर अपना एएबी अपलोड करें और यह जांच करें कि सब कुछ सही तरीके से कॉन्फ़िगर किया गया है या नहीं

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

  • Gradle (Java और नेटिव गेम के लिए सुझाया गया): Gradle का इस्तेमाल करके बनाए गए गेम के लिए, बिल्ड सिस्टम को कॉन्फ़िगर करने के लिए यह तरीका अपनाएं. इससे, DTT की सुविधा के साथ AAB बनाया जा सकता है.
    • अगर आपने अपना गेम Gradle में एक्सपोर्ट किया है और वहां अपना बिल्ड पूरा किया है, तो हमारा सुझाव है कि आप इन निर्देशों का पालन करें (उदाहरण के लिए, यूनिटी गेम Gredle में एक्सपोर्ट किए जाते हैं))
  • Unity प्लगिन: हम आपको Unity प्रोजेक्ट में इंपोर्ट करने के लिए, Unity पैकेज देंगे. इनकी मदद से, डीटीटी के साथ काम करने वाले AAB को कॉन्फ़िगर और बनाएं.

अपने ऐप्लिकेशन में डिवाइस टीयर टारगेटिंग सेट अप करना

अपने गेम में Play ऐसेट डिलीवरी को इंटिग्रेट करना (अगर पहले से पूरा नहीं किया गया है)

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

Gradle

Gradle के साथ बनाए गए गेम के लिए, Gredle की मदद से ऐसेट पैक बनाने के इन निर्देशों का पालन करें. इसके बाद, गेम में ऐसेट पैक वापस पाने की सुविधा को इंटिग्रेट करने के निर्देशों का पालन करें:

Unity

Unity में बनाए गए गेम के लिए, आपको AssetPackConfig क्लास का इस्तेमाल करके अपने ऐसेट पैक कॉन्फ़िगर करने होंगे, जैसा कि इन निर्देशों में बताया गया है.

डिवाइस टीयर के हिसाब से डायरेक्ट्री बनाना

अगर Gradle का इस्तेमाल किया जा रहा है, तो

अब आपको अपनी ऐसेट को उन टीयर (ज़्यादा से ज़्यादा पांच) के बीच बांटना होगा जिन्हें बाद में तय किया जाएगा. पिछले चरण में बनाई गई मौजूदा ऐसेट बंडल डायरेक्ट्री का इस्तेमाल करके, अपनी डीटीटी डायरेक्ट्री बनाएं. इसके बाद, सही फ़ोल्डर को #tier_0, #tier_1, #tier_2 वगैरह के साथ पोस्टफ़िक्स करें. अपने गेम में ऐसेट पैक का इस्तेमाल करते समय, आपको पोस्टफ़िक्स के हिसाब से फ़ोल्डर को ऐड्रेस करने की ज़रूरत नहीं होगी. दूसरे शब्दों में, बिल्ड करने की प्रोसेस के दौरान पोस्टफ़िक्स अपने-आप हट जाता है.

पिछले चरण के बाद, यह कुछ ऐसा दिख सकता है:

...
.../level1/src/main/assets/character-textures#tier_2/
.../level1/src/main/assets/character-textures#tier_1/
.../level1/src/main/assets/character-textures#tier_0/
...

फ़ोल्डर में मौजूद फ़ाइलों को ऐक्सेस करते समय, पोस्ट फ़िक्स किए बिना उसी पाथ का इस्तेमाल किया जा सकता है. इस उदाहरण में, मैं बिना किसी पोस्टफ़िक्स के level1/assets/character-textures/ के तौर पर रेफ़रंस दूंगा.

Unity का इस्तेमाल करते समय

डीटीटी का इस्तेमाल करने वाला ऐसेट पैक जोड़ने के लिए, यहां दिए गए AssetPackConfig तरीकों का इस्तेमाल किया जा सकता है:

/// Package the specified raw assets in the specified folders,
/// keyed by DeviceTier, in an AssetPack with the specified delivery mode.
public void AddAssetsFolders(
    string assetPackName,
    IDictionary<DeviceTier, string> deviceTierToAssetPackDirectoryPath,
    AssetPackDeliveryMode deliveryMode)

/// Package the specified AssetBundle files, which vary only by DeviceTier,
/// in an AssetPack with the specified delivery mode.
public void AddAssetBundles(
    IDictionary<DeviceTier, string> deviceTierToAssetBundleFilePath,
    AssetPackDeliveryMode deliveryMode)

उदाहरण के लिए, मान लें कि आपके पास अपने किरदार के लिए, अलग-अलग लेवल की जानकारी देने वाले तीन AssetBundles हैं.

इन AssetBundles को उनके डिवाइस टीयर के हिसाब से मैप करने के लिए, यहां दिए गए स्निपेट का इस्तेमाल करें.

var assetPackConfig = new AssetPackConfig();
var tiers = new Dictionary<DeviceTier, string>
{
    {0, "Assets/LowPoly/Character"},
    {1, "Assets/Mid/Character"},
    {2, "Assets/Detailed/Character"}
};
assetPackConfig.AddAssetBundles(tiers, AssetPackDeliveryMode.OnDemand);

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

ग्रेडल

अपने प्रोजेक्ट की build.gradle फ़ाइल में, अपनी डिपेंडेंसी को कॉन्फ़िगर करें, ताकि Android Gradle प्लग इन और bundletool के लिए, यहां दिए गए वर्शन (या इसके बाद के वर्शन) इस्तेमाल किए जा सकें:

buildscript {
  dependencies {
    classpath 'com.android.tools.build:gradle:4.2.0'
    classpath "com.android.tools.build:bundletool:1.7.1"
    ...
  }
  ...
}

आपको gradle का वर्शन भी 6.7.1 या इसके बाद के वर्शन पर अपडेट करना होगा. अपने प्रोजेक्ट में gradle/wrapper/gradle-wrapper.properties में जाकर, इसे अपडेट किया जा सकता है.

distributionUrl=https://services.gradle.org/distributions/gradle-6.7.1-all.zip

आखिर में, आपको Play एसेट डिलीवरी लाइब्रेरी का इस्तेमाल करना होगा. अगर अब भी एक ही मॉड्यूल वाली Play Core लाइब्रेरी का इस्तेमाल किया जा रहा है, तो उसे 1.8.3 या उसके बाद के वर्शन पर अपडेट करें. हमारा सुझाव है कि आप Play Asset Delivery Library का इस्तेमाल करें और अगर हो सके, तो इसे नए वर्शन पर अपडेट करें.

dependencies {
  implementation 'com.google.android.play:asset-delivery:2.0.1'
  ...
}

मुख्य ऐप्लिकेशन मॉड्यूल की build.gradle फ़ाइल में, डीटीटी स्प्लिट की सुविधा चालू करें:

android {
  bundle {
    deviceTier {
      enableSplit true
    }
    ...
  }
  ...
}

आखिर में, अपना Android ऐप्लिकेशन बंडल (AAB) बनाया जा सकता है.

Bundletool

bundletool की मदद से अपना बंडल बनाएं और अपने AAB को पसंद के मुताबिक बनाने के दौरान, अपनी BundleConfig.pb फ़ाइल में यह जानकारी जोड़ें.

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

Unity

अपने AssetPackConfig को डीटीटी पैक शामिल करने के लिए कॉन्फ़िगर करने के बाद, AAB बनाने के लिए उस कॉन्फ़िगरेशन को इनमें से किसी एक तरीके से पास किया जा सकता है:

// Configures the build system to use the newly created assetPackConfig when
// calling Google > Build and Run or Google > Build Android App
Bundle.AssetPackConfigSerializer.SaveConfig(assetPackConfig);
// Alternatively, use BundleTool.BuildBundle to build an App Bundle from script
BuildBundle(new buildPlayerOptions(), assetPackConfig)

लोकल टेस्टिंग

आगे बढ़ने से पहले, हमारा सुझाव है कि आप अपने ऐप्लिकेशन बंडल की स्थानीय तौर पर जांच करें, ताकि यह पक्का किया जा सके कि सब कुछ सही तरीके से सेट अप किया गया है. bundletool (1.8.0 या इसके बाद के वर्शन) का इस्तेमाल करके, स्थानीय तौर पर अपना ऐप्लिकेशन बनाया और टेस्ट किया जाता है. इस दौरान, सही डिवाइस टियर के बारे में साफ़ तौर पर बताया जाता है. सबसे पहले, .apks फ़ाइलों का सेट जनरेट करने के लिए, build-apks का इस्तेमाल करें. इसके बाद, install-apks का इस्तेमाल करके, कनेक्ट किए गए डिवाइस पर अपना ऐप्लिकेशन डिप्लॉय करें. device-tier flag के ज़रिए यह भी बताया जा सकता है कि आपको कौनसा टीयर इंस्टॉल करना है. स्थानीय जांच के इस तरीके के बारे में ज़्यादा जानकारी के लिए यहां जाएं (कृपया ध्यान दें कि इस पेज को अब तक डीटीटी के लिए अपडेट नहीं किया गया है. इसलिए, इसमें device-tier फ़्लैग मौजूद नहीं है).

bundletool build-apks --bundle=/path/to/app.aab --output=/path/to/app.apks --local-testing
bundletool install-apks --apks=/path/to/app.apks --device-tier=1

इसके अलावा: किसी खास डिवाइस के लिए, APK का सेट निकालने के लिए, extract-apks का इस्तेमाल भी किया जा सकता है. हालांकि, इस डिवाइस के लिए डिवाइस टीयर की जानकारी देने के साथ-साथ, get-device-spec का इस्तेमाल करने पर, यह --local-testing फ़्लैग के साथ काम नहीं करेगा. इसका मतलब है कि फ़ास्ट-फ़ॉलो या ऑन-डिमांड एसेट पैक की जांच नहीं की जा सकेगी.

bundletool get-device-spec --output=/path/to/device-spec.json --device-tier=1
bundletool extract-apks --apks=/path/to/existing_APK_set.apks --output-dir=/path/to/device_specific_APK_set.apks --device-spec=/path/to/device-spec.json

Unity

Google -> बनाएं और चलाएं मेन्यू विकल्प, --local-testing फ़्लैग चालू होने पर आपके गेम को बनाएगा और चलाएगा. हालांकि, इससे आपको install-apks कमांड में डिवाइस-टीयर की जानकारी देने की अनुमति नहीं मिलती.

अगर आपको 0 के अलावा कोई दूसरा डिवाइस-टीयर तय करना है, तो आपको:

  1. Google -> Android ऐप्लिकेशन बंडल बनाएं मेन्यू विकल्प का इस्तेमाल करके एएबी बनाएं.
  2. बनाए गए AAB पर bundletool, build-apks, और install-apks को चलाने के लिए, पिछले सेक्शन में दिए गए निर्देशों का पालन करें.

Google Play Developer API की मदद से, डिवाइस टीयर कॉन्फ़िगरेशन बनाना

Google Play Developer API का इस्तेमाल शुरू करना (अगर पहले से पूरा नहीं किया गया है)

डिवाइस टीयर टारगेटिंग को कॉन्फ़िगर करने के लिए, आपको Android पब्लिशर एपीआई का इस्तेमाल करना होगा.इससे, Google Play पर अपना कॉन्फ़िगरेशन अपलोड किया जा सकेगा. जैसे, हर टीयर के लिए ज़रूरी शर्तें तय करना. ऊपर दिए गए लिंक पर जाकर, एपीआई के बारे में ज़्यादा पढ़ें. इसके इस्तेमाल के लिए, आपको ये कदम उठाने होंगे:

  1. अगर ज़रूरी हो, तो एपीआई प्रोजेक्ट बनाएं और उसे Google Play Console से लिंक करें.
  2. एपीआई ऐक्सेस क्लाइंट सेट-अप करें.

एपीआई का रेफ़रंस यहां देखें - अगर बाद में एपीआई के ज़रिए अपना बिल्ड अपलोड किया जाता है, तो आपको बदलाव करने के तरीकों का इस्तेमाल करना होगा. साथ ही, एपीआई का इस्तेमाल करने से पहले, इस पेज को पढ़ें.

Device Tier Configuration API का इस्तेमाल करना

अपना डिवाइस टियर कॉन्फ़िगरेशन बनाने के लिए, इस एपीआई कॉल का इस्तेमाल किया जा सकता है:

डिवाइस टियर कॉन्फ़िगरेशन बनाना

एचटीटीपी अनुरोध POST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/deviceTierConfigs
पाथ पैरामीटर लागू नहीं
अनुरोध का मुख्य हिस्सा डिवाइस टियर कॉन्फ़िगरेशन
रिस्पॉन्स का मुख्य हिस्सा डिवाइस टीयर कॉन्फ़िगरेशन
डिवाइस टीयर कॉन्फ़िगरेशन ऑब्जेक्ट

डिवाइस टीयर की परिभाषा तय करने के लिए, दो चरण पूरे करने होते हैं:

  1. डिवाइस ग्रुप का सेट तय करें.
  2. अपने डिवाइस ग्रुप को लेवल असाइन करके, डिवाइस टीयर सेट तय करें.

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

चुनने वाले, डिवाइस के रैम और डिवाइस मॉडल से जुड़ी ज़रूरी शर्तें तय कर सकते हैं.

ग्रुप की पहचान, आपके चुने गए नाम से की जाती है. ग्रुप के ओवरलैप होने की अनुमति है.

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

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

  {
    device_groups: [
      {
        name: string,
        device_selectors: [
          {
            device_ram: {
              min_bytes: integer
              max_bytes: integer
            },
            included_device_ids: [
              {
                build_brand: string,
                build_device: string
              }
            ],
            excluded_device_ids: [
              {
                build_brand: string,
                build_device: string
              }
            ],
            required_system_features: [
              {
                name: string
              }
            ],
            forbidden_system_features: [
              {
                name: string
              }
            ]
          }
        ]
      }
    ],
    device_tier_set: {
      device_tiers: [
        {
          level: int,
          device_group_names: [string]
        }
      ]
    }
  }

फ़ील्ड:

  • device_confid_id (पूर्णांक): इस डिवाइस के टीयर कॉन्फ़िगरेशन से जुड़ा आईडी.
  • device_groups (ऑब्जेक्ट): ग्रुप की परिभाषाएं

    • name (स्ट्रिंग): डिवाइस ग्रुप का नाम (आपके तय किया गया स्ट्रिंग आईडी).
    • device_selectors (object): इस ग्रुप से जुड़ने के लिए, डिवाइस से जुड़ी ज़रूरी शर्तें.
    • device_ram (ऑब्जेक्ट): डिवाइस के रैम से जुड़ी ज़रूरी शर्तें
      • min_bytes (पूर्णांक, इसमें शामिल है): ज़रूरी रैम (बाइट में)
      • max_bytes (पूर्णांक, सिर्फ़): ज़्यादा से ज़्यादा रैम (बाइट में)
    • included_device_ids (ऑब्जेक्ट): इस सिलेक्टर में शामिल किए जाने वाले डिवाइस मॉडल (हर ग्रुप में ज़्यादा से ज़्यादा 10,000 device_ids) सिलेक्टर से मैच करने के लिए, डिवाइस को इस सूची में होना चाहिए. यह ज़रूरी शर्त है, लेकिन पूरे सिलेक्टर से मैच करने के लिए ज़रूरी नहीं है. सिलेक्टर में ज़रूरी शर्तों को जोड़ने के बारे में ऊपर दिया गया नोट देखें
      • build_brand (स्ट्रिंग): डिवाइस बनाने वाली कंपनी
      • build_device (स्ट्रिंग): डिवाइस मॉडल का कोड
    • excluded_device_ids (ऑब्जेक्ट): इस सिलेक्टर में शामिल नहीं किए जाने वाले डिवाइस मॉडल (हर ग्रुप में ज़्यादा से ज़्यादा 10,000 device_ids) इस सूची में शामिल कोई डिवाइस, सिलेक्टर से मैच नहीं करेगा. भले ही, वह सिलेक्टर की सभी अन्य ज़रूरी शर्तों को पूरा करता हो.
      • build_brand (स्ट्रिंग): डिवाइस बनाने वाली कंपनी
      • build_device (स्ट्रिंग): डिवाइस के मॉडल का कोड
    • ज़रूरी_system_features (ऑब्जेक्ट): वे सुविधाएं जिन्हें किसी डिवाइस पर सिलेक्टर (हर ग्रुप में ज़्यादा से ज़्यादा 100 सुविधाएं) की मदद से शामिल करना ज़रूरी है. सिलेक्टर से मैच करने के लिए, किसी डिवाइस में इस सूची में मौजूद सभी सिस्टम सुविधाएं होनी चाहिए. यह पूरी सेलेक्टर से मैच करने के लिए ज़रूरी शर्त है, लेकिन यह ज़रूरी नहीं है कि यह शर्त पूरी हो. सेलेक्टर में ज़रूरी शर्तों को जोड़ने के बारे में ऊपर दिया गया नोट देखें.

      सिस्टम सुविधा के बारे में जानकारी

      • name (स्ट्रिंग): सिस्टम की सुविधा
    • forbidden_system_features (ऑब्जेक्ट): ऐसी सुविधाएं जिन्हें इस सिलेक्टर की मदद से किसी डिवाइस में शामिल नहीं किया जाना चाहिए (हर ग्रुप में ज़्यादा से ज़्यादा 100 सुविधाएं). अगर किसी डिवाइस में इस सूची में शामिल सिस्टम से जुड़ी कोई सुविधा दी गई है, तो वह सिलेक्टर से मेल नहीं खाता, भले ही वह सिलेक्टर की अन्य सभी ज़रूरी शर्तों से मेल खाता हो.

      सिस्टम की सुविधा का रेफ़रंस

      • name (स्ट्रिंग): सिस्टम की सुविधा
  • device_tiers (ऑब्जेक्ट): टीयर की परिभाषाएं

    • level (int): टीयर का लेवल
    • group_name (स्ट्रिंग ऐरे): इस टीयर से जुड़े डिवाइस ग्रुप का नाम

Google Play Console पर डिवाइस सूची का इस्तेमाल करके, डिवाइस के मैन्युफ़ैक्चरर और मॉडल कोड के लिए सही फ़ॉर्मैट पाया जा सकता है. इसके लिए, इनमें से कोई एक तरीका अपनाएं:

  • डिवाइस सूची का इस्तेमाल करके, अलग-अलग डिवाइसों की जांच करना और यहां दिए गए उदाहरण में दिखाए गए स्थानों में मैन्युफ़ैक्चरर और मॉडल कोड ढूंढना (Google Pixel 4a के लिए, मैन्युफ़ैक्चरर “Google” और मॉडल कोड “sunfish”)'

    डिवाइस सूची में Pixel 4a पेज

    डिवाइस सूची में Pixel 4a का पेज

  • इसके साथ काम करने वाले डिवाइसों की CSV फ़ाइल डाउनलोड करना. इसके बाद, build_brand और build_device फ़ील्ड के लिए, Manufacturer और मॉडल कोड का इस्तेमाल करें.

यहां तीन टीयर वाले कॉन्फ़िगरेशन का उदाहरण दिया गया है - टीयर 2 में डिवाइस ग्रुप ज़्यादा का इस्तेमाल किया जाता है (इसमें 7 जीबी से ज़्यादा स्टोरेज वाले सभी डिवाइस और Pixel 4 शामिल हैं), टीयर 1 में डिवाइस ग्रुप सामान्य का इस्तेमाल किया जाता है (इसमें 4 से 7 जीबी स्टोरेज वाले सभी डिवाइस शामिल हैं), और टीयर 0, जिसे सार्वजनिक ग्रुप के तौर पर दिखाया गया है.

{
  device_groups: [
    {
      name: 'high',
      device_selectors: [
        {
          device_ram: {
            min_bytes: 7516192768
          },
        },
        {
          included_device_ids: [
            {
              build_brand: 'google',
              build_device: 'flame'
            }
          ],
        }
      ]
    },
    {
      name: 'medium',
      device_selectors: [
        {
          device_ram: {
            min_bytes: 4294967296,
            max_bytes: 7516192768
          },
        }
      ]
    }
  ],
  device_tier_set: {
    device_tiers: [
      {
        level: 1,
        device_group_names: [
          'medium'
        ]
      },
      {
        level: 2,
        device_group_names: [
          'high'
        ]
      }
    ]
  }
}

Google Play पर अपलोड करने से पहले, डिवाइस टारगेटिंग कॉन्फ़िगरेशन की पुष्टि करने के लिए, यहां दिए गए निर्देशों का पालन करें.

आईडी के हिसाब से डिवाइस टीयर कॉन्फ़िगरेशन पाना

आईडी के हिसाब से किसी डिवाइस टीयर कॉन्फ़िगरेशन को वापस पाने के लिए, इस कॉल का इस्तेमाल करें:

एचटीटीपी अनुरोध GET https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/deviceTierConfigs/{deviceTierConfigId}
पाथ पैरामीटर लागू नहीं
अनुरोध का मुख्य हिस्सा लागू नहीं
जवाब का मुख्य हिस्सा डिवाइस टीयर कॉन्फ़िगरेशन

डिवाइस टियर कॉन्फ़िगरेशन की सूची देखें

नीचे दिए गए कॉल के हिसाब से, डिवाइस के पिछले 10 टीयर कॉन्फ़िगरेशन देखे जा सकते हैं (या page_token क्वेरी पैरामीटर का इस्तेमाल करके, 10 का सेट बेहतर तरीके से तय किया जा सकता है):

एचटीटीपी अनुरोध GET https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/deviceTierConfigs
पाथ पैरामीटर लागू नहीं
क्वेरी पैरामीटर page_token (ज़रूरी नहीं) - इसका इस्तेमाल 10 डीटीसी के किसी खास ग्रुप के बारे में बताने के लिए किया जाता है. यह तब काम आता है, जब आपने 10 से ज़्यादा डीटीसी बनाए हों और आपको वे डीटीसी देखने हैं जो सबसे हाल की 10 से पहले बनाए गए हों.
अनुरोध का मुख्य हिस्सा लागू नहीं
रिस्पॉन्स का मुख्य हिस्सा डिवाइस टीयर कॉन्फ़िगरेशन की सूची

page_token

डिवाइस टारगेटिंग कॉन्फ़िगरेशन की पुष्टि करना

bundletool में दो निर्देश शामिल हैं. इनकी मदद से, यह पुष्टि की जा सकती है कि Play पर अपलोड करने से पहले, आपका डिवाइस टारगेटिंग कॉन्फ़िगरेशन सही तरीके से काम कर रहा है या नहीं.

bundletool print-device-targeting-config की मदद से, यह पुष्टि की जा सकती है कि आपकी JSON फ़ाइल के वाक्य सही हैं. साथ ही, अपने डिवाइस ग्रुप और टीयर को आसानी से पढ़ने लायक फ़ॉर्मैट में विज़ुअलाइज़ किया जा सकता है.

bundletool print-device-targeting-config --config=mydtc.json

bundletool evaluate-device-targeting-config की मदद से, यह आकलन किया जा सकता है कि किन ग्रुप और टीयर को किसी डिवाइस से मैच करना है. इसके लिए, टारगेट डिवाइस को अपने वर्कस्टेशन से कनेक्ट करें और --connected-device फ़्लैग का इस्तेमाल करें. इसके अलावा, डिवाइस प्रॉपर्टी के साथ JSON फ़ाइल को मैन्युअल तरीके से कंपाइल करें और उसे --device-properties फ़्लैग के ज़रिए दें.

bundletool evaluate-device-targeting-config --config=mydtc.json --connected-device
bundletool evaluate-device-targeting-config --config=mydtc.json --device-properties=deviceproperties.json

डिवाइस प्रॉपर्टी फ़ाइल, DeviceProperties protocbuf स्ट्रक्चर के मुताबिक JSON फ़ाइल होनी चाहिए. उदाहरण के लिए:

{
  "ram": 2057072640,
  "device_id": {
    "build_brand":"google",
    "build_device":"redfin"
  },
  "system_features": [
    {
      "name":"android.hardware.bluetooth"
    },
    {
      "name":"android.hardware.camera"
    }
  ]
}

Google Play पर अपना Android ऐप्लिकेशन बंडल अपलोड करना

Via API

Google Play Developer API का इस्तेमाल करके, अपने Android ऐप्लिकेशन बंडल को Google Play पर अपलोड किया जा सकता है. साथ ही, अपने बंडल से डिवाइस टीयर टारगेटिंग का कोई खास कॉन्फ़िगरेशन लिंक किया जा सकता है.

यहां बदलाव करने के तरीकों की खास जानकारी दी गई है. साथ ही, Google Play Console में अलग-अलग ट्रैक पर रिलीज़ करने के बारे में ज़्यादा जानकारी दी गई है. आखिरी लिंक के लिए, आपको पेज में दिए गए APK-फ़्रेंडली एपीआई के बजाय, AAB-फ़्रेंडली एपीआई का इस्तेमाल करना होगा. अपने बिल्ड के लिए डिवाइस टीयर कॉन्फ़िगरेशन तय करने के लिए, आपको edits.bundle.upload तरीके को कॉल करते समय, deviceTierConfigIdक्वेरी पैरामीटर में कॉन्फ़िगरेशन आईडी जोड़ना होगा. जैसे:

https://androidpublisher.googleapis.com/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles?deviceTierConfigId="{deviceTierConfigId}

Google Play Console से

अपना Android ऐप्लिकेशन बंडल अपलोड करने के लिए, यहां दिए गए निर्देशों का पालन करें. आपके ऐप्लिकेशन बंडल पर, DTC का नया कॉन्फ़िगरेशन लागू किया जाएगा.

यह पुष्टि की जा सकती है कि आपका बंडल सही तरीके से बनाया गया है या नहीं. इसके लिए, ऐप्लिकेशन बंडल एक्सप्लोरर (सही बिल्ड चुना गया हो) > डिलीवरी पर जाएं और हर एसेट पैक पर क्लिक करें. इसमें आपको अपने बनाए गए N टीयर दिखने चाहिए. इस उदाहरण में, यह दिखाया गया है कि मेरे ऐसेट पैक main_asset के लिए, मेरे पास तीन टीयर - 0, 1, और 2 हैं.

तीन टीयर वाला ऐसेट पैक

पुष्टि करना कि सही टीयर डिलीवर किया जा रहा है

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

adb shell pm path {packageName}

आपको कुछ ऐसा दिखेगा:

package:{...}/base.apk
package:{...}/split_config.en.apk
package:{...}/split_config.xxhdpi.apk
package:{...}/split_main_asset.apk
package:{...}/split_main_asset.config.tier_2.apk

सहायक

Curl का इस्तेमाल करके क्विक स्टार्ट

नीचे, नया डिवाइस टीयर कॉन्फ़िगरेशन बनाने और बदलाव करने के लिए Edits API का इस्तेमाल करने का उदाहरण दिया गया है. इसमें, नया बदलाव करने, नया AAB अपलोड करने (इसे किसी खास डिवाइस टीयर कॉन्फ़िगरेशन से जोड़ने), ट्रैक/रिलीज़ कॉन्फ़िगरेशन सेट करने, और बदलाव को कमिट करने के बारे में बताया गया है. इसके लिए, कमांड-लाइन टूल curl का इस्तेमाल किया गया है. (इस तरह बदलाव को सार्वजनिक करके). पक्का करें कि आपके पास इनकी जगह की जानकारी हो:

सबसे पहले, डिवाइस टीयर कॉन्फ़िगरेशन बनाएं और कॉल पूरा होने पर मिलने वाले deviceTierConfigId को नोट करें.

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPOST -H "Content-Type: application/json" -d "{ device_groups: [ { name: 'high', device_selectors: [ { device_ram: { min_bytes: 7516192768 }, }, { included_device_ids: [ { build_brand: 'google', build_device: 'flame' } ], } ] }, { name: 'medium', device_selectors: [ { device_ram: { min_bytes: 4294967296, max_bytes: 7516192768 }, } ] } ], device_tier_set: { device_tiers: [ { level: 1, device_group_names: [ 'medium' ] }, { level: 2, device_group_names: [ 'high' ] } ] } }" https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/deviceTierConfigs

बदलाव करना शुरू करें - आपको बदलाव के लिए एक आईडी और उसकी समयसीमा मिलेगी. नीचे दिए गए कॉल के लिए आईडी सेव करें.

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPOST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/edits

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

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" --data-binary @$HOME/{aabFile} -H "Content-Type: application/octet-stream" -XPOST https://androidpublisher.googleapis.com/upload/androidpublisher/v3/applications/{packageName}/edits/{editID}/bundles?deviceTierConfigId="{dttConfigID}"

एएबी को अपने पसंदीदा ट्रैक पर असाइन करें (सुझाव है कि टेस्टिंग के लिए, इंटरनल टेस्ट ट्रैक का इस्तेमाल करें. हालांकि, अलग-अलग ट्रैक के बारे में ज़्यादा जानने के लिए यहां पढ़ें). यहां हम रिलीज़ नोट के बिना आसानी से रोल आउट करते हैं. हालांकि, इस पेज को पढ़ें, ताकि आपको चरणों में रोल आउट करने, रिलीज़ का ड्राफ़्ट तैयार करने, और रिलीज़ नोट के बारे में ज़्यादा जानकारी मिल सके. अगर Publisher API का इस्तेमाल पहली बार किया जा रहा है, तो हमारा सुझाव है कि आप इसे ड्राफ़्ट रिलीज़ के तौर पर बनाएं. इसके बाद, इस रिलीज़ को अपने Google Play Console पर पूरा करें, ताकि यह पक्का किया जा सके कि सब कुछ सही तरीके से कॉन्फ़िगर किया गया हो.

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPUT -H "Content-Type: application/json" -d "{ releases: [{status: '{status}'</code>, <code><strong>versionCodes</strong></code>: <code>['{versionCode}']</code> <code><strong>}]}</strong></code>" <code>https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/edits/{editID}/tracks/{track}

बदलावों को लागू करना (सावधानी से आगे बढ़ें, क्योंकि इससे आपके चुने गए ट्रैक पर, सभी बदलाव Play पर लाइव हो जाएंगे)

curl -H "$(oauth2l header --json $HOME/{apiKey} androidpublisher)" -XPOST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/edits/{editID}:commit