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 को डाउनलोड करने के लिए, यहां दिया गया तरीका अपनाएं:
- डेटा स्टोर करने की जगह के इंडेक्स में, नेविगेट करें com.android.tools.build > पर aapt2.
- AAPT2 के नए वर्शन का नाम कॉपी करें.
आपने जिस वर्शन का नाम कॉपी किया है उसे नीचे दिए गए यूआरएल में डालें और अपना टारगेट ऑपरेटिंग सिस्टम: 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
ब्राउज़र में यूआरएल पर जाएं. AAPT2 जल्द ही डाउनलोड होना शुरू हो जाएगा.
अभी डाउनलोड की गई JAR फ़ाइल को अनपैकेज करें.
JAR फ़ाइल में, एक्ज़ीक्यूटेबल
aapt2
फ़ाइल होनी चाहिए. साथ ही, कुछ ऐसी लाइब्रेरी होनी चाहिए जिन्हें यह कई बातों पर निर्भर करता है.
कंपाइल करें
AAPT2 सभी फ़ॉर्मैट को कंपाइल करता है
Android संसाधन टाइप, जैसे
ड्रॉबल और एक्सएमएल फ़ाइलों में. कंपाइलेशन के लिए AAPT2 को शुरू करने पर,
हर प्रॉम्प्ट के लिए इनपुट के तौर पर एक संसाधन फ़ाइल का इस्तेमाल किया जा सकता है. इसके बाद, AAPT2 फ़ाइल को पार्स करता है
और .flat
एक्सटेंशन वाली एक इंटरमीडिएट बाइनरी फ़ाइल जनरेट करता है.
पूरी डायरेक्ट्री पास करने पर, AAPT2 डायरेक्ट्री में मौजूद सभी फ़ाइलों को फिर से इकट्ठा करता है
जब सिर्फ़ एक संसाधन में बदलाव हुआ हो. हालांकि, आपके पास रिसॉर्स पास करने का विकल्प है
--dir
का इस्तेमाल करके, AAPT2 के लिए एक से ज़्यादा संसाधन फ़ाइल वाली डायरेक्ट्री
फ़्लैग करने पर, आपको इस तरीके से इंक्रीमेंटल रिसॉर्स कंपाइलेशन का फ़ायदा नहीं मिलता.
आउटपुट फ़ाइल के टाइप अलग-अलग हो सकते हैं. ये इस बात पर निर्भर करते हैं कि आपने कंपाइलेशन के लिए कौनसा इनपुट दिया है, जैसा कि नीचे दी गई टेबल में दिखाया गया है:
टेक्स्ट लिखो | आउटपुट |
---|---|
एक्सएमएल रिसॉर्स फ़ाइलें, जैसे
स्ट्रिंग और
स्टाइल,
res/values/ डायरेक्ट्री में मौजूद है
|
संसाधन टेबल, जिसके एक्सटेंशन के तौर पर *.arsc.flat है.
|
अन्य सभी संसाधन फ़ाइलें. |
इसके अलावा, सभी PNG फ़ाइलें डिफ़ॉल्ट रूप से क्रंच की जाती हैं और |
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
|
ऐसी टेक्स्ट फ़ाइल जनरेट करता है जिसमें बताए गए संसाधन सिंबल शामिल होते हैं
|
-preserve-visibility-of-styleables
|
अगर बताया गया हो, तो स्टाइल किए जा सकने वाले विज्ञापनों के लिए, 'किसको दिखे' सेटिंग से जुड़े वही नियम लागू होते हैं का इस्तेमाल दूसरे सभी संसाधनों के लिए किया जाता है. अगर ऐसा नहीं होता है, तो सभी स्टाइल सार्वजनिक कर दिए जाएंगे. |
-visibility [public|private|default|]
|
इकट्ठा किए गए रिसॉर्स को बताए गए लेवल पर सेट करता है. |
-trace-folder folder
|
दिए गए systrace JSON ट्रेस फ़्रैगमेंट जनरेट करता है.
|
-source-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 नेमस्पेस को आपकी रिसॉर्स फ़ाइलों में शामिल किया गया है.
|
-A directory
|
इस नीति से, APK में शामिल की जाने वाली एसेट डायरेक्ट्री के बारे में पता चलता है.
इस डायरेक्ट्री का इस्तेमाल, प्रोसेस न की गई ओरिजनल फ़ाइलों को सेव करने के लिए किया जा सकता है. यहां की यात्रा पर हूं ज़्यादा जानें, पढ़ें ओरिजनल फ़ाइलें ऐक्सेस करना. |
-R file
|
यह overlay सिमेंटिक्स का इस्तेमाल करके, link पर एक अलग .flat फ़ाइल पास करता है
वह भी <add-resource> टैग का इस्तेमाल किए बिना.
जब किसी मौजूदा फ़ाइल को ओवरले करने वाली कोई संसाधन फ़ाइल उपलब्ध कराई जाती है, तो दिए गए अंतिम विरोधी संसाधन का उपयोग किया जाता है. |
--package-id package-id
|
आपके ऐप्लिकेशन के साथ इस्तेमाल करने के लिए, पैकेज आईडी के बारे में बताता है.
आपका तय किया गया पैकेज आईडी, 0x7f से ज़्यादा या उसके बराबर होना चाहिए
जब तक कि इनके साथ इस्तेमाल न किया जाए
|
--allow-reserved-package-id
|
रिज़र्व किए गए पैकेज आईडी का इस्तेमाल करने की अनुमति है. रिज़र्व किए गए पैकेज आईडी, आम तौर पर शेयर किए जाने वाले आईडी को असाइन किए जाते हैं
लाइब्रेरी और 0x02 से 0x7e के बीच की रेंज में होना चाहिए. इस्तेमाल करके
इस विकल्प का इस्तेमाल सिर्फ़ ऐसे पैकेज के लिए किया जाना चाहिए जिनका |
--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
|
प्रोटोबफ़ फ़ॉर्मैट में, कंपाइल किए गए संसाधन जनरेट करता है.
इनपुट के तौर पर दिखाया जा सकता है
|
--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 .
इस विकल्प का उपयोग इसके साथ किया जाना चाहिए
|
-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
निर्देश का इस्तेमाल करके, इनमें से किसी एक सब-कमांड के बारे में बताएं:
सब-कमांड | ब्यौरा |
---|---|
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
के साथ इन विकल्पों का इस्तेमाल किया जा सकता है:
विकल्प | ब्यौरा |
---|---|
-o path
|
लिंक किए गए संसाधन APK का आउटपुट पाथ बताता है.
यह एक ज़रूरी फ़्लैग है, क्योंकि आपको इसके लिए पाथ बताना होगा आउटपुट APK, जो लिंक किए गए संसाधनों को होल्ड कर सकता है. |
-d directory
|
स्प्लिट के लिए आउटपुट डायरेक्ट्री का पाथ बताता है. |
-x path
|
यह एक्सएमएल कॉन्फ़िगरेशन फ़ाइल का पाथ बताता है. |
-p
|
यह एक से ज़्यादा APK वाले आर्टफ़ैक्ट को प्रिंट करके, उससे बाहर निकल जाता है. |
--target-densities density[,density[..]]
|
इस नीति से, स्क्रीन डेंसिटी की कॉमा लगाकर अलग की गई ऐसी सूची के बारे में पता चलता है जिसे APK ऑप्टिमाइज़ किया गया है. वे सभी संसाधन जिनका इस्तेमाल इन डिवाइसों पर नहीं किया जाएगा APK से डेंसिटी को हटा दिया जाता है. |
--resources-config-path path
|
उस फ़ॉर्मैट: 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
के साथ, इन विकल्पों का इस्तेमाल करें:
विकल्प | ब्यौरा |
---|---|
-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 बिल्ड टूल के सबसे नए वर्शन का इस्तेमाल करके, लाइब्रेरी.