उपयोगकर्ता के डिवाइस पर मौजूद एआई के Early access program (ईएपी) के लिए चलाएं

शुरुआती जानकारी

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

फ़ायदे

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

ज़रूरी बातें

  • डिवाइस पर एआई का इस्तेमाल करने के लिए Play का इस्तेमाल करने का मतलब है कि आप Google Play डेवलपर डिस्ट्रिब्यूशन एग्रीमेंट और Play Core Software Development Kit की सेवा की शर्तों से सहमत हैं.
  • रिलीज़ होने से पहले ऐप्लिकेशन इस्तेमाल करने की अनुमति वाले कार्यक्रम में हिस्सा लेने वाले डेवलपर को, डिवाइस पर मौजूद एआई के लिए Play का आकलन करना होगा. साथ ही, Google Play को सुझाव/राय देनी होगी.
  • डिवाइस पर एआई का इस्तेमाल करने के लिए, Play से डाउनलोड किए गए मॉडल का इस्तेमाल सिर्फ़ उस ऐप्लिकेशन में किया जा सकता है जिसने मॉडल डाउनलोड किया है. मॉडल को अन्य ऐप्लिकेशन को नहीं दिया जाना चाहिए. उदाहरण के लिए, किसी सेवा कनेक्शन के ज़रिए.
  • एआई के अलग-अलग पैक का साइज़, ज़्यादा से ज़्यादा 1.5 जीबी हो सकता है. यह साइज़, डाउनलोड किए जाने के बाद पैक के साइज़ पर निर्भर करता है. आपके ऐप्लिकेशन बंडल से जनरेट हुए आपके ऐप्लिकेशन के किसी भी वर्शन का कुल साइज़, ज़्यादा से ज़्यादा 4 जीबी हो सकता है.
  • जिन ऐप्लिकेशन का साइज़ 1 जीबी से ज़्यादा है उन्हें SDK टूल का कम से कम लेवल 21 या उसके बाद का सेट करना होगा.
  • रिलीज़ होने से पहले ऐप्लिकेशन इस्तेमाल करने की सुविधा वाले कार्यक्रम के दौरान, डिवाइस पर एआई (AI) की सुविधा देने वाले Play के लिए बदलाव किए जा सकते हैं.

Play for On-device AI का इस्तेमाल करने का तरीका

Play for On-device AI, एआई पैक का इस्तेमाल करता है. अपने ऐप्लिकेशन बंडल में, एआई पैक में डिस्ट्रिब्यूशन के लिए तैयार कस्टम मॉडल पैकेज किए जाते हैं. आपके पास यह चुनने का विकल्प होता है कि एआई पैक को इंस्टॉल के समय, फ़ास्ट-फ़ॉलो या मांग पर डिलीवर किया जाए.

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

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

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

एआई पैक के साथ LiteRT और MediaPipe का इस्तेमाल करना

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

इस बारे में ज़्यादा जानने के लिए:

एआई पैक का इस्तेमाल शुरू करना

Play for On-device AI का इस्तेमाल शुरू करने का तरीका यहां बताया गया है:

  1. ईएपी में शामिल होने के लिए, Google Play को अपना Play डेवलपर खाता आईडी दें.
  2. अपने मॉडल को Android ऐप्लिकेशन बंडल में एआई पैक में पैकेज करें और बताएं कि एआई पैक को कैसे डिलीवर किया जाना चाहिए.
  3. [ज़रूरी नहीं] अगर आपको अलग-अलग डिवाइसों पर अलग-अलग मॉडल डिलीवर करने हैं, तो अपने एआई पैक के लिए डिवाइस टारगेटिंग कॉन्फ़िगर की जा सकती है. उदाहरण के लिए, किसी खास डिवाइस मॉडल पर एआई पैक A और कम से कम 6 जीबी रैम वाले डिवाइसों पर एआई पैक B डिलीवर किया जा सकता है. साथ ही, बाकी सभी डिवाइसों पर कोई मॉडल डिलीवर नहीं किया जा सकता.
  4. [ज़रूरी नहीं] अगर ऑन-डिमांड या फ़ास्ट-फ़ॉलो डिलीवरी का इस्तेमाल किया जा रहा है, तो ज़रूरत के हिसाब से एआई पैक डाउनलोड करने के लिए, अपने ऐप्लिकेशन में Play एआई डिलीवरी लाइब्रेरी को इंटिग्रेट करें.
  5. अपने ऐप्लिकेशन बंडल की जांच करें और उसे Google Play पर रिलीज़ करें.

