پشتیبانی از اندازه صفحه 16 کیلوبایت

۱۶ کیلوبایت مورد نیاز برای سازگاری با گوگل پلی
از اول نوامبر ۲۰۲۵، تمام برنامه‌های جدید و به‌روزرسانی‌های برنامه‌های موجود که در گوگل پلی منتشر می‌شوند و دستگاه‌های اندروید ۱۵+ را هدف قرار می‌دهند، باید از اندازه صفحات ۱۶ کیلوبایتی در دستگاه‌های ۶۴ بیتی پشتیبانی کنند.

از لحاظ تاریخی، اندروید تنها از اندازه صفحات حافظه 4 کیلوبایتی پشتیبانی می‌کند که عملکرد حافظه سیستم را برای میانگین کل حافظه‌ای که دستگاه‌های اندرویدی معمولا دارند بهینه می‌کند. با شروع Android 15، AOSP از دستگاه هایی پشتیبانی می کند که برای استفاده از اندازه صفحه 16 کیلوبایت (دستگاه های 16 کیلوبایت) پیکربندی شده اند. اگر برنامه شما از کتابخانه های NDK استفاده می کند، چه به طور مستقیم یا غیرمستقیم از طریق یک SDK، باید برنامه خود را بازسازی کنید تا بتواند روی این دستگاه های 16 کیلوبایتی کار کند.

از آنجایی که سازندگان دستگاه‌ها به ساخت دستگاه‌هایی با حافظه فیزیکی (RAM) بیشتر ادامه می‌دهند، بسیاری از این دستگاه‌ها از اندازه صفحه ۱۶ کیلوبایت (و در نهایت بیشتر) برای بهینه‌سازی عملکرد دستگاه استفاده می‌کنند. افزودن پشتیبانی برای دستگاه‌های اندازه صفحه 16 کیلوبایت، برنامه شما را قادر می‌سازد تا در این دستگاه‌ها اجرا شود و به برنامه شما کمک می‌کند از بهبودهای عملکرد مرتبط بهره مند شود. بدون کامپایل مجدد، برنامه ها در نسخه های بعدی اندروید روی دستگاه های 16 کیلوبایتی کار نخواهند کرد.

برای کمک به اضافه کردن پشتیبانی از برنامه خود، راهنمایی هایی در مورد نحوه بررسی اینکه آیا برنامه شما تحت تأثیر قرار گرفته است ، نحوه بازسازی برنامه خود (در صورت وجود) و نحوه آزمایش برنامه خود در یک محیط 16 کیلوبایتی با استفاده از شبیه سازها (از جمله تصاویر سیستم Android 15 برای شبیه ساز Android) را ارائه کرده ایم.

مزایا و افزایش عملکرد

دستگاه هایی که با اندازه صفحه 16 کیلوبایت پیکربندی شده اند به طور متوسط ​​کمی از حافظه بیشتری استفاده می کنند، اما بهبودهای عملکردی مختلفی را برای سیستم و برنامه ها نیز به دست می آورند:

  • زمان‌های راه‌اندازی برنامه کمتر زمانی که سیستم تحت فشار حافظه است: به طور متوسط ​​3.16٪ کمتر، با بهبودهای قابل توجه (تا 30٪) برای برخی از برنامه‌هایی که آزمایش کردیم.
  • کاهش مصرف انرژی در حین راه اندازی برنامه: به طور متوسط ​​4.56٪ کاهش
  • راه‌اندازی سریع‌تر دوربین: به طور متوسط ​​4.48٪ سریع‌تر استارت‌های گرم و 6.60٪ سریع‌تر شروع سرد.
  • بهبود زمان بوت سیستم: به طور متوسط ​​8٪ (تقریباً 950 میلی ثانیه) بهبود یافته است.

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

بررسی کنید که آیا برنامه شما تحت تأثیر قرار گرفته است یا خیر

اگر برنامه شما از هر کد بومی استفاده می کند ، باید برنامه خود را با پشتیبانی از دستگاه های 16 کیلوبایتی بازسازی کنید . اگر مطمئن نیستید که برنامه شما از کد بومی استفاده می‌کند، می‌توانید از APK Analyzer برای شناسایی وجود کد بومی استفاده کنید و سپس تراز بخش‌های ELF را برای کتابخانه‌های مشترکی که پیدا کردید بررسی کنید . Android Studio همچنین ویژگی هایی را ارائه می دهد که به شما کمک می کند تا به طور خودکار مشکلات تراز را تشخیص دهید .

