बंडलटूल

bundletool एक ऐसा टूल है जिसका इस्तेमाल Android Studio, Android Gradle प्लगिन, और Google Play, Android ऐप्लिकेशन बंडल बनाने के लिए करते हैं. bundletool किसी ऐप्लिकेशन बंडल को अलग-अलग APK में बदल सकता है, जिन्हें डिवाइसों पर डिप्लॉय किया जाता है.

Android SDK बंडल (एएसबी) और उनके APK, bundletool की मदद से बनाए जाते हैं. यह कमांड-लाइन टूल के तौर पर भी उपलब्ध है. इसलिए, ऐप्लिकेशन बंडल और एसडीके बंडल खुद बनाए जा सकते हैं. साथ ही, अपने ऐप्लिकेशन के APK या रनटाइम के दौरान चालू होने वाले एसडीके के APK के Google Play के सर्वर-साइड बिल्ड को फिर से बनाया जा सकता है.

bundletool भाषा डाउनलोड करें

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

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

Android Studio या bundletool कमांड-लाइन टूल का इस्तेमाल करके, अपना Android ऐप्लिकेशन बंडल बनाया जा सकता है. इसके बाद, इस ऐप्लिकेशन बंडल से APK जनरेट करने की सुविधा को टेस्ट किया जा सकता है.

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

Android Studio और Android Gradle प्लगिन का इस्तेमाल करके, Android ऐप्लिकेशन बंडल बनाएं और उसे साइन करें. हालांकि, अगर आईडीई का इस्तेमाल नहीं किया जा सकता है, तो कमांड लाइन से ऐप्लिकेशन बंडल बनाएं. इसके बाद, jarsigner का इस्तेमाल करके उस पर साइन करें. उदाहरण के लिए, अगर लगातार बिल्ड सर्वर का इस्तेमाल किया जा रहा है, तो आईडीई का इस्तेमाल नहीं किया जा सकता.

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

अपने ऐप्लिकेशन बंडल से APK का सेट जनरेट करना

Android ऐप्लिकेशन बंडल बनाने के बाद, यह जांच करें कि Google Play इसका इस्तेमाल करके APK कैसे जनरेट करता है. साथ ही, यह भी देखें कि किसी डिवाइस पर डिप्लॉय किए जाने पर ये APK कैसे काम करते हैं.

ऐप्लिकेशन बंडल की जांच करने के दो तरीके हैं:

इस सेक्शन में, bundletool का इस्तेमाल करके, अपने ऐप्लिकेशन बंडल की स्थानीय तौर पर जांच करने का तरीका बताया गया है.

जब bundletool आपके ऐप्लिकेशन बंडल से APK जनरेट करता है, तो वह जनरेट किए गए APK को APK सेट संग्रह नाम के कंटेनर में शामिल करता है. यह .apks फ़ाइल एक्सटेंशन का इस्तेमाल करता है. अपने ऐप्लिकेशन बंडल से, आपके ऐप्लिकेशन के साथ काम करने वाले सभी डिवाइस कॉन्फ़िगरेशन के लिए APK सेट जनरेट करने के लिए, bundletool build-apks कमांड का इस्तेमाल करें. इसे यहां दिखाया गया है:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

अगर आपको किसी डिवाइस पर APK डिप्लॉय करने हैं, तो आपको अपने ऐप्लिकेशन की साइनिंग की जानकारी भी शामिल करनी होगी. यह जानकारी, यहां दिए गए निर्देश में दिखाई गई है. अगर आपने साइन करने की जानकारी नहीं दी है, तो bundletool आपके APK को डीबग कुंजी से साइन करने की कोशिश करता है.

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

नीचे दी गई टेबल में, bundletool build-apks कमांड का इस्तेमाल करते समय सेट किए जा सकने वाले अलग-अलग फ़्लैग और विकल्पों के बारे में ज़्यादा जानकारी दी गई है:

पहली टेबल. bundletool build-apks कमांड के लिए विकल्प