अपना Play डेवलपर खाता आईडी दें

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

Android Gradle प्लग इन का वर्शन देखना

एआई पैक का इस्तेमाल करने के लिए, पक्का करें कि आपके Android Gradle प्लग इन (AGP) का वर्शन कम से कम 8.8 हो. यह वर्शन, Android Studio Ladybug 2 के साथ पैकेज किया गया है.

अपने मॉडल को एआई पैक में एक्सट्रैक्ट करना

यहां दिए गए चरणों के लिए, Android Studio की ज़रूरत नहीं है.

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

    // In the AI pack's build.gradle file:
    plugins {
      id 'com.android.ai-pack'
    }
    
    aiPack {
        packName = "ai-pack-name" // Directory name for the AI pack
        dynamicDelivery {
            deliveryType = "[ install-time | fast-follow | on-demand ]"
        }
    }
    
  3. प्रोजेक्ट की ऐप्लिकेशन build.gradle फ़ाइल में, अपने प्रोजेक्ट के हर एआई पैक का नाम जोड़ें, जैसा कि यहां दिखाया गया है:

    // In the app build.gradle file:
    android {
        ...
        assetPacks = [":ai-pack-name", ":ai-pack2-name"]
    }
    
  4. प्रोजेक्ट की settings.gradle फ़ाइल में, अपने प्रोजेक्ट में सभी एआई पैक शामिल करें, जैसा कि यहां दिखाया गया है:

    // In the settings.gradle file:
    include ':app'
    include ':ai-pack-name'
    include ':ai-pack2-name'
    
  5. अपने एआई पैक में, src/main/assets/ डायरेक्ट्री बनाएं.

  6. अपने मॉडल को src/main/assets डायरेक्ट्री में डालें. यहां भी सब-डायरेक्ट्री बनाई जा सकती हैं. आपके ऐप्लिकेशन का डायरेक्ट्री स्ट्रक्चर अब इस तरह दिखना चाहिए:

    • build.gradle
    • settings.gradle
    • app/
    • ai-pack-name/build.gradle
    • ai-pack-name/src/main/assets/your-model-directories
  7. अपने मॉडल लोड और चलाने के लिए कोड जोड़ें. यह कैसे किया जाता है, यह आपके एआई पैक के डिलीवरी मोड पर निर्भर करता है. इंस्टॉल के समय और फ़ास्ट-फ़ॉलो/ऑन-डिमांड के लिए, यहां दिए गए निर्देश देखें.

  8. [ज़रूरी नहीं] अलग-अलग डिवाइसों पर अलग-अलग मॉडल डिलीवर करने के लिए, डिवाइस टारगेटिंग कॉन्फ़िगर करें.

  9. Gradle की मदद से Android ऐप्लिकेशन बंडल बनाएं. जनरेट किए गए ऐप्लिकेशन बंडल में, रूट-लेवल डायरेक्ट्री में अब ये शामिल हैं:

    • ai-pack-name/manifest/AndroidManifest.xml: एआई पैक के आइडेंटिफ़ायर और डिलीवरी मोड को कॉन्फ़िगर करता है
    • ai-pack-name/assets/your-model-directories: एआई पैक के हिस्से के तौर पर डिलीवर की गई सभी ऐसेट वाली डायरेक्ट्री

    Gradle, हर एआई पैक के लिए मेनिफ़ेस्ट जनरेट करता है और आपके लिए assets/ डायरेक्ट्री को आउटपुट करता है.

इंस्टॉल के समय डिलीवरी कॉन्फ़िगर करना

इंस्टॉल के समय कॉन्फ़िगर किए गए एआई पैक, ऐप्लिकेशन लॉन्च होने पर तुरंत उपलब्ध हो जाते हैं. इस मोड में दिखाए गए एआई पैक को ऐक्सेस करने के लिए, Java AssetManager API का इस्तेमाल करें:

import android.content.res.AssetManager;
...
Context context = createPackageContext("com.example.app", 0);
AssetManager assetManager = context.getAssets();
InputStream is = assetManager.open("model-name");

फ़ास्ट-फ़ॉलो और मांग पर डिलीवरी की सुविधा कॉन्फ़िगर करना

फ़ास्ट-फ़ॉलो या ऑन-डिमांड डिलीवरी के साथ एआई पैक डाउनलोड करने के लिए, Play की एआई डिलीवरी लाइब्रेरी का इस्तेमाल करें.

