اندروید استودیو شامل یک تحلیلگر APK است که پس از اتمام فرآیند ساخت، بینش فوری در مورد ترکیب APK یا بسته نرمافزاری اندروید شما ارائه میدهد. استفاده از تحلیلگر APK میتواند زمانی را که صرف اشکالزدایی مشکلات با فایلهای DEX و منابع درون برنامه خود میکنید، کاهش دهد و به کاهش اندازه APK شما کمک کند. تحلیلگر APK همچنین از طریق خط فرمان با apkanalyzer در دسترس است.
با استفاده از APK Analyzer، میتوانید:
- اندازه مطلق و نسبی فایلهای موجود در برنامه، مانند فایلهای DEX و منابع اندروید را مشاهده کنید.
- درک ساختار فایلهای DEX
- به سرعت نسخههای نهایی فایلهای موجود در برنامه، مانند فایل
AndroidManifest.xmlرا مشاهده کنید. - دو فایل APK یا دو بسته نرمافزاری را در کنار هم مقایسه کنید.
سه راه برای دسترسی به APK Analyzer در زمان باز بودن یک پروژه وجود دارد:
- یک فایل APK یا بسته نرمافزاری را به پنجره ویرایشگر اندروید استودیو بکشید (درگ کنید).
- در پنجره پروژه به نمای پروژه بروید، سپس روی APK در دایرکتوری پیشفرض
build/output/apks/دوبار کلیک کنید. - در نوار منو، گزینه Build > Analyze APK را انتخاب کنید، سپس APK یا بسته نرمافزاری خود را انتخاب کنید.
مهارتهای اندروید
مشاهده در گیتهاب آنالایزر R8
android skills add r8-analyzer
مشاهده اطلاعات فایل و حجم آن
APKها فایلهایی هستند که از فرمت فایل ZIP پیروی میکنند. تحلیلگر APK هر فایل یا پوشه را به عنوان یک موجودیت نمایش میدهد که میتوانید آن را گسترش دهید تا به پوشهها بروید. سلسله مراتب موجودیتها، ساختار فایلها و پوشههای موجود در فایل APK را منعکس میکند.
تحلیلگر APK، اندازه فایل فشرده (یا "اندازه فایل خام") و مقادیر اندازه فایل دانلودی را برای هر موجودیت، همانطور که در شکل ۱ نشان داده شده است، نشان میدهد . اندازه فایل خام ، سهم آن موجودیت را در کل حجم APK نشان میدهد. اندازه دانلود، اندازه فشرده تخمینی موجودیت را همانطور که توسط Google Play ارائه میشود، نشان میدهد. درصد حجم کل دانلود، درصد حجم کل دانلود APK را که آن موجودیت نشان میدهد، نشان میدهد.

مشاهدهی فایل AndroidManifest.xml
اگر پروژه شما شامل چندین فایل AndroidManifest.xml باشد، مانند فایلهای product flavors، یا شامل کتابخانههایی باشد که یک فایل manifest نیز ارائه میدهند، آنها در برنامه شما در یک فایل واحد ادغام میشوند. این فایل manifest معمولاً یک فایل باینری در APK یا بسته برنامه است، اما وقتی در APK Analyzer انتخاب میشود، فرم XML این موجودیت بازسازی و ارائه میشود.
این نمایشگر به شما کمک میکند تا هرگونه تغییری را که ممکن است در طول ساخت برنامه در برنامه شما ایجاد شده باشد، درک کنید. برای مثال، میتوانید ببینید که چگونه فایل AndroidManifest.xml از کتابخانهای که برنامه شما به آن وابسته است، در فایل AndroidManifest.xml نهایی ادغام میشود.
علاوه بر این، این نمایشگر برخی قابلیتهای lint را نیز ارائه میدهد. هشدارها یا خطاها در گوشه بالا سمت راست ظاهر میشوند. شکل 2 خطایی را نشان میدهد که برای فایل مانیفست انتخاب شده گزارش شده است.