اگر برنامه شما فقط از کدهای نوشته شده به زبان برنامه نویسی جاوا یا کاتلین استفاده می کند که شامل همه کتابخانه ها یا SDK می شود، برنامه شما از قبل از دستگاه های 16 کیلوبایتی پشتیبانی می کند. با این وجود، توصیه می کنیم برنامه خود را در یک محیط 16 کیلوبایتی آزمایش کنید تا مطمئن شوید که هیچ رگرسیون غیرمنتظره ای در رفتار برنامه وجود ندارد.

آیا برنامه شما از کد بومی استفاده می‌کند؟

اگر هر یک از موارد زیر صدق کند، برنامه شما از کد بومی استفاده می‌کند:

  • برنامه شما از هر کد C/C++ (بومی) استفاده می‌کند. اگر برنامه شما از Android NDK استفاده می‌کند، پس برنامه شما از کد بومی استفاده می‌کند.
  • برنامه شما با هر کتابخانه یا وابستگی بومی شخص ثالث (مانند SDK) که از آنها استفاده می‌کند، پیوند برقرار می‌کند.
  • برنامه شما توسط یک سازنده برنامه شخص ثالث ساخته شده است که از کتابخانه‌های بومی روی دستگاه استفاده می‌کند.

شناسایی کتابخانه‌های بومی با استفاده از APK Analyzer

تحلیلگر APK ابزاری است که به شما امکان می‌دهد جنبه‌های مختلف یک APK ساخته شده را ارزیابی کنید. برای بررسی اینکه آیا برنامه شما از کد بومی استفاده می‌کند یا خیر (صرف نظر از اینکه با حجم ۱۶ کیلوبایت سازگار است یا خیر):

  1. اندروید استودیو را باز کنید، سپس روی File > Open کلیک کنید و هر پروژه‌ای را انتخاب کنید.
  2. از نوار منو، روی ساخت > تجزیه و تحلیل APK... کلیک کنید.

    گزینه منوی Studio Build برای اجرای APK Analyzer
  3. APK مورد نظر برای تجزیه و تحلیل را انتخاب کنید.

  4. در صورت وجود، به پوشه lib که میزبان فایل‌های شیء مشترک ( .so ) است، نگاهی بیندازید. اگر فایل‌های شیء مشترک وجود داشته باشد، برنامه شما از کد بومی استفاده می‌کند. ستون Alignment پیام‌های هشدار دهنده‌ای را برای هر فایلی که مشکلات ترازبندی دارد، نمایش می‌دهد. اگر هیچ فایل شیء مشترکی وجود ندارد یا پوشه lib وجود ندارد، برنامه شما از کد بومی استفاده نمی‌کند.

    نمای تحلیلگر APK که نشان می‌دهد فایل‌های شیء مشترک وجود دارند

تشخیص مشکلات ترازبندی با بررسی‌های خودکار

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

اعلان‌های هشدار استودیو در مورد مشکلات ترازبندی در یک پروژه

Lint در اندروید استودیو همچنین کتابخانه‌های بومی که با حجم ۱۶ کیلوبایت هم‌تراز نیستند را هایلایت می‌کند.

هشدار لینتر استودیو در مورد یک کتابخانه بومی غیرهم‌تراز

ترازبندی بخش‌های ELF را برای کتابخانه‌های مشترک بررسی کنید

برای هر کتابخانه اشتراکی، با استفاده از ترازبندی ELF شانزده کیلوبایتی، تأیید کنید که بخش‌های ELF کتابخانه‌های اشتراکی به درستی تراز شده‌اند. اگر در حال توسعه روی لینوکس یا macOS هستید، می‌توانید از اسکریپت check_elf_alignment.sh همانطور که در بخش زیر توضیح داده شده است، استفاده کنید. همچنین می‌توانید مستقیماً از ابزارهای خط فرمان استفاده کنید .

از اسکریپت check_elf_alignment.sh استفاده کنید (لینوکس یا macOS)