Play AI डिलीवरी लाइब्रेरी पर डिपेंडेंसी का एलान करना

अपने ऐप्लिकेशन की build.gradle फ़ाइल में, Play AI डिलीवरी लाइब्रेरी पर निर्भरता का एलान करें:

dependencies {
  ...
  implementation "com.google.android.play:ai-delivery:0.1.1-alpha01"
}

स्थिति देखें

हर एआई पैक को ऐप्लिकेशन के इंटरनल स्टोरेज में एक अलग फ़ोल्डर में सेव किया जाता है. एआई पैक के रूट फ़ोल्डर का पता लगाने के लिए, getPackLocation() वाला तरीका इस्तेमाल करें. इस तरीके से ये वैल्यू मिलती हैं:

रिटर्न वैल्यू स्थिति
मान्य AiPackLocation ऑब्जेक्ट एआई पैक का रूट फ़ोल्डर, assetsPath() पर तुरंत ऐक्सेस करने के लिए तैयार है
null एआई पैक की जानकारी नहीं है या एआई पैक उपलब्ध नहीं हैं

एआई पैक डाउनलोड करने के बारे में जानकारी पाना

डाउनलोड के साइज़ और पैक के पहले से डाउनलोड हो रहे होने का पता लगाने के लिए,
getPackStates() तरीका अपनाएं.

Task<AiPackStates> getPackStates(List<String> packNames)

getPackStates() एक एसिंक्रोनस तरीका है, जो Task<AiPackStates> दिखाता है. AiPackStates ऑब्जेक्ट का packStates() तरीका, Map<String, AiPackState> दिखाता है. इस मैप में, अनुरोध किए गए हर एआई पैक की स्थिति दिखती है. इसकी जानकारी, पैक के नाम के हिसाब से दी जाती है:

Map<String, AiPackState> AiPackStates#packStates()

फ़ाइनल अनुरोध इनके हिसाब से दिखाया जाता है:

final String aiPackName = "myAiPackName";

