एएपीटी2

AAPT2 (Android ऐसेट पैकेजिंग टूल), एक बिल्ड टूल है. इसे Android Studio और 'Android Gradle प्लग इन', आपके ऐप्लिकेशन के डेटा को कंपाइल और पैकेज करने के लिए इस्तेमाल करता है संसाधन. AAPT2 पार्स, इंडेक्स, और संसाधनों को एक बाइनरी फ़ॉर्मैट में इकट्ठा करता है, जिसे Android प्लैटफ़ॉर्म.

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

कमांड लाइन से Android SDK बिल्ड टूल डाउनलोड करने के लिए, sdkmanager पर टैप करें और इन निर्देश को चलाएं:

sdkmanager "build-tools;build-tools-version"

SDK बिल्ड टूल डाउनलोड करने के बाद, AAPT2 को यहां खोजें android_sdk/build-tools/version/.

क्योंकि Android SDK बिल्ड टूल में हुए बदलाव रिलीज़ नहीं किए गए हैं अक्सर, आपके SDK टूल के बिल्ड टूल में शामिल AAPT2 का वर्शन सबसे नया. AAPT2 का सबसे नया वर्शन पाने के लिए, Google Maven से AAPT2 को डाउनलोड करें.

Linux या Mac पर कमांड लाइन से AAPT2 का इस्तेमाल करने के लिए, aapt2 कमांड चलाएं. Windows पर, aapt2.exe निर्देश चलाएं.

AAPT2, इंंक्रीमेंटल सुविधा को चालू करके, संसाधनों को तेज़ी से कंपाइल करने की सुविधा देता है कंपाइलेशन. इंंक्रीमेंटल कंपाइलेशन को पूरा करने के लिए, रिसॉर्स प्रोसेसिंग इन्हें दो चरणों में बांटा गया है:

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

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

Google Maven से AAPT2 डाउनलोड करें

बिल्ड टूल में शामिल नहीं किए गए AAPT2 का नया वर्शन पाने के लिए, Google की Maven रिपॉज़िटरी से AAPT2 को डाउनलोड करने के लिए, यहां दिया गया तरीका अपनाएं:

  1. डेटा स्टोर करने की जगह के इंडेक्स में, नेविगेट करें com.android.tools.build > पर aapt2.
  2. AAPT2 के नए वर्शन का नाम कॉपी करें.
  3. आपने जिस वर्शन का नाम कॉपी किया है उसे नीचे दिए गए यूआरएल में डालें और अपना टारगेट ऑपरेटिंग सिस्टम: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version/aapt2-aapt2-version- [windows | linux | osx].jar

    उदाहरण के लिए, Windows के लिए 3.2.0-alpha18-4804415 वर्शन डाउनलोड करने के लिए, इसका इस्तेमाल करें: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ 3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-4804415-Windows.jar

  4. ब्राउज़र में यूआरएल पर जाएं. AAPT2 जल्द ही डाउनलोड होना शुरू हो जाएगा.

  5. अभी डाउनलोड की गई JAR फ़ाइल को अनपैकेज करें.

    JAR फ़ाइल में, एक्ज़ीक्यूटेबल aapt2 फ़ाइल होनी चाहिए. साथ ही, कुछ ऐसी लाइब्रेरी होनी चाहिए जिन्हें यह कई बातों पर निर्भर करता है.

कंपाइल करें

AAPT2 सभी फ़ॉर्मैट को कंपाइल करता है Android संसाधन टाइप, जैसे ड्रॉबल और एक्सएमएल फ़ाइलों में. कंपाइलेशन के लिए AAPT2 को शुरू करने पर, हर प्रॉम्प्ट के लिए इनपुट के तौर पर एक संसाधन फ़ाइल का इस्तेमाल किया जा सकता है. इसके बाद, AAPT2 फ़ाइल को पार्स करता है और .flat एक्सटेंशन वाली एक इंटरमीडिएट बाइनरी फ़ाइल जनरेट करता है.

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

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

टेबल 1. इनपुट और आउटपुट फ़ाइल कंपाइलेशन के टाइप

टेक्स्ट लिखो आउटपुट
एक्सएमएल रिसॉर्स फ़ाइलें, जैसे स्ट्रिंग और स्टाइल, res/values/ डायरेक्ट्री में मौजूद है संसाधन टेबल, जिसके एक्सटेंशन के तौर पर *.arsc.flat है.
अन्य सभी संसाधन फ़ाइलें.

res/values/ निर्देशिका के अंतर्गत आने वाली फ़ाइलों के अलावा अन्य सभी फ़ाइलें *.flat एक्सटेंशन वाली बाइनरी एक्सएमएल फ़ाइलों में बदला गया.

इसके अलावा, सभी PNG फ़ाइलें डिफ़ॉल्ट रूप से क्रंच की जाती हैं और *.png.flat एक्सटेंशन का इस्तेमाल किया जाता है. अगर आप PNG को कंप्रेस नहीं करना चाहते हैं, तो आप कंपाइलेशन के दौरान --no-crunch विकल्प.

AAPT2 आउटपुट फ़ाइलों को एक्ज़ीक्यूट नहीं किया जा सकता. हालांकि, आपको बाद में इन्हें शामिल करना होगा APK जनरेट करने के लिए, लिंक फ़ेज़ में इनपुट के तौर पर बाइनरी फ़ाइलें. हालांकि, जनरेट की गई APK फ़ाइल, एक्ज़ीक्यूटेबल नहीं है, जिसे किसी Android डिवाइस पर डिप्लॉय किया जा सकता है डिवाइस तुरंत भेज दिया जाता है, क्योंकि इसमें DEX फ़ाइलें नहीं होती हैं और हस्ताक्षर नहीं किया है.

