میتوانید با استفاده از اندروید استودیو یا با بررسی متادیتای ساخت R8، بررسی کنید که آیا پروفایلهای راهاندازی شما کار میکنند یا خیر.
با اندروید استودیو تایید کنید
برای تأیید بهینهسازی طرحبندی DEX، از اندروید استودیو برای باز کردن APK و تأیید کلاسهای موجود در فایلهای DEX استفاده کنید. مطمئن شوید که classes.dex اصلی کاملاً پر نشده باشد. اگر برنامه شما از یک فایل DEX تشکیل شده است، میتوانید پس از فعال کردن نمایه راهاندازی، بررسی کنید که آیا برنامه حاوی دو فایل DEX است یا خیر.
اگر کلاسهای راهاندازی در یک فایل DEX واحد جا نشوند، اندروید استودیو به شما هشدار میدهد. برای دریافت اطلاعات تشخیصی که شامل تعداد متدهای غیر راهاندازی در کلاسهای راهاندازی است، مطمئن شوید که کامپایلر R8 حداقل به نسخه ۸.۳.۲۱ بهروزرسانی شده است. برای این کار، هنگام اعمال پروفایل راهاندازی، تغییرات زیر را در فایل settings.gradle اعمال کنید:
کاتلین
pluginManagement { buildscript { repositories { mavenCentral() maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath("com.android.tools:r8:8.3.21") } } }
گرووی
pluginManagement { buildscript { repositories { mavenCentral() maven { url uri('https://storage.googleapis.com/r8-releases/raw') } } dependencies { classpath 'com.android.tools:r8:8.3.6-dev" } } }
هنگام ساخت با Gradle، مطمئن شوید که در دستور زیر، بعد از assembleRelease --info را اضافه میکنید.
./gradlew assembleRelease --info
سپس تشخیص در ترمینال چاپ میشود.
اگر برنامه یا هر کتابخانهای از شما به هرگونه API desugared ارجاع میدهد، پیادهسازیهای سازگاری همراه این کلاسها همیشه در آخرین فایل DEX قرار دارند. این آخرین فایل DEX desugared در بهینهسازیهای طرحبندی DEX شرکت نمیکند.
با فراداده بسته تأیید کنید
با شروع از AGP 8.8، R8 فرادادههایی را در Android App Bundle (AAB) شما خروجی میدهد که میتوانید از آنها برای بررسی موفقیتآمیز بودن بهینهسازی طرحبندی DEX استفاده کنید. برای بررسی اینکه آیا بهینهسازی کار کرده است، موارد زیر را انجام دهید:
AAB برنامه خود را بسازید:
./gradlew app:bundleReleaseبررسی کنید که حداقل یک فایل DEX وجود داشته باشد که حاوی متن
"startup": true.فراداده را باز کنید:
unzip -j -o path-to-aab BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.jsonمسیر AAB شما میتواند چیزی شبیه به
app/build/outputs/bundle/release/app-release.aabباشد.خروجی را بررسی کنید، که باید چیزی شبیه به این باشد:
inflating: r8.json [ { "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951", "startup": true } ]
اگر فقط
"startup": falseدر فراداده میبینید، باید پروفایلهای راهاندازی را فعال کنید و مطمئن شوید که پروفایل راهاندازی شما مبهمسازی نشده است.بررسی کنید که مقادیر SHA-256 از فراداده با مقادیر AAB مطابقت داشته باشند. برای دریافت مقادیر SHA-256 برای همه فایلهای DEX خود، دستور زیر را اجرا کنید:
unzip -o path-to-aab */dex/*.dex && sha256sum */dex/*خروجی باید چیزی شبیه به این باشد:
Archive: app/build/outputs/bundle/release/myapp-release.aab inflating: base/dex/classes.dex f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951 base/dex/classes.dexمقادیر هش را با مقادیر "checksum" از مرحله 1 مقایسه کنید. اگر مقادیر SHA-256 مطابقت نداشته باشند، ممکن است یک مرحله کامپایل وجود داشته باشد که با توانایی R8 در خروجی فایلهای DEX تداخل داشته باشد.