aiPackManager
    .getPackStates(Collections.singletonList(aiPackName))
    .addOnCompleteListener(new OnCompleteListener<AiPackStates>() {
        @Override
        public void onComplete(Task<AiPackStates> task) {
            AiPackStates aiPackStates;
            try {
                aiPackStates = task.getResult();
                AiPackState aiPackState =
                    aiPackStates.packStates().get(aiPackName);
            } catch (RuntimeExecutionException e) {
                Log.d("MainActivity", e.getMessage());
                return;
            });

यहां दिए गए AiPackState तरीकों से, एआई पैक का साइज़, अब तक डाउनलोड की गई डेटा का साइज़ (अगर अनुरोध किया गया हो), और ऐप्लिकेशन में पहले से ट्रांसफ़र की गई डेटा का साइज़ पता चलता है:

किसी एआई पैक की स्थिति जानने के लिए, status() तरीके का इस्तेमाल करें. यह तरीका, स्थिति को पूर्णांक के तौर पर दिखाता है. यह पूर्णांक, AiPackStatus क्लास में मौजूद एक कॉन्स्टेंट फ़ील्ड से मेल खाता है. जिस एआई पैक को अब तक इंस्टॉल नहीं किया गया है उसका स्टेटस AiPackStatus.NOT_INSTALLED होता है.

अगर अनुरोध पूरा नहीं होता है, तो errorCode() वाले तरीके का इस्तेमाल करें. इस तरीके से मिलने वाली वैल्यू, AiPackErrorCode क्लास में मौजूद किसी कॉन्स्टेंट फ़ील्ड से मेल खाती है.

इंस्टॉल करें

पहली बार एआई पैक डाउनलोड करने या एआई पैक को अपडेट करने के लिए, fetch() के तरीके का इस्तेमाल करें:

Task<AiPackStates> fetch(List<String> packNames)

यह तरीका, AiPackStates ऑब्जेक्ट दिखाता है. इसमें पैक की सूची के साथ-साथ, डाउनलोड की शुरुआती स्थिति और साइज़ की जानकारी होती है. अगर fetch() के ज़रिए अनुरोध किया गया एआई पैक पहले से डाउनलोड हो रहा है, तो डाउनलोड की स्थिति दिखती है और कोई और डाउनलोड शुरू नहीं होता.

डाउनलोड की स्थिति पर नज़र रखना

एआई पैक के इंस्टॉल होने की प्रोग्रेस को ट्रैक करने के लिए, आपको AiPackStateUpdateListener को लागू करना चाहिए. अलग-अलग एआई पैक की स्थिति को ट्रैक करने के लिए, स्थिति के अपडेट को हर पैक के हिसाब से बांटा गया है. आपके अनुरोध के लिए किए गए सभी डाउनलोड पूरे होने से पहले ही, उपलब्ध एआई पैक का इस्तेमाल शुरू किया जा सकता है.

void registerListener(AiPackStateUpdateListener listener)
void unregisterListener(AiPackStateUpdateListener listener)
बड़ी फ़ाइलें डाउनलोड करना

अगर डाउनलोड का साइज़ 200 एमबी से ज़्यादा है और उपयोगकर्ता वाई-फ़ाई से कनेक्ट नहीं है, तो डाउनलोड तब तक शुरू नहीं होता, जब तक उपयोगकर्ता मोबाइल डेटा कनेक्शन का इस्तेमाल करके डाउनलोड जारी रखने के लिए साफ़ तौर पर अपनी सहमति नहीं देता. इसी तरह, अगर डाउनलोड का साइज़ बड़ा है और उपयोगकर्ता का वाई-फ़ाई कनेक्शन बंद हो जाता है, तो डाउनलोड रुक जाता है. साथ ही, मोबाइल डेटा कनेक्शन का इस्तेमाल जारी रखने के लिए, उपयोगकर्ता की साफ़ तौर पर सहमति लेना ज़रूरी होता है. रोके गए पैक का स्टेटस WAITING_FOR_WIFI होता है. उपयोगकर्ता से सहमति लेने के लिए यूज़र इंटरफ़ेस (यूआई) फ़्लो को ट्रिगर करने के लिए, showConfirmationDialog() तरीका इस्तेमाल करें.

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

उपयोगकर्ता की पुष्टि करना ज़रूरी है

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

यहां किसी लिसनर को लागू करने का उदाहरण दिया गया है:

AiPackStateUpdateListener aiPackStateUpdateListener = new AiPackStateUpdateListener() {
    private final ActivityResultLauncher<IntentSenderRequest> activityResultLauncher =
      registerForActivityResult(
          new ActivityResultContracts.StartIntentSenderForResult(),
          new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
              if (result.getResultCode() == RESULT_OK) {
                Log.d(TAG, "Confirmation dialog has been accepted.");
              } else if (result.getResultCode() == RESULT_CANCELED) {
                Log.d(TAG, "Confirmation dialog has been denied by the user.");
              }
            }
          });

    @Override
    public void onStateUpdate(AiPackState aiPackState) {
      switch (aiPackState.status()) {
        case AiPackStatus.PENDING:
          Log.i(TAG, "Pending");
          break;

        case AiPackStatus.DOWNLOADING:
          long downloaded = aiPackState.bytesDownloaded();
          long totalSize = aiPackState.totalBytesToDownload();
          double percent = 100.0 * downloaded / totalSize;

          Log.i(TAG, "PercentDone=" + String.format("%.2f", percent));
          break;

        case AiPackStatus.TRANSFERRING:
          // 100% downloaded and assets are being transferred.
          // Notify user to wait until transfer is complete.
          break;

        case AiPackStatus.COMPLETED:
          // AI pack is ready to use. Run the model.
          break;

        case AiPackStatus.FAILED:
          // Request failed. Notify user.
          Log.e(TAG, aiPackState.errorCode());
          break;

        case AiPackStatus.CANCELED:
          // Request canceled. Notify user.
          break;

        case AiPackStatus.WAITING_FOR_WIFI:
        case AiPackStatus.REQUIRES_USER_CONFIRMATION:
          if (!confirmationDialogShown) {
            aiPackManager.showConfirmationDialog(activityResultLauncher);
            confirmationDialogShown = true;
          }
          break;

        case AiPackStatus.NOT_INSTALLED:
          // AI pack is not downloaded yet.
          break;
        case AiPackStatus.UNKNOWN:
          Log.wtf(TAG, "AI pack status unknown")
          break;
      }
    }
}

इसके अलावा, मौजूदा डाउनलोड की स्थिति जानने के लिए, getPackStates() का इस्तेमाल किया जा सकता है. AiPackStates में, डाउनलोड की प्रोग्रेस, डाउनलोड की स्थिति, और गड़बड़ी के कोड शामिल होते हैं.