सिंटैक्स कंपाइल करें

compile के इस्तेमाल का सामान्य सिंटैक्स इस तरह है:

aapt2 compile path-to-input-files [options] -o output-directory/

नीचे दिए गए उदाहरण में, AAPT2, values.xml नाम की रिसॉर्स फ़ाइलों को कंपाइल करता है और myImage.png अलग-अलग:

aapt2 compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/
aapt2 compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/

जैसा कि पहली टेबल में दिखाया गया है, आउटपुट फ़ाइल का नाम इनपुट के हिसाब से होता है फ़ाइल नाम और इसकी पैरंट डायरेक्ट्री का नाम.

पिछले उदाहरण के लिए, इनपुट के तौर पर strings.xml फ़ाइल के साथ, aapt2 अपने-आप आउटपुट फ़ाइल को values-en_strings.arsc.flat नाम देता है. हालांकि, कंपाइलेशन ड्रॉ करने लायक डायरेक्ट्री में सेव की गई ड्रॉ करने लायक फ़ाइल को drawable_img.png.flat नाम दिया जाता है.

विकल्पों को कंपाइल करें

ऐसे कई विकल्प हैं जिनका इस्तेमाल compile निर्देश के साथ किया जा सकता है, जैसा कि दिखाया गया है टेबल 2 में:

दूसरी टेबल. कमांड के विकल्प कंपाइल करें

विकल्प ब्यौरा
-o path

यह, कंपाइल किए गए संसाधन(संसाधनों) के लिए आउटपुट पाथ के बारे में बताता है.

यह एक ज़रूरी फ़्लैग है, क्योंकि आपको डायरेक्ट्री में AAPT2, इकट्ठा किए गए संसाधनों का आउटपुट और उन्हें सेव करता है.

--dir directory

इस नीति से, संसाधनों को स्कैन करने के लिए डायरेक्ट्री के बारे में पता चलता है.

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

--pseudo-localize pseudolocalized जनरेट करता है डिफ़ॉल्ट स्ट्रिंग के वर्शन, जैसे कि en-XA और en-XB.
--no-crunch इससे PNG प्रोसेसिंग बंद हो जाती है.

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

--legacy AAPT के पुराने वर्शन का इस्तेमाल करते समय, जिन गड़बड़ियों की अनुमति है उन्हें इस तरह से माना जाता है चेतावनियां.

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

-zip file file एक ZIP फ़ाइल है, जिसमें स्कैन करने के लिए res डायरेक्ट्री मौजूद है संसाधन.
-output-text-symbols file ऐसी टेक्स्ट फ़ाइल जनरेट करता है जिसमें बताए गए संसाधन सिंबल शामिल होते हैं file.
-preserve-visibility-of-styleables अगर बताया गया हो, तो स्टाइल किए जा सकने वाले विज्ञापनों के लिए, 'किसको दिखे' सेटिंग से जुड़े वही नियम लागू होते हैं का इस्तेमाल दूसरे सभी संसाधनों के लिए किया जाता है. अगर ऐसा नहीं होता है, तो सभी स्टाइल सार्वजनिक कर दिए जाएंगे.
-visibility [public|private|default|] इकट्ठा किए गए रिसॉर्स को बताए गए लेवल पर सेट करता है.
-trace-folder folder दिए गए फ़ोल्डर में systrace JSON ट्रेस फ़्रैगमेंट जनरेट करता है.
-source-path path यह, कंपाइल की गई संसाधन फ़ाइल की सोर्स फ़ाइल के पाथ को path पर सेट करता है.
-h टूल सहायता प्रदर्शित करता है.
-v वर्बोस लॉगिंग सक्षम करता है.

लिंक करने के चरण में, AAPT2, कंपाइलेशन में मौजूद सभी इंटरमीडिएट फ़ाइलों को मर्ज करता है चरण जनरेट करते हैं, जैसे कि रिसॉर्स टेबल, बाइनरी एक्सएमएल फ़ाइलें, और प्रोसेस की गई PNG और फिर फ़ाइलों को एक APK में पैकेज कर देता है. इसके अलावा, अन्य सहायक फ़ाइलें, जैसे कि R.java और ProGuard नियमों वाली फ़ाइलें जनरेट की जा सकती हैं पर ज़्यादा असर पड़ता है. हालांकि, जनरेट किए गए APK में DEX बाइटकोड नहीं होता और अहस्ताक्षरित है. आप इस APK को किसी डिवाइस पर डिप्लॉय नहीं कर सकते.

अगर इन कामों के लिए 'Android Gradle प्लग इन' का इस्तेमाल नहीं किया जा रहा है कमांड लाइन से अपना ऐप्लिकेशन बनाएं. कंपाइल करने के लिए, d8 जैसे अन्य कमांड-लाइन टूल का इस्तेमाल करें DEX बाइटकोड और apksigner में Java बाइट कोड का इस्तेमाल करें.

link के इस्तेमाल का सामान्य सिंटैक्स इस तरह है:

aapt2 link path-to-input-files [options] -o
outputdirectory/outputfilename.apk --manifest AndroidManifest.xml