चिह्नित करें ब्यौरा
--bundle=path (ज़रूरी है) इससे Android Studio का इस्तेमाल करके बनाए गए ऐप्लिकेशन बंडल का पाथ तय होता है. ज़्यादा जानने के लिए, अपना प्रोजेक्ट बनाना लेख पढ़ें.
--output=path (ज़रूरी है) इससे आउटपुट .apks फ़ाइल का नाम तय होता है. इस फ़ाइल में आपके ऐप्लिकेशन के सभी APK आर्टफ़ैक्ट होते हैं. किसी डिवाइस पर इस फ़ाइल में मौजूद आर्टफ़ैक्ट की जांच करने के लिए, कनेक्ट किए गए डिवाइस पर APK डिप्लॉय करने के तरीके के बारे में दिए गए सेक्शन में जाकर, तरीका अपनाएं.
--overwrite --output विकल्प का इस्तेमाल करके, तय किए गए पाथ के साथ किसी भी मौजूदा आउटपुट फ़ाइल को ओवरराइट करता है. अगर आपने इस फ़्लैग को शामिल नहीं किया है और आउटपुट फ़ाइल पहले से मौजूद है, तो आपको बिल्ड से जुड़ी गड़बड़ी दिखेगी.
--aapt2=path AAPT2 के लिए कस्टम पाथ तय करता है. डिफ़ॉल्ट रूप से, bundletool में AAPT2 का अपना वर्शन शामिल होता है.
--ks=path (वैकल्पिक) APK पर साइन करने के लिए इस्तेमाल किए गए डिप्लॉयमेंट कीस्टोर का पाथ बताता है. इस फ़्लैग को शामिल न करने पर, bundletool आपके APK पर डीबग साइनिंग कुंजी से साइन करने की कोशिश करता है.
--ks-pass=pass:password
या
--ks-pass=file:/path/to/file
यह विकल्प, आपके कीस्टोर का पासवर्ड तय करता है. अगर आपको सामान्य टेक्स्ट में पासवर्ड डालना है, तो उसके साथ pass: जोड़ें. अगर आपको पासवर्ड वाली किसी फ़ाइल का पाथ पास करना है, तो उसे file: के साथ क्वालिफ़ाई करें. अगर आपने --ks फ़्लैग का इस्तेमाल करके किसी कीस्टोर के बारे में बताया है, लेकिन --ks-pass के बारे में नहीं बताया है, तो bundletool आपको कमांड लाइन से पासवर्ड डालने के लिए कहेगा.
--ks-key-alias=alias इससे उस हस्ताक्षर करने वाली कुंजी का उपनाम तय होता है जिसका इस्तेमाल करना है.
--key-pass=pass:password
या
--key-pass=file:/path/to/file
इससे साइनिंग पासकोड के लिए पासवर्ड तय किया जाता है. अगर आपको सामान्य टेक्स्ट में पासवर्ड डालना है, तो उसके साथ pass: जोड़ें. अगर आपको पासवर्ड वाली किसी फ़ाइल का पाथ पास करना है, तो उसे file: के साथ क्वालिफ़ाई करें.

अगर यह पासवर्ड, कीस्टोर के पासवर्ड से मिलता-जुलता है, तो इस फ़्लैग को हटाया जा सकता है.