एआई पैक ऐक्सेस करना

डाउनलोड करने का अनुरोध COMPLETED की स्थिति में पहुंचने के बाद, फ़ाइल सिस्टम कॉल का इस्तेमाल करके एआई पैक को ऐक्सेस किया जा सकता है. एआई पैक का रूट फ़ोल्डर पाने के लिए, getPackLocation() तरीका इस्तेमाल करें.

एआई पैक, एआई पैक की रूट डायरेक्ट्री में मौजूद assets डायरेक्ट्री में सेव किए जाते हैं. आसान तरीके का इस्तेमाल करके, assets डायरेक्ट्री का पाथ पाया जा सकता है assetsPath(). किसी खास ऐसेट का पाथ पाने के लिए, यह तरीका अपनाएं:

private String getAbsoluteAiAssetPath(String aiPack, String relativeAiAssetPath) {
    AiPackLocation aiPackPath = aiPackManager.getPackLocation(aiPack);

    if (aiPackPath == null) {
        // AI pack is not ready
        return null;
    }

    String aiAssetsFolderPath = aiPackPath.assetsPath();
    // equivalent to: FilenameUtils.concat(aiPackPath.path(), "assets");
    String aiAssetPath = FilenameUtils.concat(aiAssetsFolderPath, relativeAiAssetPath);
    return aiAssetPath;
}

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

डिवाइस टारगेटिंग के निर्देशों का पालन करके, उन डिवाइसों या डिवाइसों के ग्रुप के बारे में बताया जा सकता है जिन्हें आपके एआई पैक मिलने चाहिए.

Play AI Delivery API के अन्य तरीके

यहां एपीआई के कुछ अन्य तरीके दिए गए हैं. इनका इस्तेमाल, अपने ऐप्लिकेशन में किया जा सकता है.

अनुरोध रद्द करें

किसी चालू एआई पैक के अनुरोध को रद्द करने के लिए, cancel() का इस्तेमाल करें. ध्यान दें कि इस अनुरोध को पूरा करने की पूरी कोशिश की जाएगी.

एआई पैक हटाना

एआई पैक को हटाने के लिए, removePack() का इस्तेमाल करें.

एक से ज़्यादा एआई पैक की जगहें देखना

एक साथ कई एआई पैक के स्टेटस की जानकारी पाने के लिए, getPackLocations() का इस्तेमाल करें. इससे, एआई पैक और उनकी जगहों का मैप दिखता है. getPackLocations() से मिले मैप में, हर उस पैक के लिए एक एंट्री होती है जो फ़िलहाल डाउनलोड किया गया है और अप-टू-डेट है.

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

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

डिवाइस की इन प्रॉपर्टी को टारगेट किया जा सकता है:

ज़रूरी चरणों के बारे में खास जानकारी

डिवाइस टारगेटिंग की सुविधा चालू करने के लिए, यह तरीका अपनाएं:

  1. एक्सएमएल फ़ाइल में अपने डिवाइस ग्रुप तय करें.
  2. बताएं कि आपके बंडल के कौनसे हिस्से किन डिवाइस ग्रुप में शामिल होने चाहिए.
  3. [ज़रूरी नहीं] अपने कॉन्फ़िगरेशन की स्थानीय तौर पर जांच करें.
  4. Google Play पर अपना बंडल (जिसमें एक्सएमएल फ़ाइल शामिल है) अपलोड करें.

Android Gradle प्लग इन का वर्शन देखना

डिवाइस टारगेटिंग का इस्तेमाल करने के लिए, पक्का करें कि आपके Android Gradle प्लग इन (AGP) का वर्शन कम से कम 8.10.0-alpha01 हो. इसे Android Studio Meerkat 2 के साथ पैकेज किया गया है, जो canary में है.

Android Gradle प्लग इन में इस सुविधा को चालू करना

आपकी gradle.properties फ़ाइल में, डिवाइस टारगेटिंग की सुविधा साफ़ तौर पर चालू होनी चाहिए:

android.experimental.enableDeviceTargetingConfigApi=true

डिवाइस टारगेटिंग कॉन्फ़िगरेशन एक्सएमएल फ़ाइल बनाना