برای بررسی ترازبندی بخش‌های ELF با استفاده از اسکریپت check_elf_alignment.sh ، این مراحل را دنبال کنید:

  1. اسکریپت check_elf_alignment.sh را در یک فایل ذخیره کنید.

  2. اسکریپت را روی فایل APK برنامه خود اجرا کنید:

    check_elf_alignment.sh APK_NAME.apk
    

    خروجی اسکریپت برای همه کتابخانه‌های اشتراکی arm64-v8a یا ALIGNED یا UNALIGNED .

  3. اگر هر یک از کتابخانه‌های اشتراکی arm64-v8a یا x86_64 UNALIGNED هستند، باید بسته‌بندی آن کتابخانه‌ها را به‌روزرسانی کنید ، سپس برنامه خود را مجدداً کامپایل کرده و با دنبال کردن مراحل این بخش، دوباره تست کنید.

استفاده مستقیم از ابزارهای خط فرمان

برای بررسی ترازبندی بخش‌های ELF با استفاده مستقیم از ابزارهای خط فرمان، این مراحل را دنبال کنید:

  1. مطمئن شوید که هم Android SDK Build-Tools نسخه 35.0.0 یا بالاتر و هم Android NDK با استفاده از SDK Manager در اندروید استودیو یا ابزار خط فرمان sdkmanager نصب شده باشند.
  2. فایل APK برنامه خود را استخراج کنید:

    لینوکس یا macOS

    unzip APK_NAME.apk -d /tmp/my_apk_out
    

    ویندوز (پاورشل)

    Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_out
    
  3. در دایرکتوری موقتی که فایل APK خود را در آن استخراج کرده‌اید، محتویات دایرکتوری lib را برای فایل‌های شیء مشترک ( .so ) بررسی کنید. این‌ها همان فایل‌های شیء مشترکی هستند که هنگام شناسایی کتابخانه‌های بومی با استفاده از APK Analyzer دیده‌اید. دستور زیر را روی هر فایل شیء مشترک اجرا کنید:

    لینوکس یا macOS

    SDK_ROOT_LOCATION/Android/sdk/ndk/NDK_VERSION/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-objdump -p SHARED_OBJECT_FILE.so | grep LOAD
    

    ویندوز (پاورشل)

    SDK_ROOT_LOCATION\Android\sdk\ndk\NDK_VERSION\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-objdump.exe -p SHARED_OBJECT_FILE.so | Select-String -Pattern "LOAD"
    

    که در آن SDK_ROOT_LOCATION مسیر دایرکتوری است که Android SDK را در آن نصب کرده‌اید، SHARED_OBJECT_FILE نام فایل شیء مشترکی است که بررسی می‌کنید و NDK_VERSION نسخه Android NDK است که نصب کرده‌اید (برای مثال، 28.0.12433566 ). خروجی برای هر فایلی که بررسی می‌کنید چیزی شبیه به زیر خواهد بود:

    LOAD off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**14
    LOAD off    0x0000000000042a90 vaddr 0x0000000000043a90 paddr 0x0000000000043a90 align 2**14
    LOAD off    0x0000000000046230 vaddr 0x0000000000048230 paddr 0x0000000000048230 align 2**14
    
  4. خطوط خروجی را بررسی کنید تا مطمئن شوید که بخش‌های بارگذاری مقادیری کمتر از 2**14 ندارند. اگر هر یک از بخش‌های بارگذاری مقادیر 2**13 ، 2**12 یا کمتر دارند، باید بسته‌بندی آن کتابخانه‌ها را به‌روزرسانی کنید ، سپس برنامه خود را دوباره کامپایل کنید و با دنبال کردن مراحل این بخش، دوباره تست کنید.

  5. در مرحله بعد، ابزار خط فرمان zipalign را روی فایل APK برنامه خود اجرا کنید:

    لینوکس یا macOS

    SDK_ROOT_LOCATION/Android/sdk/build-tools/35.0.0/zipalign -v -c -P 16 4 APK_NAME.apk
    

    ویندوز (پاورشل)

    SDK_ROOT_LOCATION\Android\sdk\build-tools\35.0.0\zipalign.exe -v -c -P 16 4 APK_NAME.apk
    

    که در آن SDK_ROOT_LOCATION مسیر دایرکتوری است که SDK اندروید را در آن نصب کرده‌اید و APK_NAME نام فایل APK برنامه شماست. اگر همه کتابخانه‌های اشتراکی به درستی تراز شده باشند، آخرین خط خروجی عبارت "تأیید موفقیت‌آمیز" را نشان می‌دهد.

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