--connected-device bundletool को कनेक्ट किए गए डिवाइस के कॉन्फ़िगरेशन के हिसाब से APK बनाने का निर्देश देता है. अगर आपने इस फ़्लैग को शामिल नहीं किया है, तो bundletool आपके ऐप्लिकेशन के लिए, उन सभी डिवाइस कॉन्फ़िगरेशन के लिए APK जनरेट करता है जिन पर आपका ऐप्लिकेशन काम करता है.
--device-id=serial-number अगर आपके पास एक से ज़्यादा कनेक्ट किए गए डिवाइस हैं, तो इस फ़्लैग का इस्तेमाल करके उस डिवाइस का सीरियल आईडी बताएं जिस पर आपको अपना ऐप्लिकेशन डिप्लॉय करना है.
--device-spec=spec_json यह .json फ़ाइल का पाथ देता है. इस फ़ाइल में, टारगेट किए जाने वाले डिवाइस का कॉन्फ़िगरेशन होता है. ज़्यादा जानने के लिए, डिवाइस स्पेसिफ़िकेशन की JSON फ़ाइलें जनरेट और इस्तेमाल करने के तरीके के बारे में जानकारी देने वाले सेक्शन पर जाएं.
--mode=universal इस कुकी से मोड को universal पर सेट किया जाता है. इस विकल्प का इस्तेमाल तब करें, जब आपको bundletool एक ऐसा APK बनाना हो जिसमें आपके ऐप्लिकेशन का पूरा कोड और संसाधन शामिल हों. इससे यह APK, आपके ऐप्लिकेशन के साथ काम करने वाले सभी डिवाइस कॉन्फ़िगरेशन के साथ काम करेगा.

ध्यान दें: bundletool में सिर्फ़ ऐसे फ़ीचर मॉड्यूल शामिल होते हैं जो यूनिवर्सल APK में अपने मेनिफ़ेस्ट में <dist:fusing dist:include="true"/> के बारे में बताते हैं. ज़्यादा जानने के लिए, सुविधा वाले मॉड्यूल के मेनिफ़ेस्ट के बारे में पढ़ें.

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

--local-testing इससे आपके ऐप्लिकेशन बंडल को स्थानीय तौर पर जांच करने की सुविधा मिलती है. लोकल टेस्टिंग की मदद से, Google Play के सर्वर पर अपलोड किए बिना, टेस्टिंग के चरणों को जल्दी-जल्दी दोहराया जा सकता है.

--local-testing फ़्लैग का इस्तेमाल करके, मॉड्यूल के इंस्टॉलेशन की जांच करने के तरीके का उदाहरण देखने के लिए, मॉड्यूल के इंस्टॉलेशन की जांच लोकल लेवल पर करना लेख पढ़ें.

कनेक्ट किए गए डिवाइस पर APK डिप्लॉय करना

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

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

किसी APK सेट से अपना ऐप्लिकेशन डिप्लॉय करने के लिए, install-apks निर्देश का इस्तेमाल करें. साथ ही, --apks=/path/to/apks फ़्लैग का इस्तेमाल करके, APK सेट का पाथ तय करें. जैसा कि यहां दिए गए निर्देश में दिखाया गया है. अगर आपने एक से ज़्यादा डिवाइस कनेक्ट किए हैं, तो --device-id=serial-id फ़्लैग जोड़कर, टारगेट डिवाइस के बारे में बताएं.

bundletool install-apks --apks=/MyApp/my_app.apks

डिवाइस के हिसाब से APK का सेट जनरेट करना

अगर आपको अपने ऐप्लिकेशन के लिए, सभी डिवाइस कॉन्फ़िगरेशन के हिसाब से APK का सेट नहीं बनाना है, तो --connected-device विकल्प का इस्तेमाल करके, सिर्फ़ कनेक्ट किए गए डिवाइस के कॉन्फ़िगरेशन को टारगेट करने वाले APK बनाए जा सकते हैं. इसके लिए, यहां दिया गया निर्देश इस्तेमाल करें. अगर आपने एक से ज़्यादा डिवाइस कनेक्ट किए हैं, तो --device-id=serial-id फ़्लैग शामिल करके, टारगेट डिवाइस के बारे में बताएं.

bundletool build-apks --connected-device
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

डिवाइस के स्पेसिफ़िकेशन की JSON फ़ाइलें जनरेट करना और उनका इस्तेमाल करना

bundletool, JSON फ़ाइल में बताए गए डिवाइस कॉन्फ़िगरेशन के हिसाब से, APK सेट जनरेट कर सकता है. कनेक्ट किए गए डिवाइस के लिए JSON फ़ाइल जनरेट करने के लिए, यह कमांड चलाएं:

bundletool get-device-spec --output=/tmp/device-spec.json

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

bundletool build-apks --device-spec=/MyApp/pixel2.json
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

