ساخت خود را با APK Analyzer آنالیز کنید، ساخت خود را با APK Analyzer آنالیز کنید

اندروید استودیو شامل یک تحلیلگر 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 یا بسته نرم‌افزاری خود را انتخاب کنید.

مشاهده اطلاعات فایل و حجم آن

APKها فایل‌هایی هستند که از فرمت فایل ZIP پیروی می‌کنند. تحلیلگر APK هر فایل یا پوشه را به عنوان یک موجودیت نمایش می‌دهد که می‌توانید آن را گسترش دهید تا به پوشه‌ها بروید. سلسله مراتب موجودیت‌ها، ساختار فایل‌ها و پوشه‌های موجود در فایل APK را منعکس می‌کند.

تحلیلگر APK، اندازه فایل فشرده (یا "اندازه فایل خام") و مقادیر اندازه فایل دانلودی را برای هر موجودیت، همانطور که در شکل ۱ نشان داده شده است، نشان می‌دهد . اندازه فایل خام ، سهم آن موجودیت را در کل حجم APK نشان می‌دهد. اندازه دانلود، اندازه فشرده تخمینی موجودیت را همانطور که توسط Google Play ارائه می‌شود، نشان می‌دهد. درصد حجم کل دانلود، درصد حجم کل دانلود APK را که آن موجودیت نشان می‌دهد، نشان می‌دهد.

شکل ۱. حجم فایل‌ها در تحلیلگر 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 انتخاب شده ارائه می‌دهد، همانطور که در شکل ۴ نشان داده شده است.

شکل ۴. فیلترهای DEX تنظیم شده برای نمایش فیلدها و متدهای BuildConfig .

برای استفاده از فیلترها جهت نمایش تمام متدها و فیلدهای درون یک کلاس، مراحل زیر را انجام دهید:

  1. در لیست فایل‌ها ، فایل classes.dex را انتخاب کنید.
  2. در لیست کلاس‌ها ، به کلاس مورد نظر بروید و آن را انتخاب کنید.
  3. کلاسی که انتخاب کرده‌اید را گسترش دهید.
  4. نمایش فیلدها را فعال/غیرفعال کنید برای نمایش یا پنهان کردن فیلدهای کلاس.
  5. نمایش متدها برای نمایش یا پنهان کردن متدهای کلاس.
  6. نمایش همه متدها یا فیلدهای ارجاع‌شدهبرای نمایش یا پنهان کردن بسته‌ها، کلاس‌ها، متدها و فیلدهای ارجاع‌شده.

    در نمای درختی، گره‌های ایتالیک شده، ارجاعاتی هستند که در فایل DEX انتخاب شده تعریفی ندارند. یک فایل DEX می‌تواند به متدها و فیلدهایی که در فایل دیگری تعریف شده‌اند، ارجاع دهد. برای مثال، System.out.println ارجاعی به متد println در چارچوب اندروید است.

بارگذاری نگاشت‌های ProGuard

در کنار آیکون‌های فیلترینگ، آیکون‌های نگاشت ProGuard قرار دارند. آیکون‌های ProGuard تا زمانی که مجموعه‌ای از فایل‌های نگاشت ProGuard را بارگذاری نکنید که قابلیت‌هایی را به نمایشگر DEX اضافه می‌کنند، مانند رمزگشایی نام‌ها ( mapping.txt )، نمایش گره‌هایی که حذف شده‌اند ( usage.txt ) و مشخص کردن گره‌هایی که نمی‌توان حذف کرد ( seeds.txt )، خاکستری می‌شوند.

فایل نگاشت ProGuard که وارد می‌کنید باید از همان ساختاری باشد که فایل‌های DEX را با قابلیت فشرده‌سازی کد فعال تولید کرده است.

شکل 5. بارگذاری نگاشت‌های Proguard...

برای بارگذاری فایل‌های نگاشت ProGuard، موارد زیر را انجام دهید:

  1. روی بارگذاری نگاشت‌های Proguard... کلیک کنید.
  2. به پوشه پروژه که حاوی فایل‌های نگاشت است بروید و تمام فایل‌ها، هر ترکیبی از فایل‌ها یا پوشه‌ای که حاوی فایل‌ها است را بارگذاری کنید.

    فایل‌های نگاشت معمولاً در مسیر 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)، روی آن راست کلیک کنید.

نمایش بایت‌کد : کلاس، متد یا فیلد انتخاب‌شده را دیکامپایل می‌کند و نمایش بایت‌کد کوچک را در یک پنجره‌ی محاوره‌ای، به شرح زیر نمایش می‌دهد:

شکل ۶. بایت‌کد DEX برای متد init .

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

شکل ۷. ارجاعات به MyClass .

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

شکل ۸. قوانین ProGuard که می‌توانید از کادر محاوره‌ای در فایل پیکربندی ProGuard خود کپی کنید.

مشاهده موجودیت‌های کد و منابع

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

برای مشاهده نسخه نهایی فایل‌های خود با APK Analyzer، همانطور که در شکل 9 نشان داده شده است، روی موجودیت مورد نظر کلیک کنید تا پیش‌نمایشی از موجودیت متن یا تصویر نمایش داده شود.

شکل ۹. پیش‌نمایشی از منبع تصویر نهایی.

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

شکل ۱۰. پیش‌نمایش منابع رشته‌ای ترجمه‌شده.

مقایسه فایل‌ها

تحلیلگر APK می‌تواند اندازه موجودیت‌ها را در دو فایل APK یا بسته نرم‌افزاری مختلف مقایسه کند. این قابلیت زمانی مفید است که می‌خواهید بفهمید چرا حجم برنامه شما در مقایسه با نسخه قبلی افزایش یافته است.

قبل از انتشار یک برنامه‌ی به‌روزرسانی‌شده، موارد زیر را انجام دهید:

  1. نسخه‌ای از برنامه که می‌خواهید منتشر کنید را در APK Analyzer بارگذاری کنید.
  2. در گوشه بالا سمت راست تحلیلگر APK، روی مقایسه با APK قبلی... کلیک کنید.
  3. در کادر انتخاب، آخرین اثری که برای کاربران شما منتشر شده است را پیدا کنید و روی تأیید کلیک کنید.

    پنجره‌ای مشابه شکل ۱۱ ظاهر می‌شود که به شما کمک می‌کند تا تأثیر احتمالی به‌روزرسانی بر کاربران را ارزیابی کنید.

شکل ۱۱ تفاوت بین نسخه‌های اشکال‌زدایی و انتشار یک برنامه خاص را نشان می‌دهد. گزینه‌های ساخت متفاوتی بین این انواع ساخت استفاده می‌شود که موجودیت‌های اساسی را به طور متفاوتی تغییر می‌دهند.

شکل ۱۱. تفاوت بین فایل اشکال‌زدایی (debug) و فایل APK منتشر شده (release APK).