برنامه خود را با پشتیبانی از دستگاه‌های ۱۶ کیلوبایتی بسازید

اگر برنامه شما از کد بومی استفاده می‌کند، مراحلی را که در بخش‌های زیر ذکر شده است، انجام دهید تا مطمئن شوید که برنامه شما از دستگاه‌های ۱۶ کیلوبایتی پشتیبانی می‌کند:

  1. بسته‌بندی کتابخانه‌های اشتراکی خود را به‌روزرسانی کنید
  2. برنامه خود را با استفاده از ترازبندی ELF با حجم ۱۶ کیلوبایت کامپایل کنید
  3. اصلاح کد و حل مشکلات زمان اجرا
  4. بررسی پشتیبانی SDKها از ۱۶ کیلوبایت

بسته‌بندی کتابخانه‌های اشتراکی خود را به‌روزرسانی کنید

توصیه می‌کنیم که به نسخه AGP 8.5.1 یا بالاتر ارتقا دهید و از کتابخانه‌های اشتراکی غیرفشرده استفاده کنید.

نسخه AGP 8.5.1 یا بالاتر

دستگاه‌های ۱۶ کیلوبایتی برای تراز کردن برنامه‌هایی که با کتابخانه‌های اشتراکی غیرفشرده ارائه می‌شوند، روی یک مرز ۱۶ کیلوبایتی زیپ‌شده به برنامه‌هایی نیاز دارند که آنها را هم‌تراز کند. برای انجام این کار، باید افزونه‌ی اندروید گریدل (AGP) را به نسخه ۸.۵.۱ یا بالاتر ارتقا دهید. برای جزئیات بیشتر در مورد فرآیند ارتقا، به بخش دستیار ارتقاء افزونه‌ی اندروید گریدل مراجعه کنید.

نسخه AGP 8.5 یا پایین‌تر

اگر نمی‌توانید AGP را به نسخه ۸.۵.۱ یا بالاتر ارتقا دهید، راه حل جایگزین این است که از کتابخانه‌های اشتراکی فشرده استفاده کنید. پیکربندی Gradle خود را به‌روزرسانی کنید تا Gradle هنگام بسته‌بندی برنامه، کتابخانه‌های اشتراکی شما را فشرده کند تا از مشکلات نصب برنامه با کتابخانه‌های اشتراکی ناهم‌تراز جلوگیری شود.

گرووی

در فایل build.gradle خود، گزینه زیر را اضافه کنید:

android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging true
      }
  }
}

کاتلین

در فایل build.gradle.kts خود، گزینه زیر را اضافه کنید:

android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging = true
      }
  }
}

برنامه خود را با استفاده از ترازبندی ELF با حجم ۱۶ کیلوبایت کامپایل کنید

دستگاه‌های ۱۶ کیلوبایتی برای اجرای برنامه شما نیاز دارند که بخش‌های ELF کتابخانه‌های اشتراکی با استفاده از ترازبندی ELF ۱۶ کیلوبایتی به درستی تراز شوند.

برای توسعه‌دهندگان بازی، اگر بازی شما با موتور بازی Unity اجرا می‌شود، به راهنمای Unity مراجعه کنید. اگر بازی شما با موتور بازی Unreal اجرا می‌شود، به راهنمای Unreal مراجعه کنید. برای موتورهای بازی native، با این راهنما ادامه دهید.

برای کامپایل برنامه خود با استفاده از ترازبندی ELF با حجم ۱۶ کیلوبایت، بسته به نسخه Android NDK مورد استفاده خود، مراحل یکی از بخش‌های زیر را انجام دهید.

اندروید NDK نسخه r28 و بالاتر

نسخه NDK r28 و بالاتر به طور پیش‌فرض با حجم ۱۶ کیلوبایت کامپایل می‌شود.

اندروید NDK r27

برای پشتیبانی از کامپایل کتابخانه‌های اشتراکی ۱۶ کیلوبایتی با اندروید NDK نسخه r27 و بالاتر، باید پرچم‌های ndk-build ، build.gradle ، build.gradle.kts یا linker خود را به شرح زیر به‌روزرسانی کنید:

ساخت ndk

در Application.mk شما:

APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true

گرووی

در فایل build.gradle خود، آرگومان -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON را تنظیم کنید:

android {
  ...
  defaultConfig {
    ...
    // This block is different from the one you use to link Gradle
    // to your CMake or ndk-build script.
    externalNativeBuild {
      // For ndk-build, instead use the ndkBuild block.
      cmake {
        // Passes optional arguments to CMake.
        arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
      }
    }
  }
}

کاتلین

در فایل build.gradle.kts خود، آرگومان -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON را تنظیم کنید:

android {
  ...
  defaultConfig {
    ...
    // This block is different from the one you use to link Gradle
    // to your CMake or ndk-build script.
    externalNativeBuild {
      // For ndk-build, instead use the ndkBuild block.
      cmake {
        // Passes optional arguments to CMake.
        arguments += listOf("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON")
      }
    }
  }
}

سایر سیستم‌های ساخت

پرچم‌های لینکر زیر را مشخص کنید:

-Wl,-z,max-page-size=16384

اندروید NDK نسخه r26 و پایین‌تر

همیشه NDK خود را به‌روزرسانی کنید. این فقط باید به عنوان آخرین راه حل استفاده شود و هیچ پشتیبانی تضمین شده‌ای وجود ندارد.

برای پشتیبانی از کامپایل کتابخانه‌های اشتراکی ۱۶ کیلوبایتی با اندروید NDK نسخه r26 یا پایین‌تر، باید پیکربندی ndk-build یا cmake خود را به شرح زیر به‌روزرسانی کنید:

ساخت ndk

برای فعال کردن ترازبندی ELF با حجم ۱۶ کیلوبایت، Android.mk خود را به‌روزرسانی کنید:

LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"

سی‌میک

CMakeLists.txt خود را به‌روزرسانی کنید تا ترازبندی ELF با حجم ۱۶ کیلوبایت فعال شود:

target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")

اندروید NDK نسخه r22 و پایین‌تر

همیشه NDK خود را به‌روزرسانی کنید. این فقط باید به عنوان آخرین راه حل استفاده شود و هیچ پشتیبانی تضمین شده‌ای وجود ندارد.

علاوه بر مرحله‌ای که برای NDK r26 و پایین‌تر ذکر شد، اگر از NDK r22 یا پایین‌تر استفاده می‌کنید، باید common-page-size=16384 را تنظیم کنید. تنظیم common-page-size=16384 به دلیل اشکالات موجود در نسخه‌های قبلی لینکرهای GNU ld و LLVM lld الزامی است. این راه حل جایگزین common-page-size فقط در صورتی کار می‌کند که ELF بخش .relro_padding (LLD 18 و جدیدتر) را نیز داشته باشد.

برای کامپایل کتابخانه‌های اشتراکی سازگار با ۱۶ کیلوبایت با اندروید NDK نسخه r22 یا پایین‌تر، پیکربندی ndk-build یا cmake خود را به شرح زیر به‌روزرسانی کنید:

ساخت ndk

Android.mk خود را برای ساخت ELF سازگار با ۱۶ کیلوبایت به‌روزرسانی کنید:

LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
LOCAL_LDFLAGS += "-Wl,-z,common-page-size=16384"

سی‌میک

CMakeLists.txt خود را برای ساخت ELF سازگار با ۱۶ کیلوبایت به‌روزرسانی کنید:

target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,common-page-size=16384")

اصلاح کد و حل مشکلات زمان اجرا

حتی اگر برنامه شما ۱۶ کیلوبایت حجم داشته باشد، اگر بخش‌هایی از کد شما فرض کنند که یک دستگاه از اندازه صفحه خاصی استفاده می‌کند، برنامه شما می‌تواند با خطا مواجه شود. برای جلوگیری از این مشکل، مراحل زیر را انجام دهید:

  1. هرگونه وابستگیِ کدنویسی‌شده‌ی سخت که به ثابت PAGE_SIZE ارجاع می‌دهند یا مواردی در منطق کد شما که فرض می‌کنند اندازه‌ی صفحه‌ی دستگاه ۴ کیلوبایت ( 4096 ) است را حذف کنید.

    به جای آن getpagesize() یا sysconf(_SC_PAGESIZE) استفاده کنید.

  2. به دنبال کاربردهای mmap() و سایر APIهایی باشید که به آرگومان‌های هم‌تراز با صفحه نیاز دارند و در صورت لزوم آنها را با جایگزین‌های مناسب جایگزین کنید.