डिवाइस के स्पेसिफ़िकेशन की JSON फ़ाइल मैन्युअल तरीके से बनाना

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

{
  "supportedAbis": ["arm64-v8a", "armeabi-v7a"],
  "supportedLocales": ["en", "fr"],
  "screenDensity": 640,
  "sdkVersion": 27
}

इसके बाद, इस JSON को bundle extract-apks कमांड को पास किया जा सकता है. इसके बारे में पिछले सेक्शन में बताया गया है.

किसी मौजूदा APK सेट से, डिवाइस के हिसाब से APK निकालना

अगर आपके पास पहले से मौजूद कोई APK सेट है और आपको उससे किसी खास डिवाइस कॉन्फ़िगरेशन को टारगेट करने वाले APK का सबसेट निकालना है, तो extract-apks कमांड का इस्तेमाल करें. साथ ही, डिवाइस स्पेसिफ़िकेशन JSON के बारे में बताएं. उदाहरण के लिए:

bundletool extract-apks
--apks=/MyApp/my_existing_APK_set.apks
--output-dir=/MyApp/my_pixel2_APK_set.apks
--device-spec=/MyApp/bundletool/pixel2.json

किसी APK सेट में मौजूद APK के अनुमानित डाउनलोड साइज़ का आकलन करना

किसी एपीके सेट में मौजूद एपीके के अनुमानित डाउनलोड साइज़ का पता लगाने के लिए, get-size total कमांड का इस्तेमाल करें. इससे यह पता चलेगा कि कंप्रेस किए गए एपीके को वायर पर कैसे भेजा जाएगा:

bundletool get-size total --apks=/MyApp/my_app.apks

नीचे दिए गए फ़्लैग का इस्तेमाल करके, get-size total कमांड के व्यवहार में बदलाव किया जा सकता है:

टेबल 2. get-size total कमांड के लिए विकल्प

चिह्नित करें ब्यौरा
--apks=path (ज़रूरी है) इससे मौजूदा APK सेट फ़ाइल का पाथ पता चलता है. इस फ़ाइल के डाउनलोड साइज़ का आकलन किया जा रहा है.
--device-spec=path यह मैचिंग के लिए इस्तेमाल की जाने वाली डिवाइस स्पेसिफ़िकेशन फ़ाइल (get-device-spec से या मैन्युअल तरीके से बनाई गई) का पाथ तय करता है. कॉन्फ़िगरेशन के सेट का आकलन करने के लिए, पाथ का कुछ हिस्सा तय किया जा सकता है.
--dimensions=dimensions इस विकल्प से उन डाइमेंशन के बारे में पता चलता है जिनका इस्तेमाल, साइज़ का अनुमान लगाने के लिए किया जाता है. यह कॉमा से अलग की गई इन सूचियों को स्वीकार करता है: SDK, ABI, SCREEN_DENSITY, और LANGUAGE. सभी डाइमेंशन के हिसाब से मेज़र करने के लिए, ALL तय करें.
--instant यह इंस्टॉल किए जा सकने वाले APK के बजाय, झटपट ऐप्लिकेशन की सुविधा वाले APK के डाउनलोड साइज़ को मेज़र करता है. डिफ़ॉल्ट रूप से, bundletool इंस्टॉल किए जा सकने वाले APK के डाउनलोड साइज़ को मेज़र करता है.
--modules=modules इसमें APK सेट में मौजूद उन मॉड्यूल की कॉमा लगाकर अलग की गई सूची होती है जिन्हें मेज़रमेंट में शामिल करना है. bundletool कमांड, तय किए गए सेट के लिए सभी ज़रूरी मॉड्यूल को अपने-आप शामिल कर लेती है. डिफ़ॉल्ट रूप से, यह कमांड पहली बार डाउनलोड करने के दौरान इंस्टॉल किए गए सभी मॉड्यूल के डाउनलोड साइज़ को मेज़र करती है.

अन्य संसाधन

bundletool का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन बंडल: bundletool और Play Console की मदद से बंडलों की टेस्टिंग करना वीडियो देखें.