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

می‌توانید بررسی کنید که نمایه‌های راه‌اندازی شما با استفاده از اندروید استودیو یا نگاه کردن به ابرداده ساخت R8 کار می‌کنند.

با Android Studio تایید کنید

برای تأیید بهینه‌سازی طرح‌بندی DEX، از Android Studio برای باز کردن APK و تأیید کلاس‌های موجود در فایل‌های DEX استفاده کنید. مطمئن شوید classes.dex اولیه کاملاً پر نشده باشد. اگر برنامه شما از یک فایل DEX تشکیل شده است، می توانید پس از فعال کردن نمایه راه اندازی بررسی کنید که آیا برنامه دارای دو فایل DEX است یا خیر.

اگر کلاس‌های راه‌اندازی در یک فایل DEX قرار نگیرند، Android Studio به شما هشدار می‌دهد. برای دریافت اطلاعات تشخیصی که شامل تعداد روش‌های غیرراه‌اندازی در کلاس‌های راه‌اندازی می‌شود، با اعمال تغییرات زیر در فایل settings.gradle هنگام اعمال نمایه راه‌اندازی، مطمئن شوید که کامپایلر R8 حداقل به نسخه 8.3.36-dev به‌روزرسانی شده است:

کاتلین

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

شیار

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 مطمئن شوید که --info بعد از assembleRelease در دستور زیر اضافه کنید.

./gradlew assembleRelease --info

سپس عیب یابی در ترمینال چاپ می شود.

اگر برنامه شما یا هر کتابخانه‌ای به هر API حذف‌شده‌ای اشاره می‌کند، پیاده‌سازی‌های سازگاری همراه این کلاس‌ها همیشه در آخرین فایل DEX موجود است. این آخرین فایل DEX قندزدایی شده در بهینه سازی طرح بندی 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
    

    مقادیر هش را با مقادیر "جمع کنترل" از مرحله 1 مقایسه کنید. اگر مقادیر SHA-256 مطابقت نداشته باشند، ممکن است یک مرحله کامپایل با توانایی R8 برای خروجی فایل های DEX تداخل داشته باشد.