در برخی موارد، اگر برنامه شما از PAGE_SIZE به عنوان یک مقدار مناسب که به اندازه صفحه اصلی وابسته نیست استفاده کند، این باعث نمی‌شود که برنامه شما هنگام استفاده در حالت ۱۶ کیلوبایت از کار بیفتد. با این حال، اگر این مقدار با mmap و بدون MAP_FIXED به هسته منتقل شود، هسته همچنان از کل صفحه استفاده می‌کند که مقداری از حافظه را هدر می‌دهد. به همین دلایل، PAGE_SIZE هنگام فعال بودن حالت ۱۶ کیلوبایت در NDK r27 و بالاتر تعریف نشده است.

اگر برنامه شما از PAGE_SIZE به این روش استفاده می‌کند و هرگز این مقدار را مستقیماً به هسته ارسال نمی‌کند، به جای استفاده از PAGE_SIZE ، یک متغیر جدید با نام جدید ایجاد کنید تا نشان دهد که برای اهداف دیگری استفاده می‌شود و یک صفحه حافظه واقعی را منعکس نمی‌کند.

بررسی پشتیبانی SDKها از ۱۶ کیلوبایت

بسیاری از SDKها با اندازه صفحات ۱۶ کیلوبایتی سازگار هستند، به خصوص اگر خودتان آنها را بسازید یا از نسخه‌های پیش‌ساخته اخیر استفاده کنید. با این حال، از آنجا که برخی از نسخه‌های پیش‌ساخته SDK یا نسخه‌های SDK با ۱۶ کیلوبایت سازگار نیستند، باید وب‌سایت هر ارائه‌دهنده SDK را بررسی کنید تا مشخص شود از کدام نسخه با ۱۶ کیلوبایت استفاده کنید.

برنامه خود را در یک محیط ۱۶ کیلوبایتی آزمایش کنید

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

  1. SDK اندروید ۱۵ یا بالاتر را نصب کنید.

  2. یکی از محیط‌های آزمایش زیر را تنظیم کنید:

  3. دستگاه آزمایشی خود را راه‌اندازی کنید، سپس دستور زیر را اجرا کنید تا تأیید کنید که از یک محیط ۱۶ کیلوبایتی استفاده می‌کند:

    adb shell getconf PAGE_SIZE
    

    این دستور باید مقدار 16384 را برگرداند.

  4. دستور zipalign زیر را اجرا کنید تا تأیید کنید که برنامه شما 16 کیلوبایت حجم دارد، که در آن APK_NAME نام فایل APK برنامه شماست:

    zipalign -c -P 16 -v 4 APK_NAME.apk
    
  5. برنامه خود را به طور کامل آزمایش کنید، و روی هر بخشی که ممکن است تحت تأثیر تغییر نمونه‌های کدی که به اندازه‌های خاص صفحه اشاره دارند، قرار گیرد، تمرکز کنید.

شبیه‌ساز اندروید را با یک ایمیج سیستمی اندروید ۱۵ مبتنی بر ۱۶ کیلوبایت راه‌اندازی کنید