مشاهده فایلهای DEX
نمایشگر فایل DEX در APK Analyzer به شما امکان دسترسی فوری به اطلاعات زیربنایی فایلهای DEX در برنامهتان را میدهد. این نمایشگر، تعداد کلاس، بسته، کل ارجاعات و اعلانها را ارائه میدهد که میتواند در تصمیمگیری در مورد استفاده از multidex یا نحوه حذف وابستگیها برای رسیدن به زیر حد 64K DEX کمک کند.
شکل ۳ یک برنامه با حجم متوسط را نشان میدهد که کمتر از محدودیت ۶۴ کیلوبایتی DEX است. تعداد هر بسته، کلاس و متد درون فایل DEX در ستونهای Defined Methods و Referenced Methods ذکر شده است.
ستون Referenced Methods تمام متدهایی را که فایل DEX به آنها ارجاع میدهد، شمارش میکند. این معمولاً شامل متدهای تعریفشده در کد شما، کتابخانههای وابستگی و متدهای تعریفشده در بستههای استاندارد جاوا و اندروید است که کد از آنها استفاده میکند. اینها متدهایی هستند که در محدوده ۶۴ کیلوبایتی متد در هر فایل DEX شمارش میشوند.
ستون Defined Methods فقط متدهایی را شمارش میکند که در یکی از فایلهای DEX شما تعریف شدهاند، بنابراین این عدد زیرمجموعهای از Referenced Methods است.

فیلتر کردن نمای درختی فایل DEX
درست بالای لیست کلاسها ، تحلیلگر APK فیلترهایی را برای مشاهده محتوای فایل DEX انتخاب شده ارائه میدهد، همانطور که در شکل ۴ نشان داده شده است.

BuildConfig .برای استفاده از فیلترها جهت نمایش تمام متدها و فیلدهای درون یک کلاس، مراحل زیر را انجام دهید:
- در لیست فایلها ، فایل
classes.dexرا انتخاب کنید. - در لیست کلاسها ، به کلاس مورد نظر بروید و آن را انتخاب کنید.
- کلاسی که انتخاب کردهاید را گسترش دهید.
- نمایش فیلدها را فعال/غیرفعال کنید
برای نمایش یا پنهان کردن فیلدهای کلاس. - نمایش متدها
برای نمایش یا پنهان کردن متدهای کلاس. نمایش همه متدها یا فیلدهای ارجاعشده
برای نمایش یا پنهان کردن بستهها، کلاسها، متدها و فیلدهای ارجاعشده.در نمای درختی، گرههای ایتالیک شده، ارجاعاتی هستند که در فایل DEX انتخاب شده تعریفی ندارند. یک فایل DEX میتواند به متدها و فیلدهایی که در فایل دیگری تعریف شدهاند، ارجاع دهد. برای مثال،
System.out.printlnارجاعی به متدprintlnدر چارچوب اندروید است.
بارگذاری نگاشتهای ProGuard
در کنار آیکونهای فیلترینگ، آیکونهای نگاشت ProGuard قرار دارند. آیکونهای ProGuard تا زمانی که مجموعهای از فایلهای نگاشت ProGuard را بارگذاری نکنید که قابلیتهایی را به نمایشگر DEX اضافه میکنند، مانند رمزگشایی نامها ( mapping.txt )، نمایش گرههایی که حذف شدهاند ( usage.txt ) و مشخص کردن گرههایی که نمیتوان حذف کرد ( seeds.txt )، خاکستری میشوند.
فایل نگاشت ProGuard که وارد میکنید باید از همان ساختاری باشد که فایلهای DEX را با قابلیت فشردهسازی کد فعال تولید کرده است.

برای بارگذاری فایلهای نگاشت ProGuard، موارد زیر را انجام دهید:
- روی بارگذاری نگاشتهای Proguard... کلیک کنید.
به پوشه پروژه که حاوی فایلهای نگاشت است بروید و تمام فایلها، هر ترکیبی از فایلها یا پوشهای که حاوی فایلها است را بارگذاری کنید.
فایلهای نگاشت معمولاً در مسیر
project / app /build/outputs/mappings/release/قرار دارند. اگر انتخابگر فایل، این ساختار پروژه را تشخیص دهد، بهطور پیشفرض پوشه release را انتخاب میکند.ابتدا، انتخابگر فایل، نام فایلهایی را که دقیقاً با
mapping.txt،seeds.txtوusage.txtمطابقت دارند، بررسی میکند. در مرحله بعد، انتخابگر فایل، نام فایلهایی را که حاوی متنmapping،usageیاseedsدر جایی هستند و با.txtخاتمه مییابند، بررسی میکند. به عنوان مثالrelease-seeds-1.10.15.txtیک مورد منطبق است.
لیست زیر فایلهای نقشهبرداری را شرح میدهد:
-
seeds.txt: گرههایی که پیکربندی ProGuard مانع از حذف آنها در حین کوچک شدن میشود، با حروف پررنگ نشان داده شدهاند. -
mapping.txt: نامهای Deobfuscate را فعال میکند.
بنابراین میتوانید نامهای اصلی گرههایی که توسط R8 مبهمسازی شدهاند را بازیابی کنید. برای مثال، میتوانید نامهای گرههای مبهمسازی شده مانند a،b،cرا بهMyClass،MainActivityوmyMethod()بازگردانید. usage.txt: نمایش گرههای حذفشده را فعال میکند.
بنابراین میتوانید کلاسها، متدها و فیلدهایی را که توسط R8 در حین کوچکسازی حذف شدهاند، نشان دهید. گرههای بازیابی شده به صورت خط خورده نشان داده میشوند.برای اطلاعات بیشتر در مورد استفاده از R8 برای مبهمسازی و کوچکسازی کد، به بخش کوچکسازی، مبهمسازی و بهینهسازی برنامه خود مراجعه کنید.
نمایش بایتکد، یافتن موارد استفاده و ایجاد قانون Keep
گرهها در نمای لیست کلاس (Class list view) دارای یک منوی زمینه با گزینههای زیر هستند که به شما امکان میدهند بایتکد (bytecode) را ببینید، موارد استفاده را پیدا کنید و کادر محاورهای را نمایش دهید که قوانین ProGuard را برای کپی و چسباندن برای گره انتخاب شده نشان میدهد. برای نمایش منوی زمینه هر گره در نمای لیست کلاس (Class list view)، روی آن راست کلیک کنید.
نمایش بایتکد : کلاس، متد یا فیلد انتخابشده را دیکامپایل میکند و نمایش بایتکد کوچک را در یک پنجرهی محاورهای، به شرح زیر نمایش میدهد:

init . یافتن کاربردها : همانطور که در شکل ۷ نشان داده شده است، نشان میدهد که کدام بخشهای دیگر کد DEX به کلاس یا متد انتخاب شده ارجاع دارند. اگر seeds.txt بارگذاری شده باشد، گرههایی که به صورت پررنگ نمایش داده میشوند، نشان میدهند که پیکربندی ProGuard مانع از حذف آنها در حین کوچکسازی میشود:

MyClass .ایجاد قانون Proguard Keep : قوانین ProGuard را نشان میدهد که میتوانید آنها را کپی کرده و در فایل پیکربندی ProGuard پروژه خود قرار دهید، همانطور که در شکل 8 نشان داده شده است. این کار از حذف شدن یک بسته، کلاس، متد یا فیلد مشخص در طول مرحله فشردهسازی کد جلوگیری میکند. برای اطلاعات بیشتر، به بخش «سفارشیسازی کدی که باید نگه داشته شود» مراجعه کنید.

مشاهده موجودیتهای کد و منابع
وظایف مختلف ساخت، موجودیتهای نهایی یک برنامه را تغییر میدهند. برای مثال، قوانین کوچکسازی ProGuard میتواند کد نهایی شما را تغییر دهد و منابع تصویر میتوانند توسط منابع موجود در product flavor نادیده گرفته شوند.
برای مشاهده نسخه نهایی فایلهای خود با APK Analyzer، همانطور که در شکل 9 نشان داده شده است، روی موجودیت مورد نظر کلیک کنید تا پیشنمایشی از موجودیت متن یا تصویر نمایش داده شود.

تحلیلگر APK همچنین میتواند فایلهای متنی و باینری مختلفی را نمایش دهد. برای مثال، نمایشگر موجودیت resources.arsc به شما امکان میدهد مقادیر خاص پیکربندی، مانند ترجمههای زبان برای یک منبع رشتهای را مشاهده کنید. در شکل 10، میتوانید ترجمههای هر منبع رشتهای را مشاهده کنید.

مقایسه فایلها
تحلیلگر APK میتواند اندازه موجودیتها را در دو فایل APK یا بسته نرمافزاری مختلف مقایسه کند. این قابلیت زمانی مفید است که میخواهید بفهمید چرا حجم برنامه شما در مقایسه با نسخه قبلی افزایش یافته است.
قبل از انتشار یک برنامهی بهروزرسانیشده، موارد زیر را انجام دهید:
- نسخهای از برنامه که میخواهید منتشر کنید را در APK Analyzer بارگذاری کنید.
- در گوشه بالا سمت راست تحلیلگر APK، روی مقایسه با APK قبلی... کلیک کنید.
در کادر انتخاب، آخرین اثری که برای کاربران شما منتشر شده است را پیدا کنید و روی تأیید کلیک کنید.
پنجرهای مشابه شکل ۱۱ ظاهر میشود که به شما کمک میکند تا تأثیر احتمالی بهروزرسانی بر کاربران را ارزیابی کنید.
شکل ۱۱ تفاوت بین نسخههای اشکالزدایی و انتشار یک برنامه خاص را نشان میدهد. گزینههای ساخت متفاوتی بین این انواع ساخت استفاده میشود که موجودیتهای اساسی را به طور متفاوتی تغییر میدهند.
