AAPT2 (Android Asset Packaging Tool) হল একটি বিল্ড টুল যা Android Studio এবং Android Gradle Plugin আপনার অ্যাপের রিসোর্স কম্পাইল ও প্যাকেজ করতে ব্যবহার করে। AAPT2 পার্স করে, ইনডেক্স করে এবং রিসোর্সগুলিকে একটি বাইনারি ফর্ম্যাটে কম্পাইল করে যা অ্যান্ড্রয়েড প্ল্যাটফর্মের জন্য অপ্টিমাইজ করা হয়।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 3.0.0 এবং উচ্চতর ডিফল্টরূপে AAPT2 সক্ষম করে। আপনাকে সাধারণত নিজেকে aapt2
ডাকতে হবে না। যাইহোক, আপনি যদি অ্যান্ড্রয়েড স্টুডিওর পরিবর্তে আপনার টার্মিনাল এবং আপনার নিজস্ব বিল্ড সিস্টেম ব্যবহার করতে পছন্দ করেন তবে আপনি কমান্ড লাইন থেকে AAPT2 ব্যবহার করতে পারেন। আপনি কমান্ড লাইন থেকে AAPT2 সম্পর্কিত বিল্ড ত্রুটিগুলি ডিবাগ করতে পারেন। এটি করতে, Android SDK Build Tools 26.0.2 এবং পরবর্তীতে একটি স্বতন্ত্র টুল হিসাবে AAPT2 খুঁজুন।
কমান্ড লাইন থেকে অ্যান্ড্রয়েড SDK বিল্ড টুল ডাউনলোড করতে, sdkmanager
ব্যবহার করুন এবং নিম্নলিখিত কমান্ডটি চালান:
sdkmanager "build-tools;build-tools-version"
একবার আপনি SDK বিল্ড টুল ডাউনলোড করে নিলে, android_sdk /build-tools/ version /
এ AAPT2 খুঁজুন।
যেহেতু অ্যান্ড্রয়েড SDK বিল্ড টুলগুলির সংশোধন প্রায়শই প্রকাশিত হয় না, তাই আপনার SDK বিল্ড সরঞ্জামগুলিতে অন্তর্ভুক্ত AAPT2 এর সংস্করণ সর্বশেষ নাও হতে পারে৷ AAPT2 এর সর্বশেষ সংস্করণ পেতে, Google Maven থেকে AAPT2 ডাউনলোড করুন ।
Linux বা Mac এ কমান্ড লাইন থেকে AAPT2 ব্যবহার করতে, aapt2
কমান্ডটি চালান। উইন্ডোজে, aapt2.exe
কমান্ডটি চালান।
AAPT2 ক্রমবর্ধমান সংকলন সক্ষম করে সংস্থানগুলির দ্রুত সংকলন সমর্থন করে। ক্রমবর্ধমান সংকলন সম্পন্ন করতে, সম্পদ প্রক্রিয়াকরণ দুটি ধাপে বিভক্ত:
- কম্পাইল : রিসোর্স ফাইলগুলিকে বাইনারি ফরম্যাটে কম্পাইল করে।
- লিঙ্ক : সমস্ত কম্পাইল করা ফাইল একত্রিত করে এবং একটি একক প্যাকেজে প্যাকেজ করে।
এই বিচ্ছেদ ক্রমবর্ধমান বিল্ডের জন্য কর্মক্ষমতা উন্নত করতে সাহায্য করে। উদাহরণস্বরূপ, যদি একটি একক ফাইলে পরিবর্তন থাকে তবে আপনাকে শুধুমাত্র সেই ফাইলটি পুনরায় কম্পাইল করতে হবে।
Google Maven থেকে AAPT2 ডাউনলোড করুন
AAPT2 এর নতুন সংস্করণ পেতে যা বিল্ড টুলগুলিতে বান্ডিল করা হয়নি, Google এর Maven সংগ্রহস্থল থেকে AAPT2 ডাউনলোড করুন নিম্নরূপ:
- রিপোজিটরি ইনডেক্সে , com.android.tools.build > aapt2 এ নেভিগেট করুন।
- AAPT2 এর সর্বশেষ সংস্করণের নাম কপি করুন।
নিম্নলিখিত URL-এ আপনি যে সংস্করণের নামটি অনুলিপি করেছেন তা সন্নিবেশ করুন এবং আপনার লক্ষ্য অপারেটিং সিস্টেম নির্দিষ্ট করুন: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version /aapt2- aapt2-version - [windows | linux | osx] .jar
উদাহরণস্বরূপ, উইন্ডোজের জন্য সংস্করণ 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
একটি ব্রাউজারে URL-এ নেভিগেট করুন। AAPT2 শীঘ্রই ডাউনলোড শুরু হবে।
আপনি এইমাত্র ডাউনলোড করা JAR ফাইলটি আনপ্যাকেজ করুন।
JAR ফাইলটিতে একটি
aapt2
এক্সিকিউটেবল এবং কিছু লাইব্রেরি থাকা উচিত যার উপর এক্সিকিউটেবল নির্ভর করে।
কম্পাইল
AAPT2 সমস্ত Android রিসোর্স প্রকারের সংকলন সমর্থন করে, যেমন অঙ্কনযোগ্য এবং XML ফাইল। আপনি যখন সংকলনের জন্য AAPT2 আহ্বান করেন, প্রতি আহ্বানে একটি ইনপুট হিসাবে একটি একক সংস্থান ফাইল পাস করুন। AAPT2 তারপর ফাইলটিকে পার্স করে এবং একটি .flat
এক্সটেনশন সহ একটি মধ্যবর্তী বাইনারি ফাইল তৈরি করে।
সম্পূর্ণ ডিরেক্টরি পাস করার সময়, AAPT2 শুধুমাত্র একটি রিসোর্স পরিবর্তিত হলেও ডিরেক্টরির সমস্ত ফাইল পুনরায় কম্পাইল করে। যদিও আপনি --dir
ফ্ল্যাগ ব্যবহার করে AAPT2 তে একাধিক রিসোর্স ফাইল ধারণকারী রিসোর্স ডিরেক্টরি পাস করতে পারেন, আপনি এইভাবে ক্রমবর্ধমান সম্পদ সংকলনের সুবিধা পাবেন না।
আউটপুট ফাইলের ধরনগুলি সংকলনের জন্য আপনার দেওয়া ইনপুটের উপর ভিত্তি করে আলাদা হতে পারে, যেমনটি নিম্নলিখিত টেবিলে দেখানো হয়েছে:
ইনপুট | আউটপুট |
---|---|
XML রিসোর্স ফাইল, যেমন স্ট্রিং এবং স্টাইল , res/values/ ডিরেক্টরিতে অবস্থিত | এর এক্সটেনশন হিসাবে *.arsc.flat সহ রিসোর্স টেবিল। |
অন্য সব রিসোর্স ফাইল। | অতিরিক্তভাবে সমস্ত PNG ফাইল ডিফল্টরূপে ক্রাঞ্চ করা হয় এবং |
ফাইল AAPT2 আউটপুট এক্সিকিউটেবল নয়, এবং একটি APK তৈরি করার জন্য আপনাকে অবশ্যই এই বাইনারি ফাইলগুলিকে লিঙ্ক পর্বে ইনপুট হিসাবে অন্তর্ভুক্ত করতে হবে। যাইহোক, জেনারেট করা APK ফাইলটি এক্সিকিউটেবল নয় যা আপনি এখনই একটি অ্যান্ড্রয়েড ডিভাইসে স্থাপন করতে পারবেন, কারণ এতে 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/
সারণি 1 এ দেখানো হয়েছে, আউটপুট ফাইলের নাম ইনপুট ফাইলের নাম এবং এর মূল ডিরেক্টরির নামের উপর নির্ভর করে।
ইনপুট হিসাবে strings.xml
ফাইল সহ পূর্ববর্তী উদাহরণের জন্য, aapt2
স্বয়ংক্রিয়ভাবে আউটপুট ফাইলটিকে values-en_strings.arsc.flat
হিসাবে নাম দেয়। যাইহোক, অঙ্কনযোগ্য ডিরেক্টরিতে সংরক্ষিত সংকলিত অঙ্কনযোগ্য ফাইলটির নাম drawable_img.png.flat
।
কম্পাইল অপশন
সারণি 2 এ দেখানো হিসাবে আপনি compile
কমান্ডের সাথে ব্যবহার করতে পারেন এমন বেশ কয়েকটি বিকল্প রয়েছে:
অপশন | বর্ণনা |
---|---|
-o path | কম্পাইল করা সম্পদ(গুলি) জন্য আউটপুট পাথ নির্দিষ্ট করে। এটি একটি প্রয়োজনীয় পতাকা, কারণ আপনাকে অবশ্যই একটি ডিরেক্টরিতে একটি পথ নির্দিষ্ট করতে হবে যেখানে AAPT2 কম্পাইল করা সংস্থানগুলি আউটপুট এবং সংরক্ষণ করতে পারে। |
--dir directory | সম্পদের জন্য স্ক্যান করার জন্য ডিরেক্টরি নির্দিষ্ট করে। যদিও আপনি এই পতাকাটি একটি কমান্ডের সাথে একাধিক রিসোর্স ফাইল কম্পাইল করতে ব্যবহার করতে পারেন, এটি ক্রমবর্ধমান সংকলনের সুবিধাগুলিকে অক্ষম করে। অতএব, এই পতাকাটি বড় প্রকল্পের জন্য ব্যবহার করা উচিত নয়। |
--pseudo-localize | ডিফল্ট স্ট্রিংগুলির সিউডোলোকালাইজড সংস্করণ তৈরি করে, যেমন en-XA এবং en-XB । |
--no-crunch | PNG প্রক্রিয়াকরণ অক্ষম করে। এই বিকল্পটি ব্যবহার করুন যদি আপনি ইতিমধ্যেই PNG ফাইলগুলি প্রসেস করে থাকেন বা যদি আপনি ডিবাগ বিল্ড তৈরি করেন যার জন্য ফাইলের আকার কমানোর প্রয়োজন হয় না। এই বিকল্পটি সক্রিয় করার ফলে দ্রুত কার্যকর হয় কিন্তু আউটপুট ফাইলের আকার বৃদ্ধি পায়। |
--legacy | সতর্কতা হিসাবে AAPT-এর পূর্ববর্তী সংস্করণগুলি ব্যবহার করার সময় অনুমোদিত ত্রুটিগুলির আচরণ করে৷ এই পতাকাটি অপ্রত্যাশিত কম্পাইল-টাইম ত্রুটির জন্য ব্যবহার করা উচিত। AAPT2 ব্যবহার করার সময় পরিচিত আচরণের পরিবর্তনগুলি সমাধান করতে, AAPT2 ব্যবহার করার সময় আচরণের পরিবর্তনগুলি পড়ুন। |
-zip file | file হল একটি জিপ ফাইল যাতে রিসোর্সের জন্য স্ক্যান করার জন্য res ডিরেক্টরি থাকে। |
-output-text-symbols file | উল্লিখিত রিসোর্স চিহ্ন সমন্বিত একটি টেক্সট ফাইল তৈরি করে |
-preserve-visibility-of-styleables | নির্দিষ্ট করা হলে, অন্যান্য সমস্ত সংস্থানের জন্য ব্যবহৃত স্টাইলেবলের জন্য একই দৃশ্যমানতার নিয়ম প্রয়োগ করে। অন্যথায়, সমস্ত স্টাইলযোগ্য পাবলিক করা হয়। |
-visibility [ public | private | default |] | সংকলিত সংস্থানগুলির দৃশ্যমানতা নির্দিষ্ট স্তরে সেট করে। |
-trace-folder folder | নির্দিষ্ট করার জন্য একটি systrace JSON ট্রেস ফ্র্যাগমেন্ট তৈরি করে |
-source-path path | কম্পাইল করা রিসোর্স ফাইলের সোর্স ফাইল পাথ সেট করে |
-h | টুল সাহায্য প্রদর্শন করে. |
-v | ভার্বোস লগিং সক্ষম করে। |
লিঙ্ক
লিঙ্ক পর্বে, AAPT2 সমস্ত মধ্যবর্তী ফাইলগুলিকে একত্রিত করে যা সংকলন পর্ব তৈরি করে, যেমন রিসোর্স টেবিল, বাইনারি XML ফাইল এবং প্রক্রিয়াকৃত PNG ফাইল, এবং তারপর ফাইলগুলিকে একটি একক APK-এ প্যাকেজ করে। উপরন্তু, অন্যান্য সহায়ক ফাইল, যেমন R.java
এবং ProGuard নিয়ম ফাইল, এই পর্যায়ে তৈরি করা যেতে পারে। যাইহোক, জেনারেট করা APK-এ DEX বাইটকোড নেই এবং স্বাক্ষরবিহীন। আপনি একটি ডিভাইসে এই APK স্থাপন করতে পারবেন না৷
আপনি যদি কমান্ড লাইন থেকে আপনার অ্যাপ তৈরি করতে অ্যান্ড্রয়েড গ্রেডল প্লাগইন ব্যবহার না করে থাকেন, তাহলে আপনি অন্যান্য কমান্ড-লাইন টুল ব্যবহার করতে পারেন, যেমন d8 জাভা বাইটকোডকে DEX বাইটকোডে কম্পাইল করতে এবং আপনার APK সাইন করার জন্য apksigner ।
লিঙ্ক সিনট্যাক্স
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 | <add-resource> ট্যাগ ব্যবহার না করে overlay শব্দার্থবিদ্যা ব্যবহার করে link করতে একটি পৃথক .flat ফাইল পাস করে।আপনি যখন একটি রিসোর্স ফাইল প্রদান করেন যা একটি বিদ্যমান ফাইলকে ওভারলে করে, প্রদত্ত শেষ বিরোধপূর্ণ রিসোর্সটি ব্যবহার করা হয়। |
--package-id package-id | আপনার অ্যাপের জন্য ব্যবহার করার জন্য প্যাকেজ আইডি নির্দিষ্ট করে। আপনি যে প্যাকেজ আইডি নির্দিষ্ট করেছেন সেটি অবশ্যই 0x7f এর থেকে বড় বা সমান হতে হবে যদি না |
--allow-reserved-package-id | একটি সংরক্ষিত প্যাকেজ আইডি ব্যবহারের অনুমতি দেয়৷ সংরক্ষিত প্যাকেজ আইডিগুলি হল এমন আইডি যা সাধারণত ভাগ করা লাইব্রেরিতে এবং 0x02 থেকে 0x7e এর মধ্যে অন্তর্ভুক্ত করা হয়। এই বিকল্পটি শুধুমাত্র 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 ভাষা কোড দ্বারা ভাষা কনফিগারেশন সংজ্ঞায়িত করতে হবে, ঐচ্ছিকভাবে ছোট হাতের 'r'-এর পূর্বে একটি দুটি অক্ষর ISO 3166-1-আলফা-2 অঞ্চল কোড দ্বারা অনুসরণ করা হবে। উদাহরণস্বরূপ, en-rUS. |
--preferred-density density | AAPT2-কে সবচেয়ে কাছের মিলে যাওয়া ঘনত্ব নির্বাচন করতে এবং অন্য সবগুলিকে বের করে দেওয়ার অনুমতি দেয়৷ আপনার অ্যাপে ব্যবহার করার জন্য বেশ কিছু পিক্সেল ঘনত্বের যোগ্যতা উপলব্ধ রয়েছে, যেমন ldpi, hdpi, এবং xhdpi। যখন আপনি একটি পছন্দের ঘনত্ব নির্দিষ্ট করেন, তখন AAPT2 রিসোর্স টেবিলে সবচেয়ে কাছের মিল ঘনত্ব নির্বাচন করে সঞ্চয় করে এবং অন্য সবগুলি সরিয়ে দেয়। |
--output-to-dir | -o দ্বারা নির্দিষ্ট করা একটি ডিরেক্টরিতে APK বিষয়বস্তু আউটপুট করে।আপনি যদি এই পতাকা ব্যবহার করে কোনো ত্রুটি পান, তাহলে আপনি Android SDK বিল্ড টুল 28.0.0 বা উচ্চতর তে আপগ্রেড করে সেগুলি সমাধান করতে পারেন৷ |
--min-sdk-version min-sdk-version | AndroidManifest.xml এর জন্য ব্যবহার করার জন্য ডিফল্ট ন্যূনতম SDK সংস্করণ সেট করে। |
--target-sdk-version target-sdk-version | AndroidManifest.xml এর জন্য ব্যবহার করার জন্য ডিফল্ট টার্গেট SDK সংস্করণ সেট করে। |
--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 | Protobuf বিন্যাসে সংকলিত সম্পদ তৈরি করে। একটি অ্যান্ড্রয়েড অ্যাপ বান্ডেল তৈরির জন্য |
--non-final-ids | নন-ফাইনাল রিসোর্স আইডি সহ R.java তৈরি করে। kotlinc বা javac সংকলনের সময় অ্যাপের কোড থেকে আইডিগুলির রেফারেন্স ইনলাইন করা হয় না। |
--emit-ids path | রিসোর্স প্রকারের নামের তালিকা এবং তাদের আইডি ম্যাপিং সহ প্রদত্ত পাথে একটি ফাইল নির্গত করে। এটি --stable-ids সাথে ব্যবহারের জন্য উপযুক্ত। |
--stable-ids outputfilename.ext | রিসোর্সের প্রকারের নামের তালিকা এবং তাদের বরাদ্দকৃত আইডিগুলি ধারণকারী --emit-ids দিয়ে তৈরি করা ফাইলটি ব্যবহার করে।এই বিকল্পটি বরাদ্দ করা আইডিগুলিকে স্থিতিশীল থাকার অনুমতি দেয় এমনকি আপনি যখন লিঙ্ক করার সময় নতুন সংস্থান মুছে ফেলেন বা যোগ করেন। |
--custom-package package_name | R.java তৈরি করতে কাস্টম জাভা প্যাকেজ নির্দিষ্ট করে। |
--extra-packages package_name | একই R.java ফাইল তৈরি করে, কিন্তু বিভিন্ন প্যাকেজ নামের সাথে। |
--add-javadoc-annotation annotation | সমস্ত জেনারেট করা জাভা ক্লাসে একটি 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 এর একটি ভিন্ন সংস্করণ তৈরি করতে কনফিগারেশনের সেটের উপর ভিত্তি করে সংস্থানগুলিকে বিভক্ত করে৷ কনফিগারেশনের সেট সহ আপনাকে আউটপুট APK-এর পথ নির্দিষ্ট করতে হবে। |
--proguard-main-dex file | প্রধান DEX-এর জন্য উত্পন্ন ProGuard নিয়মের জন্য আউটপুট ফাইল। |
--proguard-minimal-keep-rules | ProGuard রাখার নিয়মের একটি ন্যূনতম সেট তৈরি করে। |
--no-resource-removal | ডিফল্ট ছাড়াই সংস্থানগুলির স্বয়ংক্রিয় অপসারণ অক্ষম করে৷ রানটাইম রিসোর্স ওভারলে প্যাকেজ তৈরি করার সময় শুধুমাত্র এই বিকল্পটি ব্যবহার করুন। |
-x | লিগ্যাসি পতাকা যা প্যাকেজ শনাক্তকারী 0x01 এর ব্যবহার নির্দিষ্ট করে৷ |
--product products-list | রাখার জন্য পণ্যের নামগুলির একটি কমা দ্বারা পৃথক করা তালিকা নির্দিষ্ট করে৷ |
--no-xml-namespaces | res/* এ AndroidManifest.xml ফাইল এবং XML বাইনারি থেকে XML নেমস্পেস প্রিফিক্স এবং URI তথ্য সরিয়ে দেয়। |
--shared-lib | একটি শেয়ার করা Android রানটাইম লাইব্রেরি তৈরি করে। |
--static-lib | একটি স্ট্যাটিক অ্যান্ড্রয়েড লাইব্রেরি তৈরি করে। |
--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 | XML ফাইলগুলিতে কাঁচা বৈশিষ্ট্যের মান সংরক্ষণ করে। |
--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 | আউটপুট বর্ধিত verbosity সক্ষম করে. |
ডাম্প
link
কমান্ড ব্যবহার করে আপনার তৈরি করা APK সম্পর্কে তথ্য মুদ্রণের জন্য dump
ব্যবহার করা হয়।
ডাম্প সিনট্যাক্স
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-এর সংকলিত XML থেকে স্ট্রিং প্রিন্ট করে। |
xmltree | APK-এর সংকলিত XML-এর একটি ট্রি প্রিন্ট করে। |
ডাম্প অপশন
dump
সহ নিম্নলিখিত বিকল্পগুলি ব্যবহার করুন:
অপশন | বর্ণনা |
---|---|
--no-values | সম্পদ প্রদর্শন করার সময় মানের আউটপুট দমন করে। |
--file file | APK থেকে ডাম্প করার জন্য একটি আর্গুমেন্ট হিসাবে একটি ফাইল নির্দিষ্ট করে৷ |
-v | আউটপুট এর verbosity বৃদ্ধি. |
পার্থক্য
দুটি APK তুলনা করতে এবং তাদের মধ্যে যে কোনো পার্থক্য চিহ্নিত করতে diff
ব্যবহার করুন।
ভিন্ন সিনট্যাক্স
diff
ব্যবহার করার জন্য সাধারণ সিনট্যাক্স নিম্নরূপ:
aapt2 diff first.apk second.apk
diff
কমান্ডের জন্য কোন বিকল্প নেই।
অপ্টিমাইজ করুন
optimize
ব্যবহার করা হয় অপটিমাইজেশন চালানোর জন্য মার্জ করা রিসোর্স এবং resources.arsc
প্যাকেজ করার আগে। এই অপ্টিমাইজেশানটি APK এর আকারকে প্রায় 1-3% কমাতে পারে, যেগুলি ব্যবহার করা হচ্ছে তার আকার এবং সংখ্যার উপর নির্ভর করে।
সিনট্যাক্স অপ্টিমাইজ করুন
optimize
ব্যবহার করার জন্য সাধারণ সিনট্যাক্স নিম্নরূপ:
aapt2 optimize options file[,file[..]]
নিম্নলিখিত উদাহরণটি input.apk
এ সংস্থানগুলিকে অপ্টিমাইজ করে এবং output.apk
এ একটি নতুন, অপ্টিমাইজ করা APK তৈরি করে৷ এটি একটি আরও কমপ্যাক্ট বাইনারি অনুসন্ধান গাছের সাথে সাধারণ ফ্ল্যাট টেবিল উপস্থাপনা প্রতিস্থাপন করে, যার ফলে পুনরুদ্ধার কার্যক্ষমতার খরচে একটি ছোট APK হয়:
aapt2 optimize -o output.apk --enable-sparse-encoding input.apk
অপটিমাইজ অপশন
আপনি optimize
সাথে নিম্নলিখিত বিকল্পগুলি ব্যবহার করতে পারেন:
অপশন | বর্ণনা |
---|---|
-o path | লিঙ্কড রিসোর্স APK-এর জন্য আউটপুট পাথ নির্দিষ্ট করে। এটি একটি প্রয়োজনীয় পতাকা, কারণ আপনাকে অবশ্যই আউটপুট APK এর জন্য পথ নির্দিষ্ট করতে হবে যা লিঙ্কযুক্ত সংস্থানগুলিকে ধরে রাখতে পারে৷ |
-d directory | বিভাজনের জন্য আউটপুট ডিরেক্টরির পাথ নির্দিষ্ট করে। |
-x path | XML কনফিগারেশন ফাইলের পথ নির্দিষ্ট করে। |
-p | মাল্টি-এপিকে আর্টিফ্যাক্ট প্রিন্ট করে এবং প্রস্থান করুন। |
--target-densities density[,density[..]] | স্ক্রীনের ঘনত্বের একটি কমা দ্বারা পৃথক করা তালিকা নির্দিষ্ট করে যার জন্য APK অপ্টিমাইজ করা হয়েছে৷ প্রদত্ত ঘনত্বের ডিভাইসগুলিতে অব্যবহৃত সমস্ত সংস্থান APK থেকে সরানো হয়েছে। |
--resources-config-path path | রিসোর্সের তালিকা এবং প্রতিটি রিসোর্সের নির্দেশাবলী সম্বলিত বিন্যাস: type/resource_name#[directive][,directive] |
-c config[,config[..]] | অন্তর্ভুক্ত করার জন্য কনফিগারেশনের একটি কমা দ্বারা পৃথক করা তালিকা নির্দিষ্ট করে। ডিফল্ট হল সব কনফিগারেশন। |
--split path:config[,config[..]] | APK এর একটি ভিন্ন সংস্করণ তৈরি করতে কনফিগারেশনের সেটের উপর ভিত্তি করে সংস্থানগুলিকে বিভক্ত করে৷ কনফিগারেশনের সেট সহ আপনাকে আউটপুট APK-এর পথ নির্দিষ্ট করতে হবে। |
--keep-artifacts artifact[,artifact[..]] | রাখার জন্য আর্টিফ্যাক্টগুলির একটি কমা দ্বারা পৃথক করা তালিকা নির্দিষ্ট করে৷ কোনোটি নির্দিষ্ট না থাকলে, সমস্ত নিদর্শন রাখা হয়। |
--enable-sparse-encoding | একটি বাইনারি অনুসন্ধান গাছ ব্যবহার করে স্পার্স এন্ট্রিগুলির এনকোডিং সক্ষম করে৷ এই বিকল্পটি APK আকারের অপ্টিমাইজেশনের জন্য উপযোগী কিন্তু সম্পদ পুনরুদ্ধার কার্যক্ষমতার খরচে। |
--collapse-resource-names | কী স্ট্রিং পুলে সম্পদের নামগুলিকে একটি একক মান সঙ্কুচিত করে। --resources-config-path দ্বারা নির্দিষ্ট করা ফাইলে no_collapse নির্দেশিকা ব্যবহার করে সম্পদগুলিকে ছাড় দেওয়া হয়েছে। |
--shorten-resource-paths | APK এর ভিতরে সম্পদের পথ ছোট করে। |
--resource-path-shortening-map path | পুরানো রিসোর্স পাথের ম্যাপকে সংক্ষিপ্ত পাথে আউটপুট করার পাথ নির্দিষ্ট করে। |
-v | আউটপুট এর verbosity বৃদ্ধি. |
-h | টুল সাহায্য প্রদর্শন করে. |
রূপান্তর করুন
ডিফল্টরূপে, AAPT compile
কমান্ড একটি বাইনারি বিন্যাসে সম্পদ কম্পাইল করে যা APK-এর জন্য উপযুক্ত। --proto-format
উল্লেখ করে AAB-এর জন্য উপযুক্ত protobuf বিন্যাসও নির্দিষ্ট করা সম্ভব। 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 | XML ফাইলগুলিতে কাঁচা বৈশিষ্ট্যের মান সংরক্ষণ করে। |
-v | আউটপুট এর verbosity বৃদ্ধি. |
-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
, যা নির্দিষ্ট folder একটি systrace
JSON ট্রেস ফ্র্যাগমেন্ট তৈরি করে।
সংস্করণ
version
কমান্ডের সাথে আপনি AAPT2 এর সংস্করণটি ব্যবহার করছেন তা নির্ধারণ করুন:
aapt2 version Android Asset Packaging Tool (aapt) 2.19-8678579
AAPT2 ব্যবহার করার সময় আচরণ পরিবর্তন হয়
AAPT2-এর আগে, AAPT ছিল অ্যান্ড্রয়েড অ্যাসেট প্যাকেজিং টুলের ডিফল্ট সংস্করণ, যা এখন বাতিল করা হয়েছে। যদিও AAPT2 পুরানো প্রকল্পগুলির সাথে অবিলম্বে কাজ করা উচিত, এই বিভাগে কিছু আচরণের পরিবর্তনগুলি বর্ণনা করে যা আপনার সচেতন হওয়া উচিত।
অ্যান্ড্রয়েড ম্যানিফেস্টে উপাদানের শ্রেণিবিন্যাস
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 বিল্ড টুলের সর্বশেষ সংস্করণ ব্যবহার করে লাইব্রেরি পুনর্নির্মাণের জন্য লাইব্রেরির লেখকের সাথে যোগাযোগ করুন এবং লাইব্রেরিটি পুনরায় প্রকাশ করুন৷