بهینه سازی نمایه های راه اندازی را تأیید کنید

می‌توانید با استفاده از اندروید استودیو یا با بررسی متادیتای ساخت 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 استفاده کنید. برای بررسی اینکه آیا بهینه‌سازی کار کرده است، موارد زیر را انجام دهید:

  1. AAB برنامه خود را بسازید:

    ./gradlew app:bundleRelease
    
  2. بررسی کنید که حداقل یک فایل DEX وجود داشته باشد که حاوی متن "startup": true .

    1. فراداده را باز کنید:

      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 باشد.

    2. خروجی را بررسی کنید، که باید چیزی شبیه به این باشد:

          inflating: r8.json
      [
        {
          "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951",
          "startup": true
        }
      ]
      

    اگر فقط "startup": false در فراداده می‌بینید، باید پروفایل‌های راه‌اندازی را فعال کنید و مطمئن شوید که پروفایل راه‌اندازی شما مبهم‌سازی نشده است.

  3. بررسی کنید که مقادیر 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 تداخل داشته باشد.