इस उदाहरण में, AAPT2 दो इंटरमीडिएट फ़ाइलों को मर्ज करता है, drawable_Image.flat और values_values.arsc.flat और AndroidManifest.xml फ़ाइल. AAPT2, android.jar से नतीजे को लिंक करता है फ़ाइल में दी गई होती है, जिसमें android पैकेज में बताए गए संसाधन होते हैं:

 aapt2 link -o output.apk
 -I android_sdk/platforms/android_version/android.jar
    compiled/res/values_values.arsc.flat
    compiled/res/drawable_Image.flat --manifest /path/to/AndroidManifest.xml -v

link निर्देश के साथ, इन विकल्पों का इस्तेमाल किया जा सकता है:

तीसरी टेबल. लिंक करने के निर्देश के विकल्प

विकल्प ब्यौरा
-o path

लिंक किए गए संसाधन APK का आउटपुट पाथ बताता है.

यह एक ज़रूरी फ़्लैग है, क्योंकि आपको इसके लिए पाथ बताना होगा आउटपुट APK, जो लिंक किए गए संसाधनों को होल्ड कर सकता है.

--manifest file

Android मेनिफ़ेस्ट फ़ाइल बनाने का पाथ बताता है.

यह एक ज़रूरी फ़्लैग है, क्योंकि मेनिफ़ेस्ट फ़ाइल बंद होती है आपके ऐप्लिकेशन के बारे में ज़रूरी जानकारी, जैसे कि पैकेज का नाम और ऐप्लिकेशन आईडी.

-I

प्लैटफ़ॉर्म के android.jar या अन्य APK का पाथ देता है, जैसे framework-res.apk, जो इमारत बनाते समय काम आ सकता है सुविधाएँ.

यह फ़्लैग ज़रूरी है अगर आप एट्रिब्यूट का इस्तेमाल android नेमस्पेस को आपकी रिसॉर्स फ़ाइलों में शामिल किया गया है.
-A directory इस नीति से, APK में शामिल की जाने वाली एसेट डायरेक्ट्री के बारे में पता चलता है.

इस डायरेक्ट्री का इस्तेमाल, प्रोसेस न की गई ओरिजनल फ़ाइलों को सेव करने के लिए किया जा सकता है. यहां की यात्रा पर हूं ज़्यादा जानें, पढ़ें ओरिजनल फ़ाइलें ऐक्सेस करना.

-R file यह overlay सिमेंटिक्स का इस्तेमाल करके, link पर एक अलग .flat फ़ाइल पास करता है वह भी <add-resource> टैग का इस्तेमाल किए बिना.

जब किसी मौजूदा फ़ाइल को ओवरले करने वाली कोई संसाधन फ़ाइल उपलब्ध कराई जाती है, तो दिए गए अंतिम विरोधी संसाधन का उपयोग किया जाता है.

--package-id package-id आपके ऐप्लिकेशन के साथ इस्तेमाल करने के लिए, पैकेज आईडी के बारे में बताता है.

आपका तय किया गया पैकेज आईडी, 0x7f से ज़्यादा या उसके बराबर होना चाहिए जब तक कि इनके साथ इस्तेमाल न किया जाए --allow-reserved-package-id.

--allow-reserved-package-id

रिज़र्व किए गए पैकेज आईडी का इस्तेमाल करने की अनुमति है.

रिज़र्व किए गए पैकेज आईडी, आम तौर पर शेयर किए जाने वाले आईडी को असाइन किए जाते हैं लाइब्रेरी और 0x02 से 0x7e के बीच की रेंज में होना चाहिए. इस्तेमाल करके --allow-reserved-package-id, आपके पास ऐसे आईडी असाइन करने का विकल्प है रिज़र्व की गई पैकेज आईडी की रेंज में आता है.

इस विकल्प का इस्तेमाल सिर्फ़ ऐसे पैकेज के लिए किया जाना चाहिए जिनका min-sdk वर्शन 26 या उससे कम.

--java directory इस नीति से उस डायरेक्ट्री के बारे में पता चलता है जिसमें R.java को जनरेट करना है.
--proguard proguard_options ProGuard नियमों के लिए आउटपुट फ़ाइल जनरेट करता है.
--proguard-conditional-keep-rules मुख्य DEX के लिए, ProGuard नियमों के लिए आउटपुट फ़ाइल जनरेट करता है.
--no-auto-version इससे SDK टूल के स्टाइल और लेआउट के अपने-आप वर्शन होने की सुविधा बंद हो जाती है.
--no-version-vectors सदिश ड्रॉएबल के स्वचालित वर्शनिंग को अक्षम करता है. वेक्टर ड्रॉएबल के साथ अपना APK बनाते समय ही इस फ़्लैग का इस्तेमाल करें लाइब्रेरी.
--no-version-transitions संक्रमण संसाधनों का स्वचालित वर्शनिंग अक्षम करता है. इस फ़्लैग का इस्तेमाल सिर्फ़ तब करें, जब ट्रांज़िशन सपोर्ट लाइब्रेरी के साथ अपना APK बनाया जा रहा हो.
--no-resource-deduping इससे सभी संसाधनों में एक जैसी वैल्यू वाले संसाधनों से डुप्लीकेट कॉपी हटाने की सुविधा बंद हो जाती है साथ काम करने वाले कॉन्फ़िगरेशन.
--enable-sparse-encoding बाइनरी सर्च ट्री का इस्तेमाल करके, स्पार्स एंट्री को कोड में बदलने की सुविधा चालू करता है. यह APK के साइज़ को ऑप्टिमाइज़ करने के लिए काम का है. हालांकि, संसाधन की कीमत पर इसका इस्तेमाल किया जा सकता है वापस लाने की परफ़ॉर्मेंस.
-z 'सुझाई गई' के तौर पर मार्क की गई स्ट्रिंग को स्थानीय भाषा में लिखना ज़रूरी है.
-c config कॉन्फ़िगरेशन की कॉमा-सेपरेटेड लिस्ट देता है.

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