डिवाइस टारगेटिंग कॉन्फ़िगरेशन फ़ाइल एक एक्सएमएल फ़ाइल होती है. इसमें, अपने पसंद के डिवाइस ग्रुप तय किए जाते हैं. उदाहरण के लिए, qti_v79 नाम का एक डिवाइस ग्रुप तय किया जा सकता है. इसमें ऐसे सभी डिवाइस शामिल होंगे जिनमें चिप पर Qualcomm SM8750 सिस्टम है:

<config:device-targeting-config
    xmlns:config="http://schemas.android.com/apk/config">

    <config:device-group name="qti_v79">
        <config:device-selector>
            <config:system-on-chip manufacturer="QTI" model="SM8750"/>
        </config:device-selector>
    </config:device-group>

</config:device-targeting-config>

डिवाइस ग्रुप में ज़्यादा से ज़्यादा पांच डिवाइस सिलेक्टर होते हैं. किसी डिवाइस को डिवाइस ग्रुप में शामिल किया जाता है, अगर वह डिवाइस ग्रुप के किसी डिवाइस सिलेक्टर से मेल खाता है.

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

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

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

डिवाइस की उपलब्ध प्रॉपर्टी

  • device_ram: डिवाइस के रैम से जुड़ी ज़रूरी शर्तें
    • min_bytes (inclusive): ज़रूरी रैम (बाइट में)
    • max_bytes (खास): ज़्यादा से ज़्यादा रैम (बाइट में)
  • included_device_ids: इस सिलेक्टर में शामिल किए जाने वाले डिवाइस मॉडल (हर ग्रुप में ज़्यादा से ज़्यादा 10,000 device_ids). यह प्रॉपर्टी तब लागू होती है, जब डिवाइस, सूची में मौजूद किसी भी device_id से मेल खाता हो.
    • build_brand: डिवाइस बनाने वाली कंपनी
    • build_device: डिवाइस मॉडल का कोड
  • excluded_device_ids: इस सिलेक्टर में शामिल नहीं किए जाने वाले डिवाइस मॉडल (हर ग्रुप में ज़्यादा से ज़्यादा 10,000 device_ids). यह प्रॉपर्टी तब पूरी होती है, जब डिवाइस, सूची में मौजूद किसी भी device_id से मेल न खाता हो.
    • build_brand: डिवाइस बनाने वाली कंपनी
    • build_device: डिवाइस मॉडल का कोड
  • required_system_features: इस सिलेक्टर की मदद से, डिवाइस में ये सुविधाएं होनी चाहिए (हर ग्रुप में ज़्यादा से ज़्यादा 100 सुविधाएं). इस प्रॉपर्टी की ज़रूरी शर्तें पूरी करने के लिए, डिवाइस में इस सूची में शामिल सभी सिस्टम सुविधाएं होनी चाहिए.

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

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

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

    • name: सिस्टम की सुविधा
  • system-on-chip: इस सिलेक्टर में शामिल किए जाने वाले चिप पर सिस्टम. इस प्रॉपर्टी की शर्तें पूरी करने के लिए, डिवाइस में इस सूची में शामिल कोई चिप होना चाहिए.

यहां सभी संभावित डिवाइस प्रॉपर्टी दिखाने का उदाहरण दिया गया है:

<config:device-targeting-config
    xmlns:config="http://schemas.android.com/apk/config">

    <config:device-group name="myCustomGroup1">
      <config:device-selector ram-min-bytes="8000000000">
        <config:included-device-id brand="google" device="redfin"/>
        <config:included-device-id brand="google" device="sailfish"/>
        <config:included-device-id brand="good-brand"/>
        <config:excluded-device-id brand="google" device="caiman"/>
        <config:system-on-chip manufacturer="Sinclair" model="ZX80"/>
        <config:system-on-chip manufacturer="Commodore" model="C64"/>
      </config:device-selector>
      <config:device-selector ram-min-bytes="16000000000"/>
    </config:device-group>

    <config:device-group name="myCustomGroup2">
      <config:device-selector ram-min-bytes="4000000000" ram-max-bytes="8000000000">
        <config:required-system-feature name="android.hardware.bluetooth"/>
        <config:required-system-feature name="android.hardware.location"/>
        <config:forbidden-system-feature name="android.hardware.camera"/>
        <config:forbidden-system-feature name="mindcontrol.laser"/>
      </config:device-selector>
    </config:device-group>

</config:device-targeting-config>

डिवाइस बनाने वाली कंपनी और डिवाइस के मॉडल के आधिकारिक कोड

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

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

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

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

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

अपने ऐप्लिकेशन बंडल में, डिवाइस टारगेटिंग कॉन्फ़िगरेशन फ़ाइल शामिल करना