برای تنظیم یک محیط ۱۶ کیلوبایتی با استفاده از شبیه‌ساز اندروید، مراحل زیر را دنبال کنید:

  1. ایمیج‌های سیستم شبیه‌ساز اندروید ۱۵ مبتنی بر ۱۶ کیلوبایت با اندروید استودیو Jellyfish | 2023.3.1 یا بالاتر سازگار هستند. با این حال، برای بهترین تجربه هنگام کار با دستگاه‌های ۱۶ کیلوبایتی، از اندروید استودیو Ladybug | 2024.2.1 یا بالاتر استفاده کنید.

    ما همیشه روی ویژگی‌های جدید کار می‌کنیم، بنابراین دانلود نسخه‌های جدیدتر یا آخرین نسخه پیش‌نمایش اندروید استودیو را به محض انتشار در نظر بگیرید.

    به یاد داشته باشید که می‌توانید نسخه فعلی اندروید استودیو خود را نصب نگه دارید، زیرا می‌توانید چندین نسخه را در کنار هم نصب کنید .

  2. در اندروید استودیو، روی ابزارها > مدیر SDK کلیک کنید.

  3. در تب SDK Platforms ، گزینه Show Package Details را تیک بزنید، سپس بخش Android VanillaIceCream یا بالاتر را باز کنید و بسته به دستگاه‌های مجازی که می‌خواهید ایجاد کنید، یک یا هر دو تصویر سیستم شبیه‌ساز زیر را انتخاب کنید:

    • تصویر آزمایشی رابط‌های برنامه‌نویسی کاربردی گوگل، ۱۶ کیلوبایت، اندازه صفحه، ARM 64 v8a
    • تصویر آزمایشی رابط‌های برنامه‌نویسی کاربردی گوگل، حجم صفحه ۱۶ کیلوبایت، سیستم اتم اینتل x86_64
    دانلود ایمیج‌های سیستم شبیه‌ساز ۱۶ کیلوبایتی با استفاده از SDK Manager در اندروید استودیو
  4. برای دانلود هر کدام از تصاویر سیستمی که انتخاب کرده‌اید، روی «اعمال» > «تأیید» کلیک کنید.

  5. مراحل راه‌اندازی یک دستگاه مجازی برای اندروید ۱۵ را دنبال کنید و وقتی از شما خواسته شد یک تصویر سیستمی انتخاب کنید، تصویر سیستمی ۱۶ کیلوبایتی را که دانلود کرده‌اید انتخاب کنید. اگر به طور خودکار توصیه نشد، می‌توانید تصویر سیستمی ۱۶ کیلوبایتی را در تب «سایر تصاویر» پیدا کنید.

    تصویر شبیه‌ساز ۱۶ کیلوبایتی را در تب «تصاویر دیگر» پیدا کنید.

مراحل اضافی برای برخی از نسخه‌های شبیه‌ساز و تصاویر سیستم

برای نسخه‌های ۳۵.۱.۵ تا ۳۵.۱.۲۰ شبیه‌ساز اندروید و قبل از نسخه ۴ ایمیج‌های سیستمی اندروید ۱۵.۰ با حجم صفحه ۱۶ کیلوبایت که در SDK Manager ارائه شده‌اند، برای شبیه‌سازی یک محیط ۱۶ کیلوبایتی روی سیستم‌های x86_64، باید مراحل زیر را نیز انجام دهید. این مراحل پس از نسخه ۳۵.۱.۲۱ و با نسخه ۴ ایمیج‌های سیستمی اندروید ۱۵.۰ با حجم صفحه ۱۶ کیلوبایت یا بالاتر مورد نیاز نیستند.

  1. در Device manager، روی سه نقطه کنار تصویر ۱۶ کیلوبایتی کلیک کنید، سپس روی Show on Disk کلیک کنید.
  2. در این پوشه، فایل config.ini را پیدا کنید.
  3. خط زیر را به فایل config.ini اضافه کنید و تغییرات خود را ذخیره کنید:

    kernel.parameters = androidboot.page_shift=14
    
  4. برای تأیید تغییرات، دستور زیر را اجرا کنید که باید 16384 برگرداند:

    adb shell getconf PAGE_SIZE
    

شبیه‌ساز را اجرا کنید

پس از اتمام راه‌اندازی شبیه‌ساز اندروید و دستگاه‌های مجازی، شبیه‌ساز را از منوی دستگاه هدف یا از خط فرمان اجرا کنید.

با استفاده از گزینه های توسعه دهنده، حالت 16 کیلوبایتی را در دستگاهی فعال کنید

گزینه Boot with 16KB page size developer را تغییر دهید تا دستگاه در حالت 16 کیلوبایت بوت شود.

با شروع اندروید 15 QPR1، می‌توانید از گزینه توسعه‌دهنده موجود در دستگاه‌های خاص برای راه‌اندازی دستگاه در حالت 16 کیلوبایتی و انجام تست روی دستگاه استفاده کنید . قبل از استفاده از گزینه توسعه دهنده، به Settings > System > Software updates بروید و هر به روز رسانی موجود را اعمال کنید.