आपको भाषा कॉन्फ़िगरेशन को दो अक्षरों वाले ISO 639-1 के ज़रिए तय करना होगा भाषा कोड, इसके बाद दो अक्षरों वाला ISO 3166-1-alpha-2 क्षेत्रीय कोड के पहले लोअरकेस 'r' होना चाहिए. उदाहरण के लिए, en-rUS.

--preferred-density density यह अनुमति देकर, AAPT2 को सबसे करीब से मेल खाने वाली सघनता और स्ट्रिप को चुना जाता है सभी को बाहर कर दिया जाता है.

आपके ऐप्लिकेशन में इस्तेमाल करने के लिए, कई पिक्सल डेंसिटी क्वालिफ़ायर उपलब्ध हैं, जैसे, ldpi, hdpi, और xhdpi. पसंदीदा सघनता तय करने पर, AAPT2, संसाधन में सबसे ज़्यादा मेल खाने वाली सघनता को चुनता है और सेव करता है टेबल में सेव किया जाता है और अन्य सभी को हटा दिया जाता है.

--output-to-dir APK के कॉन्टेंट को -o की तय की गई डायरेक्ट्री में आउटपुट करता है.

अगर इस फ़्लैग का इस्तेमाल करते समय आपको कोई गड़बड़ी मिलती है, तो आप अपग्रेड करके उसे ठीक कर सकते हैं Android SDK बिल्ड टूल 28.0.0 या उससे ज़्यादा होना चाहिए.

--min-sdk-version min-sdk-version यह नीति, SDK टूल के डिफ़ॉल्ट वर्शन को इनके इस्तेमाल के लिए सेट करती है AndroidManifest.xml.
--target-sdk-version target-sdk-version इस्तेमाल करने के लिए, टारगेट SDK टूल का डिफ़ॉल्ट वर्शन सेट करता है AndroidManifest.xml.
--version-code version-code यह इंजेक्ट करने के लिए वर्शन कोड के बारे में बताता है अगर कोई मौजूद नहीं है, तो AndroidManifest.xml.
--version-name version-name इंजेक्ट करने के लिए वर्शन का नाम बताता है अगर कोई मौजूद नहीं है, तो AndroidManifest.xml.
--revision-code revision-code इंजेक्ट करने के लिए रिविज़न कोड तय करता है AndroidManifest.xml फ़ाइल.
--replace-version अगर --version-code, --version-name या --revision-code बताया गया है, ये मान किसी भी मान को बदल देते हैं पहले से मेनिफ़ेस्ट में मौजूद है. अगर मेनिफ़ेस्ट फ़ाइल में कोई बदलाव नहीं किया जाता है, तो डिफ़ॉल्ट रूप से कुछ नहीं बदलता पहले से इन एट्रिब्यूट को तय करता हो.
--compile-sdk-version-nacodeme compile-sdk-version-name यह इंजेक्ट करने के लिए वर्शन कोड के बारे में बताता है AndroidManifest.xml फ़ाइल.
--compile-sdk-version-name compile-sdk-version-name इंजेक्ट करने के लिए वर्शन का नाम बताता है AndroidManifest.xml फ़ाइल.
--proto-format प्रोटोबफ़ फ़ॉर्मैट में, कंपाइल किए गए संसाधन जनरेट करता है.

इनपुट के तौर पर दिखाया जा सकता है bundletool Android ऐप्लिकेशन बंडल जनरेट करने के लिए.

--non-final-ids नॉन-फ़ाइनल रिसॉर्स आईडी के साथ R.java जनरेट करता है. इससे संबंधित जानकारी ऐप्लिकेशन के कोड से मिले आईडी, kotlinc या javac के दौरान इनलाइन नहीं होते कंपाइलेशन.
--emit-ids path यह नीति, दिए गए पाथ पर अलग-अलग तरह के रिसॉर्स के नाम की सूची के साथ फ़ाइल बनाती है और आईडी मैपिंग को समझकर ऐसा किया जा सकता है. यह --stable-ids के साथ इस्तेमाल करने के लिए सही है.
--stable-ids outputfilename.ext --emit-ids के साथ जनरेट की गई फ़ाइल का इस्तेमाल करता है जिसमें संसाधन टाइप के नाम और उन्हें असाइन किए गए आईडी की सूची.

इस विकल्प की मदद से, असाइन किए गए आईडी नहीं मिटते हैं या लिंक करते समय नए संसाधन जोड़ें.

--custom-package package_name इसके तहत R.java को जनरेट करने के लिए, पसंद के मुताबिक Java पैकेज तय करता है.
--extra-packages package_name उसी R.java फ़ाइल को जनरेट करता है, लेकिन उसका पैकेज अलग होता है नाम.
--add-javadoc-annotation annotation जनरेट की गई सभी Java क्लास में JavaDoc व्याख्या जोड़ता है.
--output-text-symbols path ऐसी टेक्स्ट फ़ाइल जनरेट करता है जिसमें R क्लास के संसाधन सिंबल शामिल होते हैं .