अपने मुख्य मॉड्यूल की build.gradle फ़ाइल में ये चीज़ें जोड़ें:

android {
  ...
  bundle {
    deviceTargetingConfig = file('device_targeting_config.xml')
    deviceGroup {
      enableSplit = true   // split bundle by #group
      defaultGroup = "other"  // group used for standalone APKs
    }
  }
  ...
}

device_targeting_config.xml, मुख्य मॉड्यूल के हिसाब से आपकी कॉन्फ़िगरेशन फ़ाइल का पाथ है. इससे यह पक्का होता है कि आपकी कॉन्फ़िगरेशन फ़ाइल को आपके ऐप्लिकेशन बंडल के साथ पैकेज किया गया है.

deviceGroup क्लॉज़ यह पक्का करता है कि आपके बंडल से जनरेट किए गए APK, डिवाइस ग्रुप के हिसाब से बांट दिए जाएं.

अपने एआई पैक के लिए डिवाइस टारगेटिंग का इस्तेमाल करना

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

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

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

...
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup1/
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup2/
...

इस उदाहरण में, आपको किसी भी पोस्टफ़िक्स के बिना ai-pack-name/assets/image-classifier/ का रेफ़रंस देना होगा.

myCustomGroup1 में मौजूद डिवाइसों को image-classifier#group_myCustomGroup1/ में मौजूद सभी एसेट मिलेंगी. वहीं, myCustomGroup2 में मौजूद डिवाइसों को image-classifier#group_myCustomGroup2/ में मौजूद सभी एसेट मिलेंगी.

myCustomGroup1 या myCustomGroup2 से जुड़े नहीं होने वाले डिवाइसों को, खाली ai-pack-name पैक मिलेगा.

ऐसा इसलिए होता है, क्योंकि किसी भी डिवाइस ग्रुप से मेल न खाने वाले डिवाइसों को आपके एआई पैक का डिफ़ॉल्ट वैरिएंट मिलेगा. इसमें ऐसी कोई भी चीज़ शामिल है जो #group_suffix वाली डायरेक्ट्री में नहीं है.

एआई पैक डाउनलोड करने के बाद, यह देखा जा सकता है कि आपका मॉडल मौजूद है या नहीं. इसके लिए, इंस्टॉल के समय इंस्टॉल होने वाले पैक के लिए AssetManager या फ़ास्ट-फ़ॉलो और ऑन-डिमांड पैक के लिए AiPackManager का इस्तेमाल करें. ऐसा करने के उदाहरण, सैंपल ऐप्लिकेशन में सभी डिलीवरी मोड के लिए दिखाए गए हैं.

अपने फ़ीचर मॉड्यूल के लिए डिवाइस टारगेटिंग का इस्तेमाल करना

सुविधा वाले मॉड्यूल के लिए, डिवाइस टारगेटिंग का भी इस्तेमाल किया जा सकता है. सुविधा वाले मॉड्यूल को डिवाइस ग्रुप के हिसाब से बांटने के बजाय, यह तय किया जा सकता है कि डिवाइस ग्रुप की सदस्यता के आधार पर, पूरा मॉड्यूल डिलीवर किया जाए या नहीं.

myCustomGroup1 या myCustomGroup2 में शामिल डिवाइसों पर कोई फ़ीचर मॉड्यूल डिलीवर करने के लिए, उसके AndroidManifest.xml में बदलाव करें:

<manifest ...>
  ...
  <dist:module dist:title="...">
    <dist:delivery>
      <dist:install-time>
        <dist:conditions>
          <dist:device-groups>
            <dist:device-group dist:name="myCustomGroup1"/>
            <dist:device-group dist:name="myCustomGroup2"/>
          </dist:device-groups>
          ...
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
  </dist:module>
  ...
</manifest>

स्थानीय तौर पर जांच करना

अपने नए बंडल के लिए रिलीज़ बनाने से पहले, संगठन में काम करने वालों के साथ ऐप्लिकेशन शेयर करने की सुविधा या Bundletool की मदद से, स्थानीय तौर पर जांच की जा सकती है.

अंदरूनी तौर पर ऐप्लिकेशन शेयर करना

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

संगठन में काम करने वालों के साथ ऐप्लिकेशन शेयर करने के निर्देश देखें.

Bundletool