این گزینه توسعه دهنده در دستگاه های زیر موجود است:

  • Pixel 8 و 8 Pro (با Android 15 QPR1 یا بالاتر)

  • Pixel 8a (با Android 15 QPR1 یا بالاتر)

  • Pixel 9، 9 Pro، و 9 Pro XL (با Android 15 QPR2 Beta 2 یا بالاتر)

حالت بک‌کامپایت ۱۶ کیلوبایتی

هشدار در حالت سازگاری اندازه صفحه

هشدار در حالت تطبیق اندازه صفحه

گزینه backcompat 16 کیلوبایتی زمانی در دسترس است که دستگاهی با هسته 16 کیلوبایتی در حال اجرا باشد. مدیر بسته، برنامه‌ای را در حالت backcompat 16 کیلوبایتی اجرا می‌کند، زمانی که شرایط زیر برآورده شود:

  • اگر برنامه دارای فایل‌های ELF (با پسوند .so ) با ترازبندی سگمنت LOAD به اندازه ۴ کیلوبایت باشد.
  • اگر فایل APK فشرده‌شده حاوی فایل‌های ELF غیرفشرده باشد که با فرمت ZIP به حجم ۴ کیلوبایت هم‌تراز شده‌اند.

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

حالت backcompat با حجم ۱۶ کیلوبایت به برخی از برنامه‌ها اجازه کار می‌دهد، اما برای بهترین قابلیت اطمینان و پایداری، برنامه‌ها همچنان باید با حجم ۱۶ کیلوبایت هماهنگ باشند.

در صفحه اطلاعات برنامه، در قسمت پیشرفته (Advanced) ، تنظیمات اجرای برنامه با حالت سازگاری اندازه صفحه (Run app with page size compat mode) را تغییر دهید تا حالت سازگاری ۱۶ کیلوبایتی (۱۶ KB backcompat mode) برای برنامه خاص فعال یا غیرفعال شود. این تنظیم فقط زمانی قابل مشاهده است که دستگاه با اندازه صفحه ۱۶ کیلوبایت در حال اجرا باشد.

تنظیم حالت تطبیق اندازه صفحه

تنظیم حالت تطبیق اندازه صفحه

برای فعال کردن ۱۶ کیلوبایت فضای ذخیره‌سازی Backcompat برای هر برنامه روی دستگاه:

adb shell setprop bionic.linker.16kb.app_compat.enabled true
adb shell setprop pm.16kb.app_compat.disabled false

برای غیرفعال کردن ۱۶ کیلوبایت فضای ذخیره‌سازی پشتیبان برای هر برنامه روی دستگاه:

adb shell setprop bionic.linker.16kb.app_compat.enabled false
adb shell setprop pm.16kb.app_compat.disabled true

برای فعال یا غیرفعال کردن حالت backcompat برای یک برنامه خاص در AndroidManifest.xml ، ویژگی android:pageSizeCompat روی enabled یا disabled تنظیم کنید. وقتی این ویژگی تنظیم شود، برنامه هنگام راه‌اندازی هشدارهای حالت backcompat را نمایش نمی‌دهد.

الزامات سازگاری با گوگل پلی

از آنجایی که تولیدکنندگان دستگاه‌ها، دستگاه‌های خود را به رم بیشتری برای بهینه‌سازی عملکرد مجهز می‌کنند، بسیاری از آنها اندازه صفحات بزرگتری مانند ۱۶ کیلوبایت را اتخاذ خواهند کرد. برای آماده‌سازی برای عرضه این دستگاه‌های آینده، گوگل پلی یک الزام سازگاری جدید را معرفی می‌کند: از اول نوامبر ۲۰۲۵، همه برنامه‌های جدید و به‌روزرسانی‌های برنامه‌های موجود که به گوگل پلی ارسال می‌شوند و دستگاه‌هایی را هدف قرار می‌دهند که اندروید ۱۵ (سطح API ۳۵) و بالاتر را اجرا می‌کنند، باید از اندازه صفحات ۱۶ کیلوبایت پشتیبانی کنند.

برای مطالعه بیشتر در مورد این الزام سازگاری، به این پست وبلاگ مراجعه کنید.