आपको आउटपुट फ़ाइल का पाथ बताना होगा.

--auto-add-overlay यह नीति इसका इस्तेमाल किए बिना, ओवरले में नए संसाधन जोड़ने की अनुमति देती है <add-resource> टैग.
--rename-manifest-package manifest-package AndroidManifest.xml फ़ाइल में पैकेज का नाम बदल देता है.
--rename-instrumentation-target-package instrumentation- target-package इसके लिए टारगेट पैकेज का नाम बदलता है instrumentation.

इस विकल्प का उपयोग इसके साथ किया जाना चाहिए --rename-manifest-package.

-0 extension

उन फ़ाइलों के एक्सटेंशन तय करता है जिन्हें कंप्रेस नहीं करना है.

--split path:config[,config[..]] कॉन्फ़िगरेशन के सेट के हिसाब से संसाधनों को बांटता है, ताकि अलग-अलग कॉन्फ़िगरेशन जनरेट किए जा सकें APK का कोई वर्शन है.

आपको कॉन्फ़िगरेशन.

--proguard-main-dex file मुख्य DEX के लिए जनरेट किए गए ProGuard नियमों के लिए आउटपुट फ़ाइल.
--proguard-minimal-keep-rules ProGuard कीप नियमों का कम से कम सेट जनरेट करता है.
--no-resource-removal बिना डिफ़ॉल्ट के, संसाधनों को अपने-आप हटाने की सुविधा बंद करता है. इस विकल्प का इस्तेमाल करें सिर्फ़ रनटाइम रिसॉर्स ओवरले पैकेज बनाते समय ही ऐसा किया जा सकता है.
-x लेगसी फ़्लैग, जो पैकेज आइडेंटिफ़ायर 0x01 के इस्तेमाल के बारे में बताता है.
--product products-list बनाए रखने के लिए प्रॉडक्ट के नामों की एक ऐसी सूची बताता है जिसे कॉमा लगाकर अलग किया गया हो.
--no-xml-namespaces इससे एक्सएमएल नेमस्पेस प्रीफ़िक्स और यूआरआई की जानकारी हट जाती है AndroidManifest.xml फ़ाइल और एक्सएमएल बाइनरी इसमें हैं res/*.
--shared-lib इससे, शेयर की गई Android रनटाइम लाइब्रेरी जनरेट होती है.
--static-lib स्टैटिक Android लाइब्रेरी जनरेट करता है.
--no-static-lib-packages ऐप्लिकेशन के पैकेज में मौजूद सभी लाइब्रेरी के संसाधनों को मर्ज करता है.
--no-proguard-location-reference ProGuard नियमों की फ़ाइलों को सोर्स फ़ाइल का रेफ़रंस देने से रोकता है.
--private-symbols package-name जनरेट करते समय, package-name से पैकेज के नाम के बारे में पता चलता है निजी सिंबल के लिए R.java. अगर इसके बारे में नहीं बताया गया है, तो सार्वजनिक और निजी चिह्नों में ऐप्लिकेशन के पैकेज का नाम इस्तेमाल किया जाता है.
--override-styles-instead-of-overlaying पिछली परिभाषाओं को बदलने के लिए, -R रिसॉर्स में तय किए गए स्टाइल की वजह बनता है उन्हें मर्ज करने के लिए डिज़ाइन किया गया है.
--rename-resources-package package-name संसाधन टेबल में मौजूद पैकेज का नाम बदलकर package-name कर देता है.
--no-compress किसी भी संसाधन को कंप्रेस नहीं करता.
--keep-raw-values एक्सएमएल फ़ाइलों में रॉ एट्रिब्यूट की वैल्यू सुरक्षित रखता है.
--no-compress-regex regular-expression regular-expression से मेल खाने वाले एक्सटेंशन कंप्रेस नहीं किए जाते. लाइन के आखिर में जाने के लिए, $ के निशान का इस्तेमाल करें. का इस्तेमाल करता है केस-सेंसिटिव ECMAScript रेगुलर एक्सप्रेशन ग्रामर.
--warn-manifest-validation मेनिफ़ेस्ट की पुष्टि करने से जुड़ी गड़बड़ियों को चेतावनियां मानता है.
--exclude-configs qualifier[,qualifier[..]] इसमें, उन संसाधनों की वैल्यू शामिल नहीं होती हैं जिनके कॉन्फ़िगरेशन में क्वालीफ़ायर.
--debug-mode ऐप्लिकेशन नोड में android:debuggable="true" को शामिल करता है मेनिफ़ेस्ट में पूरी जानकारी दी गई है. इससे ऐप्लिकेशन, प्रोडक्शन में भी डीबग किया जा सकता है डिवाइस.
--strict-visibility अलग-अलग विज़िबिलिटी लेवल वाले ओवरले को अनुमति नहीं देता.
--exclude-sources इसमें संसाधन जनरेट करते समय, सोर्स फ़ाइल की जानकारी को क्रम से नहीं लगाया जाता प्रोटोबफ़ फ़ॉर्मैट में.
--trace-folder folder बताए गए folder में systrace JSON ट्रेस फ़्रैगमेंट जनरेट करता है.
--merge-only रिसॉर्स रेफ़रंस की पुष्टि किए बिना, सिर्फ़ संसाधनों को मर्ज किया जाता है. यह फ़्लैग का इस्तेमाल सिर्फ़ --static-lib के साथ किया जाना चाहिए फ़्लैग करें.
-h सहायता मेन्यू दिखाता है.
-v आउटपुट को ज़्यादा शब्दों में जानकारी देने की सुविधा चालू करता है.

डंप करें

dump का इस्तेमाल उन APK के बारे में जानकारी प्रिंट करने के लिए किया जाता है जिन्हें आपने link निर्देश.

डंप सिंटैक्स

dump के इस्तेमाल का सामान्य सिंटैक्स इस तरह है:

aapt2 dump sub-command filename.apk [options]

नीचे दिए गए उदाहरण में, बताए गए तरीके की संसाधन टेबल से कॉन्टेंट को प्रिंट किया गया है APK:

aapt2 dump resources output.apk

सब-कमांड डंप करें

dump निर्देश का इस्तेमाल करके, इनमें से किसी एक सब-कमांड के बारे में बताएं:

टेबल 4. सब-कमांड डंप करें

सब-कमांडब्यौरा
apc इस दौरान जनरेट किए गए AAPT2 कंटेनर (APC) का कॉन्टेंट प्रिंट करता है कंपाइलेशन.
badging APK के मेनिफ़ेस्ट से ली गई जानकारी को प्रिंट करता है.
configurations APK में किसी संसाधन के इस्तेमाल किए गए हर कॉन्फ़िगरेशन को प्रिंट करता है.
overlayable APK के ओवरले किए जा सकने वाले संसाधन प्रिंट करता है.
packagename APK का पैकेज नाम प्रिंट करता है.
permissions APK के मेनिफ़ेस्ट से मिली अनुमतियां प्रिंट करती हैं.
strings APK के संसाधन टेबल स्ट्रिंग पूल की सामग्री प्रिंट करता है.
styleparents APK में इस्तेमाल की गई स्टाइल के पैरंट प्रिंट करता है.
resources APK की संसाधन टेबल का कॉन्टेंट प्रिंट करता है.
xmlstrings APK के कंपाइल किए गए एक्सएमएल से स्ट्रिंग प्रिंट करता है.
xmltree APK के कंपाइल किए गए एक्सएमएल का एक ट्री प्रिंट करता है.

डंप के विकल्प

dump के साथ, इन विकल्पों का इस्तेमाल करें:

पांचवीं टेबल. डंप के विकल्प

विकल्पब्यौरा
--no-values संसाधन दिखाते समय वैल्यू के आउटपुट को बंद कर देता है.
--file file किसी फ़ाइल को ऐसे तर्क के तौर पर बताता है जिसे APK से हटाना है.
-v आउटपुट में ज़्यादा शब्दों में जानकारी दी जाती है.

फ़र्क़

दो APK की तुलना करने और उनके बीच के अंतर को पहचानने के लिए diff का इस्तेमाल करें.

डिफ़ सिंटैक्स

diff के इस्तेमाल का सामान्य सिंटैक्स इस तरह है:

aapt2 diff first.apk second.apk

diff कमांड के लिए कोई विकल्प नहीं है.

ऑप्टिमाइज़ करें

optimize का इस्तेमाल, मर्ज किए गए संसाधनों पर ऑप्टिमाइज़ेशन चलाने के लिए किया जाता है और APK में पैक किए जाने से पहले resources.arsc. यह ऑप्टिमाइज़ेशन APK के साइज़ को करीब 1 से 3% कम कर सकता है. यह आपके साइज़ और जिन्हें इस्तेमाल किया जा रहा है.

सिंटैक्स ऑप्टिमाइज़ करें

optimize के इस्तेमाल का सामान्य सिंटैक्स इस तरह है:

aapt2 optimize options file[,file[..]]

नीचे दिए गए उदाहरण में, input.apk में मौजूद संसाधनों को ऑप्टिमाइज़ किया गया है. साथ ही, एक नया, output.apk में ऑप्टिमाइज़ किया गया APK. यह सामान्य फ़्लैट टेबल रिप्रज़ेंटेशन को बदल देता है और कॉम्पैक्ट बाइनरी सर्च ट्री के साथ होता है, जिसकी वजह से डेटा वापस पाने की लागत:

aapt2 optimize -o output.apk --enable-sparse-encoding input.apk

ऑप्टिमाइज़ करने के विकल्प

optimize के साथ इन विकल्पों का इस्तेमाल किया जा सकता है:

टेबल 6. ऑप्टिमाइज़ करने के विकल्प

विकल्पब्यौरा
-o path लिंक किए गए संसाधन APK का आउटपुट पाथ बताता है.

यह एक ज़रूरी फ़्लैग है, क्योंकि आपको इसके लिए पाथ बताना होगा आउटपुट APK, जो लिंक किए गए संसाधनों को होल्ड कर सकता है.

-d directory स्प्लिट के लिए आउटपुट डायरेक्ट्री का पाथ बताता है.
-x path यह एक्सएमएल कॉन्फ़िगरेशन फ़ाइल का पाथ बताता है.
-p यह एक से ज़्यादा APK वाले आर्टफ़ैक्ट को प्रिंट करके, उससे बाहर निकल जाता है.
--target-densities density[,density[..]] इस नीति से, स्क्रीन डेंसिटी की कॉमा लगाकर अलग की गई ऐसी सूची के बारे में पता चलता है जिसे APK ऑप्टिमाइज़ किया गया है. वे सभी संसाधन जिनका इस्तेमाल इन डिवाइसों पर नहीं किया जाएगा APK से डेंसिटी को हटा दिया जाता है.
--resources-config-path path

उस resources.cfg फ़ाइल का पाथ बताता है जिसमें सभी संसाधन और डायरेक्टिव.

फ़ॉर्मैट: type/resource_name#[directive][,directive]

-c config[,config[..]] शामिल किए जाने वाले कॉन्फ़िगरेशन की कॉमा-सेपरेटेड लिस्ट दिखाता है. 'सभी' डिफ़ॉल्ट है कॉन्फ़िगरेशन.
--split path:config[,config[..]] कॉन्फ़िगरेशन के सेट के हिसाब से संसाधनों को बांटता है, ताकि अलग-अलग कॉन्फ़िगरेशन जनरेट किए जा सकें APK का कोई वर्शन है.

आपको कॉन्फ़िगरेशन.

--keep-artifacts artifact[,artifact[..]] रखे जाने वाले आर्टफ़ैक्ट की ऐसी सूची बताता है जिसे कॉमा लगाकर अलग किया गया हो. अगर कुछ तय नहीं किया गया है, सभी आर्टफ़ैक्ट को रखा जाता है.
--enable-sparse-encoding बाइनरी सर्च ट्री का इस्तेमाल करके, स्पार्स एंट्री को कोड में बदलने की सुविधा चालू करता है. यह विकल्प APK के साइज़ को ऑप्टिमाइज़ करने के लिए काम का है, लेकिन इसमें रिसॉर्स वापस पाने की परफ़ॉर्मेंस.
--collapse-resource-names कुंजी स्ट्रिंग पूल में, संसाधन के नाम को एक वैल्यू तक छोटा करता है. no_collapse डायरेक्टिव का इस्तेमाल करके, रिसॉर्स को इसमें छूट दी गई है --resources-config-path द्वारा तय की गई फ़ाइल.
--shorten-resource-paths APK में मौजूद संसाधनों के पाथ को छोटा कर देता है.
--resource-path-shortening-map path पुराने संसाधन पाथ के मैप को छोटे पाथ में बदलने का पाथ बताता है.
-v आउटपुट में ज़्यादा शब्दों में जानकारी दी जाती है.
-h टूल का सहायता पेज दिखाता है.

बदलें

डिफ़ॉल्ट रूप से, AAPT compile निर्देश, संसाधनों को बाइनरी फ़ॉर्मैट में इकट्ठा करता है जो APK के लिए सही है. प्रोटोबफ़ फ़ॉर्मैट की जानकारी भी दी जा सकती है जो एएबी के लिए सही है. इसके लिए, --proto-format तय करें. convert निर्देश, APK को दो फ़ॉर्मैट में बदल देता है.

सिंटैक्स बदलें

convert का सामान्य सिंटैक्स इस तरह है:

aapt2 convert -o output-file options file[,file[..]]

नीचे दिए गए उदाहरण में, input.apk में मौजूद संसाधनों को बदला गया है और एक नया, output.apk में ऐसा APK जिसमें प्रोटोबफ़ फ़ॉर्मैट संसाधन शामिल हैं. यह फ़्लैट टेबल को ज़्यादा कॉम्पैक्ट बाइनरी सर्च ट्री के साथ दिखाया जाता है. इसका नतीजा को फिर से पाने की परफ़ॉर्मेंस की लागत पर छोटे APK में डाउनलोड करने में मदद मिलेगी:

aapt2 convert -o output.apk --output-format proto --enable-sparse-encoding input.apk

विकल्पों को बदलें

convert के साथ, इन विकल्पों का इस्तेमाल करें:

टेबल 7. विकल्प बदलें

विकल्पब्यौरा
-o path

लिंक किए गए संसाधन APK का आउटपुट पाथ बताता है.

यह एक ज़रूरी फ़्लैग है, क्योंकि आपको इसके लिए पाथ बताना होगा आउटपुट APK, जो लिंक किए गए संसाधनों को होल्ड कर सकता है.

--output-format [proto|binary] आउटपुट का फ़ॉर्मैट. proto और इनके लिए स्वीकार किया जाता है binary. अगर इस नीति को सेट नहीं किया जाता है, तो डिफ़ॉल्ट रूप से binary सेट हो जाती है.
--enable-sparse-encoding बाइनरी सर्च ट्री का इस्तेमाल करके, स्पार्स एंट्री को कोड में बदलने की सुविधा चालू करता है. यह विकल्प APK के साइज़ को ऑप्टिमाइज़ करने के लिए काम का है, लेकिन इसमें रिसॉर्स वापस पाने की परफ़ॉर्मेंस.
--keep-raw-values एक्सएमएल फ़ाइलों में रॉ एट्रिब्यूट की वैल्यू सुरक्षित रखता है.
-v आउटपुट में ज़्यादा शब्दों में जानकारी दी जाती है.
-h टूल का सहायता पेज दिखाता है.

डीमन मोड

AAPT के वर्शन 2.19 में, निर्देश जारी करने के लिए डीमन मोड उपलब्ध है. डीमन मोड से आपने AAPT फ़ाइल के किसी सेशन में कई निर्देश डाले हैं.

डीमन सिंटैक्स

डीमन मोड को इस निर्देश से चालू करें:

aapt2 daemon

डीमन मोड चालू होने के बाद, निर्देश डाले जा सकते हैं. हर तर्क, कमांड एक अलग लाइन पर होनी चाहिए और कमांड के आखिर में खाली लाइन होनी चाहिए. Control+D टाइप करके डीमन मोड से बाहर निकलें.

इन अलग-अलग compile निर्देशों का पालन करें:

aapt2 compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/
aapt2 compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/

ये निर्देश, डीमन मोड में इस तरह डाले जा सकते हैं:

aapt2 daemon
Ready
compile
project_root/module_root/src/main/res/values-en/strings.xml
-o
compiled/

Done
compile
project_root/module_root/src/main/res/drawable/myImage.png
-o
compiled/

Done
^D
Exiting daemon

डीमन मोड के विकल्प

डीमन मोड का सिर्फ़ एक विकल्प है --trace-folder folder, जिससे एक systrace JSON जनरेट होता है ट्रेस फ़्रैगमेंट, बताए गए folder पर ले जाएगा.

वर्शन

version निर्देश की मदद से, पता लगाएं कि आप AAPT2 के किस वर्शन का इस्तेमाल कर रहे हैं:

aapt2 version
Android Asset Packaging Tool (aapt) 2.19-8678579

AAPT2 का इस्तेमाल करने पर, व्यवहार में बदलाव होता है

AAPT2 से पहले, AAPT, Android ऐसेट पैकेजिंग टूल का डिफ़ॉल्ट वर्शन था. यह अब सेवा में नहीं है. हालांकि, AAPT2 को तुरंत पुराने प्रोजेक्ट में है, तो इस सेक्शन में बताया गया है कि आपको व्यवहार में किस तरह के पता है.

Android मेनिफ़ेस्ट में एलिमेंट की हैरारकी

AAPT के पिछले वर्शन में, AndroidManifest.xml फ़ाइल को अनदेखा किया गया या उसकी वजह से एक चेतावनी मिली है. नीचे दिए गए उदाहरण पर गौर करें:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myname.myapplication">
   <application
       ...
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
           <action android:name="android.intent.action.CUSTOM" />
       </activity>
   </application>
</manifest>

AAPT के पिछले वर्शन में, खो गए <action> टैग को अनदेखा कर दिया जाएगा.

AAPT2 का इस्तेमाल करने पर, आपको यह गड़बड़ी मिलती है:

AndroidManifest.xml:15: error: unknown element <action> found.

समस्या को ठीक करने के लिए, देख लें कि आपके मेनिफ़ेस्ट एलिमेंट सही तरीके से नेस्ट किए गए हों. ज़्यादा जानकारी के लिए, ऐप्लिकेशन मेनिफ़ेस्ट की खास जानकारी.

संसाधनों का एलान

name एट्रिब्यूट की मदद से, यह नहीं बताया जा सकता कि संसाधन किस तरह का है. इस उदाहरण में, attr रिसॉर्स आइटम के बारे में गलत जानकारी दी गई है:

<style name="childStyle" parent="parentStyle">
    <item name="attr/my_attr">@color/pink</item>
</style>

इस तरह से संसाधन टाइप तय करने पर, बिल्ड से जुड़ी यह गड़बड़ी दिखती है:

Error: style attribute 'attr/attr/my_attr (aka my.package:attr/attr/my_attr)'
not found.

इस गड़बड़ी को ठीक करने के लिए, type="attr" का इस्तेमाल करके साफ़ तौर पर टाइप बताएं:

<style name="childStyle" parent="parentStyle">
  <item type="attr" name="my_attr">@color/pink</item>
</style>

इसके अलावा, <style> एलिमेंट का एलान करते समय, उसका पैरंट भी होना चाहिए स्टाइल रिसॉर्स टाइप को चुनना होगा. ऐसा न करने पर, आपको इस तरह की गड़बड़ी दिखेगी:

Error: (...) invalid resource type 'attr' for parent of style

@ संसाधन के रेफ़रंस सिंबल का गलत इस्तेमाल करना

जब संसाधन को हटा दिया जाता है या गलत तरीके से जगह दी जाती है, तो AAPT2 बिल्ड में गड़बड़ियां दिखाता है संदर्भ प्रतीक (@). उदाहरण के लिए, यदि आप प्रतीक चिह्नों को शैली विशेषता दर्ज करना:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  ...
  <!-- Note the missing '@' symbol when specifying the resource type. -->
  <item name="colorPrimary">color/colorPrimary</item>
</style>

मॉड्यूल बनाते समय, AAPT2 में बिल्ड से जुड़ी यह गड़बड़ी होती है:

ERROR: expected color but got (raw string) color/colorPrimary

इसके अतिरिक्त, यदि आप किसी android नेमस्पेस से मिला संसाधन:

...
<!-- When referencing resources from the 'android' namespace, omit the '@' symbol. -->
<item name="@android:windowEnterAnimation"/>

मॉड्यूल बनाते समय, AAPT2 में बिल्ड से जुड़ी यह गड़बड़ी होती है:

Error: style attribute '@android:attr/windowEnterAnimation' not found

लाइब्रेरी का गलत कॉन्फ़िगरेशन

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

AAPT2, लाइब्रेरी का इस्तेमाल करते समय इसके लिए आईडी फिर से असाइन करता है आपका ऐप्लिकेशन. अगर लाइब्रेरी को लगता है कि आईडी final हैं और उन्हें इसमें इनलाइन किया गया है लाइब्रेरी DEX में, रनटाइम के दौरान कोई गड़बड़ी हुई है.

इस गड़बड़ी को ठीक करने के लिए, लाइब्रेरी को फिर से बनाने के लिए, उसके लेखक से संपर्क करें करने के लिए, Android SDK बिल्ड टूल के सबसे नए वर्शन का इस्तेमाल करके, लाइब्रेरी.