इसके अलावा, bundletool (1.18.0 या इसके बाद का वर्शन) का इस्तेमाल करके, एपीके जनरेट किए जा सकते हैं और उन्हें अपने डिवाइस पर साइडलोड किया जा सकता है. अपने ऐप्लिकेशन को स्थानीय तौर पर जांचने के लिए, bundletool का इस्तेमाल करके यह तरीका अपनाएं:

  1. Android Studio या bundletool की मदद से अपना ऐप्लिकेशन बंडल बनाएं.

  2. --local-testing फ़्लैग के साथ APK जनरेट करें:

    java -jar bundletool-all.jar build-apks --bundle=path/to/your/bundle.aab \
      --output=output.apks --local-testing
    
  3. किसी डिवाइस को कनेक्ट करें और APKs को साइडलोड करने के लिए bundletool चलाएं:

    # Example without Device Targeting Configuration
    java -jar bundletool.jar install-apks --apks=output.apks
    
    # Example with Device Targeting Configuration (you must specify which groups the connected device belongs to)
    java -jar bundletool.jar install-apks --apks=output.apks --device-groups=myCustomGroup1,myCustomGroup2
    

bundletool की मदद से स्थानीय तौर पर टेस्ट करने की सीमाएं

bundletool की मदद से स्थानीय तौर पर टेस्ट करने की ये सीमाएं हैं:

  • fast-follow पैक, on-demand पैक की तरह काम करते हैं. इसका मतलब है कि ऐप्लिकेशन को साइडलोड करने पर, ये डेटा अपने-आप फ़ेच नहीं होंगे. ऐप्लिकेशन शुरू होने पर, डेवलपर को मैन्युअल तरीके से इनका अनुरोध करना होगा. इसके लिए, आपके ऐप्लिकेशन के कोड में कोई बदलाव करने की ज़रूरत नहीं है.
  • पैक, Play के बजाय बाहरी स्टोरेज से फ़ेच किए जाते हैं. इसलिए, यह जांच नहीं की जा सकती कि नेटवर्क से जुड़ी गड़बड़ियों के मामले में आपका कोड कैसा व्यवहार करता है.
  • लोकल टेस्टिंग में, Wi-Fi के लिए इंतज़ार करने की स्थिति शामिल नहीं होती.
  • अपडेट नहीं किए जा सकते. अपने बिल्ड का नया वर्शन इंस्टॉल करने से पहले, पुराने वर्शन को मैन्युअल तरीके से अनइंस्टॉल करें.

पुष्टि करें कि सही APK इंस्टॉल किए जा रहे हैं

डिवाइस पर सिर्फ़ सही APK इंस्टॉल किए गए हैं, यह पक्का करने के लिए यह तरीका अपनाएं

adb shell pm path {packageName}

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

package:{...}/base.apk
package:{...}/split_config.en.apk
package:{...}/split_config.xxhdpi.apk
package:{...}/split_main_ai-pack-name.apk
package:{...}/split_main_ai-pack-name.config.group_myCustomGroup1.apk

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

Google Play पर टेस्ट करना और रिलीज़ करना

हमारा सुझाव है कि आप इंटरनल टेस्ट ट्रैक की मदद से, Google Play पर अपने ऐप्लिकेशन की पूरी तरह से जांच करें.

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

Play for On-device AI का इस्तेमाल करने वाले ऐप्लिकेशन का सैंपल

हमारे सैंपल ऐप्लिकेशन का ऐक्सेस पाने के लिए, अपने Google Play पार्टनर मैनेजर से संपर्क करें.

इसमें, डिवाइस टारगेटिंग कॉन्फ़िगरेशन के साथ-साथ हर डिलीवरी मोड का इस्तेमाल करने का तरीका बताया गया है. शुरू करने के लिए, लोकल टेस्टिंग सेक्शन देखें.

सुझाव या राय दें

रिलीज़ होने से पहले ऐप्लिकेशन को आज़माने की सुविधा वाले प्रोग्राम में हिस्सा लेने वाले लोगों को, समस्याओं की शिकायत करनी चाहिए और सुझाव/राय देनी चाहिए. इसके लिए, अपने Google Play पार्टनर मैनेजर से संपर्क करें या डिवाइस पर एआई (AI) की सुविधा के लिए उपलब्ध Play की टीम से संपर्क करें.

Android ऐप्लिकेशन बंडल के बारे में ज़्यादा जानें. साथ ही, AI डिलीवरी SDK टूल के रेफ़रंस पढ़ें.