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

16 کیلوبایت مورد نیاز سازگاری با Google Play
از اول نوامبر ۲۰۲۵، همه برنامه‌های جدید و به‌روزرسانی‌های برنامه‌های موجود که به Google Play ارسال می‌شوند و دستگاه‌های Android 15 و بالاتر را هدف قرار می‌دهند، باید از اندازه صفحه 16 کیلوبایت پشتیبانی کنند.

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

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

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

مزایا و دستاوردهای عملکرد

Devices configured with 16 KB page sizes use slightly more memory on average, but also gain various performance improvements for both the system and apps:

  • Lower app launch times while the system is under memory pressure: 3.16% lower on average, with more significant improvements (up to 30%) for some apps that we tested
  • Reduced power draw during app launch: 4.56% reduction on average
  • Faster camera launch: 4.48% faster hot starts on average, and 6.60% faster cold starts on average
  • Improved system boot time: improved by 8% (approximately 950 milliseconds) on average

These improvements are based on our initial testing, and results on actual devices will likely differ. We'll provide additional analysis of potential gains for apps as we continue our testing.

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

If your app uses any native code, then you should rebuild your app with support for 16 KB devices. If you are unsure if your app uses native code, you can use the APK Analyzer to identify whether any native code is present and then check the alignment of ELF segments for any shared libraries that you find.

If your app only uses code written in the Java programming language or in Kotlin, including all libraries or SDKs, then your app already supports 16 KB devices. Nevertheless, we recommend that you test your app in a 16 KB environment to verify that there are no unexpected regressions in app behavior.

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

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

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

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

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

  1. Android Studio را باز کنید، سپس روی File > Open کلیک کنید و هر پروژه را انتخاب کنید.
  2. از نوار منو، روی Build > Analyze APK کلیک کنید...

    گزینه منوی Studio Build برای راه اندازی APK آنالایزر

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

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

    نمای APK Analyzer که نشان می دهد فایل های اشیاء مشترک هستند حاضر

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

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

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

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

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

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

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

    لینوکس یا macOS

    unzip APK_NAME.apk -d /tmp/my_apk_out
    

    ویندوز (PowerShell)

    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
    

    ویندوز (PowerShell)

    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 نسخه NDK Android است که نصب کرده‌اید (به عنوان مثال، 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
    

    ویندوز (PowerShell)

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

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

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

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

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

  1. بسته بندی کتابخانه های مشترک خود را به روز کنید
  2. برنامه خود را با استفاده از تراز ELF 16 کیلوبایتی کامپایل کنید
  3. رفع کد و رفع مشکلات زمان اجرا
  4. SDK ها را برای پشتیبانی 16 کیلوبایت بررسی کنید

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

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

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

دستگاه‌های 16 کیلوبایتی به برنامه‌هایی نیاز دارند که با کتابخانه‌های اشتراک‌گذاری‌شده فشرده‌نشده ارسال شوند تا آن‌ها را روی یک مرز زیپ تراز شده 16 کیلوبایتی تراز کنند. برای انجام این کار، باید به Android Gradle Plugin (AGP) نسخه 8.5.1 یا بالاتر ارتقا دهید. برای جزئیات بیشتر در مورد فرآیند ارتقا، به بخش ارتقاء پلاگین Android Gradle مراجعه کنید.

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

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

شیار

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

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

کاتلین

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

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

برنامه خود را با استفاده از تراز ELF 16 کیلوبایتی کامپایل کنید

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

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

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

اندروید NDK r28 و بالاتر

NDK نسخه r28 و بالاتر 16 کیلوبایت را به صورت پیش فرض کامپایل می کند.

اندروید NDK r27

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

ndk-build

در 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 و پایین تر

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

ndk-build

Android.mk خود را برای فعال کردن تراز ELF 16 کیلوبایتی به روز کنید:

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

CMake

CMakeLists.txt خود را برای فعال کردن تراز ELF 16 کیلوبایتی به روز کنید:

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

رفع کد و رفع مشکلات زمان اجرا

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

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

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

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

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

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

SDK ها را برای پشتیبانی 16 کیلوبایت بررسی کنید

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

برنامه خود را در یک محیط 16 کیلوبایتی تست کنید

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

  1. Android 15 SDK را تنظیم کنید .

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

  3. دستگاه تست خود را راه اندازی کنید، سپس دستور زیر را اجرا کنید تا مطمئن شوید که از یک محیط 16 کیلوبایتی استفاده می کند:

    adb shell getconf PAGE_SIZE
    

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

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

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

شبیه ساز Android را با یک تصویر سیستم Android 15 مبتنی بر 16 کیلوبایت تنظیم کنید

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

  1. تصاویر سیستم شبیه ساز اندروید 15 مبتنی بر 16 کیلوبایت با اندروید استودیو Jellyfish سازگار است | 2023.3.1 یا بالاتر. با این حال، برای بهترین تجربه هنگام کار با دستگاه های 16 کیلوبایتی، از Android Studio Ladybug | استفاده کنید 2024.2.1 یا بالاتر.

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

    به یاد داشته باشید که می‌توانید نسخه موجود Android Studio خود را نصب کنید، زیرا می‌توانید چندین نسخه را در کنار هم نصب کنید .

  2. در Android Studio، روی Tools > SDK Manager کلیک کنید.

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

    • Google APIs Experimental 16 KB Size Page ARM 64 v8a System Image
    • Google APIs Experimental 16 KB Size Page Intel x86_64 Atom System Image

    دانلود تصاویر سیستم شبیه ساز 16 کیلوبایتی با استفاده از SDK Manager در اندروید     استودیو

  4. روی Apply > OK کلیک کنید تا هر کدام از تصاویر سیستمی را که انتخاب کرده اید دانلود کنید.

  5. مراحل راه اندازی یک دستگاه مجازی برای Android 15 را دنبال کنید و هنگامی که از شما خواسته شد یک تصویر سیستم را انتخاب کنید، تصویر سیستمی 16 کیلوبایتی را که دانلود کرده اید انتخاب کنید. اگر به طور خودکار توصیه نمی شود، می توانید تصویر سیستم 16 کیلوبایتی را در برگه سایر تصاویر پیدا کنید.

    تصویر شبیه ساز 16 کیلوبایتی را در سایر تصاویر پیدا کنید برگه

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

برای شبیه ساز اندروید نسخه های 35.1.5 تا 35.1.20 و قبل از ویرایش 4 از تصاویر سیستم Android 15.0 16 KB با حجم صفحه ارائه شده در SDK Manager، برای شبیه سازی یک محیط 16 کیلوبایتی در سیستم های x86_64، باید مراحل زیر را نیز انجام دهید. این مراحل بعد از نسخه 35.1.21 و با ویرایش 4 از تصاویر سیستم Android 15.0 16 KB با اندازه صفحه یا نسخه های جدیدتر مورد نیاز نیست.

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

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

    adb shell getconf PAGE_SIZE
    

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

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

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

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

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

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

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

    هشدار : به دلیل یک مشکل شناخته شده با Android 15 QPR2 Beta 3 ، صفحه لمسی پس از نصب Android 15 QPR2 Beta 3 و بوت شدن دستگاه در حالت 16 کیلوبایت، روی دستگاه‌های پیکسل 8 کار نمی‌کند. این مشکل بر دستگاه‌های Pixel 8 Pro تأثیری نمی‌گذارد.

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

    هشدار : به دلیل یک مشکل شناخته شده با Android 15 QPR2 Beta 3 ، پس از نصب Android 15 QPR2 Beta 3 و بوت شدن دستگاه در حالت 16 کیلوبایت، صفحه لمسی در دستگاه‌های Pixel 8a کار نمی‌کند.

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

الزامات سازگاری Google Play

از آنجایی که سازندگان دستگاه‌ها را برای بهینه‌سازی عملکرد دستگاه‌ها را با رم بیشتری تجهیز می‌کنند، بسیاری از آنها اندازه‌های صفحه بزرگ‌تری مانند 16 کیلوبایت را انتخاب می‌کنند. برای آماده‌سازی راه‌اندازی این دستگاه‌های آینده، Google Play یک الزام سازگاری برای همه برنامه‌های جدید و به‌روزرسانی‌های برنامه‌های موجود و هدف قرار دادن دستگاه‌های Android 15+ برای پشتیبانی از اندازه صفحه 16 کیلوبایت از اول نوامبر 2025 معرفی شده است.

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

،
16 کیلوبایت مورد نیاز سازگاری با Google Play
از اول نوامبر ۲۰۲۵، همه برنامه‌های جدید و به‌روزرسانی‌های برنامه‌های موجود که به Google Play ارسال می‌شوند و دستگاه‌های Android 15 و بالاتر را هدف قرار می‌دهند، باید از اندازه صفحه 16 کیلوبایت پشتیبانی کنند.

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

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

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

مزایا و دستاوردهای عملکرد

Devices configured with 16 KB page sizes use slightly more memory on average, but also gain various performance improvements for both the system and apps:

  • Lower app launch times while the system is under memory pressure: 3.16% lower on average, with more significant improvements (up to 30%) for some apps that we tested
  • Reduced power draw during app launch: 4.56% reduction on average
  • Faster camera launch: 4.48% faster hot starts on average, and 6.60% faster cold starts on average
  • Improved system boot time: improved by 8% (approximately 950 milliseconds) on average

These improvements are based on our initial testing, and results on actual devices will likely differ. We'll provide additional analysis of potential gains for apps as we continue our testing.

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

If your app uses any native code, then you should rebuild your app with support for 16 KB devices. If you are unsure if your app uses native code, you can use the APK Analyzer to identify whether any native code is present and then check the alignment of ELF segments for any shared libraries that you find.

If your app only uses code written in the Java programming language or in Kotlin, including all libraries or SDKs, then your app already supports 16 KB devices. Nevertheless, we recommend that you test your app in a 16 KB environment to verify that there are no unexpected regressions in app behavior.

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

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

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

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

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

  1. Android Studio را باز کنید، سپس روی File > Open کلیک کنید و هر پروژه را انتخاب کنید.
  2. از نوار منو، روی Build > Analyze APK کلیک کنید...

    گزینه منوی Studio Build برای راه اندازی APK آنالایزر

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

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

    نمای APK Analyzer که نشان می دهد فایل های اشیاء مشترک هستند حاضر

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

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

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

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

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

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

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

    لینوکس یا macOS

    unzip APK_NAME.apk -d /tmp/my_apk_out
    

    ویندوز (PowerShell)

    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
    

    ویندوز (PowerShell)

    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 نسخه NDK Android است که نصب کرده‌اید (به عنوان مثال، 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
    

    ویندوز (PowerShell)

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

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

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

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

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

  1. بسته بندی کتابخانه های مشترک خود را به روز کنید
  2. برنامه خود را با استفاده از تراز ELF 16 کیلوبایتی کامپایل کنید
  3. رفع کد و رفع مشکلات زمان اجرا
  4. SDK ها را برای پشتیبانی 16 کیلوبایت بررسی کنید

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

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

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

دستگاه‌های 16 کیلوبایتی به برنامه‌هایی نیاز دارند که با کتابخانه‌های اشتراک‌گذاری‌شده فشرده‌نشده ارسال شوند تا آن‌ها را روی یک مرز زیپ تراز شده 16 کیلوبایتی تراز کنند. برای انجام این کار، باید به Android Gradle Plugin (AGP) نسخه 8.5.1 یا بالاتر ارتقا دهید. برای جزئیات بیشتر در مورد فرآیند ارتقا، به بخش ارتقاء پلاگین Android Gradle مراجعه کنید.

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

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

شیار

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

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

کاتلین

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

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

برنامه خود را با استفاده از تراز ELF 16 کیلوبایتی کامپایل کنید

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

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

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

اندروید NDK r28 و بالاتر

NDK نسخه r28 و بالاتر 16 کیلوبایت را به صورت پیش فرض کامپایل می کند.

اندروید NDK r27

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

ndk-build

در 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 و پایین تر

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

ndk-build

Android.mk خود را برای فعال کردن تراز ELF 16 کیلوبایتی به روز کنید:

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

CMake

CMakeLists.txt خود را برای فعال کردن تراز ELF 16 کیلوبایتی به روز کنید:

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

رفع کد و رفع مشکلات زمان اجرا

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

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

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

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

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

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

SDK ها را برای پشتیبانی 16 کیلوبایت بررسی کنید

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

برنامه خود را در یک محیط 16 کیلوبایتی تست کنید

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

  1. Android 15 SDK را تنظیم کنید .

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

  3. دستگاه تست خود را راه اندازی کنید، سپس دستور زیر را اجرا کنید تا مطمئن شوید که از یک محیط 16 کیلوبایتی استفاده می کند:

    adb shell getconf PAGE_SIZE
    

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

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

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

شبیه ساز Android را با یک تصویر سیستم Android 15 مبتنی بر 16 کیلوبایت تنظیم کنید

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

  1. تصاویر سیستم شبیه ساز اندروید 15 مبتنی بر 16 کیلوبایت با اندروید استودیو Jellyfish سازگار است | 2023.3.1 یا بالاتر. با این حال، برای بهترین تجربه هنگام کار با دستگاه های 16 کیلوبایتی، از Android Studio Ladybug | استفاده کنید 2024.2.1 یا بالاتر.

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

    به یاد داشته باشید که می‌توانید نسخه موجود Android Studio خود را نصب کنید، زیرا می‌توانید چندین نسخه را در کنار هم نصب کنید .

  2. در Android Studio، روی Tools > SDK Manager کلیک کنید.

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

    • Google APIs Experimental 16 KB Size Page ARM 64 v8a System Image
    • Google APIs Experimental 16 KB Size Page Intel x86_64 Atom System Image

    دانلود تصاویر سیستم شبیه ساز 16 کیلوبایتی با استفاده از SDK Manager در اندروید     استودیو

  4. روی Apply > OK کلیک کنید تا هر کدام از تصاویر سیستمی را که انتخاب کرده اید دانلود کنید.

  5. مراحل راه اندازی یک دستگاه مجازی برای Android 15 را دنبال کنید و هنگامی که از شما خواسته شد یک تصویر سیستم را انتخاب کنید، تصویر سیستمی 16 کیلوبایتی را که دانلود کرده اید انتخاب کنید. اگر به طور خودکار توصیه نمی شود، می توانید تصویر سیستم 16 کیلوبایتی را در برگه سایر تصاویر پیدا کنید.

    تصویر شبیه ساز 16 کیلوبایتی را در سایر تصاویر پیدا کنید برگه

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

برای شبیه ساز اندروید نسخه های 35.1.5 تا 35.1.20 و قبل از ویرایش 4 از تصاویر سیستم Android 15.0 16 KB با حجم صفحه ارائه شده در SDK Manager، برای شبیه سازی یک محیط 16 کیلوبایتی در سیستم های x86_64، باید مراحل زیر را نیز انجام دهید. این مراحل بعد از نسخه 35.1.21 و با ویرایش 4 از تصاویر سیستم Android 15.0 16 KB با اندازه صفحه یا نسخه های جدیدتر مورد نیاز نیست.

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

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

    adb shell getconf PAGE_SIZE
    

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

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

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

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

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

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

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

    هشدار : به دلیل یک مشکل شناخته شده با Android 15 QPR2 Beta 3 ، صفحه لمسی پس از نصب Android 15 QPR2 Beta 3 و بوت شدن دستگاه در حالت 16 کیلوبایت، روی دستگاه‌های پیکسل 8 کار نمی‌کند. این مشکل بر دستگاه‌های Pixel 8 Pro تأثیری نمی‌گذارد.

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

    هشدار : به دلیل یک مشکل شناخته شده با Android 15 QPR2 Beta 3 ، پس از نصب Android 15 QPR2 Beta 3 و بوت شدن دستگاه در حالت 16 کیلوبایت، صفحه لمسی در دستگاه‌های Pixel 8a کار نمی‌کند.

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

الزامات سازگاری Google Play

از آنجایی که سازندگان دستگاه‌ها را برای بهینه‌سازی عملکرد دستگاه‌ها را با رم بیشتری تجهیز می‌کنند، بسیاری از آنها اندازه‌های صفحه بزرگ‌تری مانند 16 کیلوبایت را انتخاب می‌کنند. برای آماده‌سازی راه‌اندازی این دستگاه‌های آینده، Google Play یک الزام سازگاری برای همه برنامه‌های جدید و به‌روزرسانی‌های برنامه‌های موجود و هدف قرار دادن دستگاه‌های Android 15+ برای پشتیبانی از اندازه صفحه 16 کیلوبایت از اول نوامبر 2025 معرفی شده است.

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

،
16 کیلوبایت مورد نیاز سازگاری با Google Play
از اول نوامبر ۲۰۲۵، همه برنامه‌های جدید و به‌روزرسانی‌های برنامه‌های موجود که به Google Play ارسال می‌شوند و دستگاه‌های Android 15 و بالاتر را هدف قرار می‌دهند، باید از اندازه صفحه 16 کیلوبایت پشتیبانی کنند.

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

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

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

مزایا و دستاوردهای عملکرد

Devices configured with 16 KB page sizes use slightly more memory on average, but also gain various performance improvements for both the system and apps:

  • Lower app launch times while the system is under memory pressure: 3.16% lower on average, with more significant improvements (up to 30%) for some apps that we tested
  • Reduced power draw during app launch: 4.56% reduction on average
  • Faster camera launch: 4.48% faster hot starts on average, and 6.60% faster cold starts on average
  • Improved system boot time: improved by 8% (approximately 950 milliseconds) on average

These improvements are based on our initial testing, and results on actual devices will likely differ. We'll provide additional analysis of potential gains for apps as we continue our testing.

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

If your app uses any native code, then you should rebuild your app with support for 16 KB devices. If you are unsure if your app uses native code, you can use the APK Analyzer to identify whether any native code is present and then check the alignment of ELF segments for any shared libraries that you find.

If your app only uses code written in the Java programming language or in Kotlin, including all libraries or SDKs, then your app already supports 16 KB devices. Nevertheless, we recommend that you test your app in a 16 KB environment to verify that there are no unexpected regressions in app behavior.

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

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

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

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

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

  1. Android Studio را باز کنید، سپس روی File > Open کلیک کنید و هر پروژه را انتخاب کنید.
  2. از نوار منو، روی Build > Analyze APK کلیک کنید...

    گزینه منوی ساخت استودیو برای راه اندازی APK آنالایزر

  3. APK را که می خواهید تجزیه و تحلیل کنید انتخاب کنید.

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

    نمای آنالایزر APK نشان می دهد که پرونده های شیء مشترک هستند حاضر

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

برای هر کتابخانه مشترک ، تأیید کنید که بخش های ELF کتابخانه های مشترک با استفاده از تراز 16 KB ELF به درستی تراز شده اند. اگر در Linux یا 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 در Android Studio یا sdkmanager Line Line نصب شده است.
  2. پرونده APK برنامه خود را استخراج کنید:

    لینوکس یا macOS

    unzip APK_NAME.apk -d /tmp/my_apk_out
    

    ویندوز (PowerShell)

    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
    

    ویندوز (PowerShell)

    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
    

    ویندوز (PowerShell)

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

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

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

برنامه خود را با پشتیبانی از 16 دستگاه KB بسازید

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

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

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

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

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

دستگاه های 16 KB به برنامه هایی نیاز دارند که با کتابخانه های مشترک فشرده حمل نمی شوند تا آنها را در یک مرز با زیپ 16 کیلوبایت تراز کنند. برای انجام این کار ، باید نسخه 8.5.1 یا بالاتر را به افزونه Android Gradle (AGP) ارتقا دهید. برای جزئیات بیشتر در مورد فرآیند ارتقاء ، به بخش دستیار ارتقاء افزونه Android مراجعه کنید.

نسخه AGP 8.5 یا پایین

اگر نمی توانید AGP را به نسخه 8.5.1 یا بالاتر ارتقا دهید ، جایگزین این است که برای استفاده از کتابخانه های مشترک فشرده تغییر دهید. پیکربندی Gradle خود را به روز کنید تا Gradle کتابخانه های مشترک خود را هنگام بسته بندی برنامه خود فشرده کنید تا از مشکلات نصب برنامه با کتابخانه های مشترک بدون طراحی جلوگیری کنید.

شیار

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

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

کاتلین

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

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

برنامه خود را با استفاده از تراز 16 کیلوبایت ELF کامپایل کنید

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

برای توسعه دهندگان بازی ، اگر بازی شما در بالای موتور بازی وحدت اجرا شود ، به راهنمای وحدت مراجعه کنید. اگر بازی شما در بالای موتور بازی غیر واقعی اجرا می شود ، به راهنمای Unreal مراجعه کنید. برای موتورهای بازی بومی ، با این راهنما ادامه دهید.

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

Android NDK R28 و بالاتر

نسخه NDK R28 و کامپایل بالاتر 16 KB-Aliged به طور پیش فرض.

Android NDK R27

برای پشتیبانی از تدوین کتابخانه های مشترک 16 کیلوبایت با نسخه Android NDK R27 و بالاتر ، باید پرچم های ndk-build ، build.gradle ، build.gradle.kts یا Linker را به شرح زیر به روز کنید:

NDK-Build

در Application.mk خود. 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

Android NDK R26 و پایین

برای پشتیبانی از تدوین کتابخانه های مشترک با هماهنگ 16 کیلوبایت با نسخه Android NDK R26 یا پایین تر ، باید پیکربندی ndk-build یا cmake خود را به شرح زیر به روز کنید:

NDK-Build

Android.mk خود را به روز کنید تا 16 کیلوبایت ELF تراز را فعال کنید:

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

CMake

CMakeLists.txt خود را به روز کنید تا 16 kb elf alignment را فعال کنید:

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

کد را برطرف کنید و مشکلات زمان اجرا را حل کنید

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

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

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

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

در بعضی موارد ، اگر برنامه شما PAGE_SIZE به عنوان یک مقدار مناسب استفاده کند که به اندازه صفحه زیرین گره خورده باشد ، این باعث نمی شود که برنامه شما هنگام استفاده در حالت 16 کیلوبایت شکسته شود. با این حال ، اگر این مقدار با mmap بدون MAP_FIXED به هسته منتقل شود ، هسته هنوز هم از یک صفحه کامل استفاده می کند که برخی از حافظه ها را هدر می دهد. به همین دلایل ، هنگامی که حالت 16 کیلوبایت در NDK R27 و بالاتر فعال شود ، PAGE_SIZE تعریف نشده است.

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

SDK ها را برای پشتیبانی 16 کیلوبایت بررسی کنید

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

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

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

  1. Android 15 SDK را تنظیم کنید .

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

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

    adb shell getconf PAGE_SIZE
    

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

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

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

Android Emulator را با یک تصویر سیستم 16 کیلوبایت مبتنی بر Android 15 تنظیم کنید

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

  1. تصاویر سیستم شبیه ساز 15 مبتنی بر 16 KB ، Android 15 با Android Studio Jellyfish | 2023.3.1 یا بالاتر. با این حال ، برای بهترین تجربه در هنگام کار با دستگاه 16 کیلوبایت ، از Android Studio LadyBug | 2024.2.1 یا بالاتر.

    ما همیشه روی ویژگی های جدید کار می کنیم ، بنابراین بارگیری نسخه های جدیدتر یا آخرین نسخه پیش نمایش Android Studio را در دسترس قرار دهید.

    به یاد داشته باشید که می توانید نسخه موجود Android Studio خود را نصب کنید ، زیرا می توانید چندین نسخه را به صورت جانبی نصب کنید .

  2. در Android Studio ، روی Tools> SDK Manager کلیک کنید.

  3. در برگه SDK Platforms ، جزئیات بسته بندی را بررسی کنید ، سپس بخش Android Vanillaicecream یا بالاتر را گسترش داده و بسته به دستگاه های مجازی که می خواهید ایجاد کنید ، یکی یا هر دو تصویر سیستم شبیه ساز زیر را انتخاب کنید:

    • Google API های آزمایشی 16 کیلوبایت اندازه صفحه 64 V8A تصویر سیستم
    • Google API های آزمایشی 16 کیلوبایت اندازه صفحه Intel x86_64 تصویر سیستم اتم

    16 KB Emulator System Images را با استفاده از SDK Manager در Android بارگیری کنید     استودیو

  4. برای بارگیری هر کدام از سیستم های سیستم انتخاب شده ، روی Apply> OK کلیک کنید.

  5. مراحل تنظیم یک دستگاه مجازی را برای Android 15 دنبال کنید و در صورت درخواست انتخاب یک تصویر سیستم ، تصویر سیستم 16 KB را که بارگیری کرده اید انتخاب کنید. اگر به صورت خودکار توصیه نشود ، می توانید تصویر سیستم 16 KB را در برگه دیگر تصاویر پیدا کنید.

    تصویر شبیه ساز 16 کیلوبایت را در تصاویر دیگر پیدا کنید برگه

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

برای نسخه های Android Emulator 35.1.5 تا 35.1.20 ، و قبل از تجدید نظر 4 تصاویر سیستم اندازه صفحه Android 15.0 16 KB که در مدیر SDK ارائه شده است ، برای شبیه سازی یک محیط 16 کیلوبایت در سیستم های x86_64 ، شما همچنین باید مراحل زیر را انجام دهید. این مراحل پس از نسخه 35.1.21 مورد نیاز نیست ، و با تجدید نظر 4 تصاویر سیستم اندازه صفحه 15.0 16 KB یا بعداً.

  1. در مدیر دستگاه ، روی 3 نقطه کنار تصویر 16 کیلوبایت کلیک کنید ، سپس روی نمایش روی دیسک کلیک کنید.
  2. در این پوشه ، پرونده config.ini پیدا کنید.
  3. خط زیر را به پرونده config.ini اضافه کرده و تغییرات خود را ذخیره کنید:

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

    adb shell getconf PAGE_SIZE
    

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

بعد از اتمام تنظیمات Android Emulator و دستگاه های مجازی ، Emulator را از منوی Target Teartine یا از خط فرمان راه اندازی کنید.

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

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

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

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

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

    هشدار : به دلیل یک مشکل شناخته شده با Android 15 QPR2 Beta 3 ، صفحه لمسی پس از نصب Android 15 QPR2 Beta 3 و بوت شدن دستگاه در حالت 16 کیلوبایت، روی دستگاه‌های پیکسل 8 کار نمی‌کند. این مشکل بر دستگاه‌های Pixel 8 Pro تأثیری نمی‌گذارد.

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

    هشدار : به دلیل یک مشکل شناخته شده با Android 15 QPR2 Beta 3 ، پس از نصب Android 15 QPR2 Beta 3 و بوت شدن دستگاه در حالت 16 کیلوبایت، صفحه لمسی در دستگاه‌های Pixel 8a کار نمی‌کند.

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

Google Play الزامات سازگاری

از آنجا که تولید کنندگان دستگاه دستگاه هایی را به RAM بیشتری برای بهینه سازی عملکرد مجهز می کنند ، بسیاری از آنها اندازه صفحه بزرگتر مانند 16 کیلوبایت را اتخاذ می کنند. برای تهیه راه اندازی این دستگاه های آینده ، Google Play یک الزام سازگاری برای کلیه برنامه های جدید و به روزرسانی برنامه های موجود و هدف قرار دادن دستگاه های Android 15+ برای پشتیبانی از اندازه صفحه 16 کیلوبایت از اول نوامبر 2025 معرفی شده است.

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

،
16 KB Google Play الزامات سازگاری
از اول نوامبر 2025 ، کلیه برنامه ها و به روزرسانی های جدید در برنامه های موجود به Google Play و هدف قرار دادن دستگاه های Android 15+ باید از اندازه صفحه 16 کیلوبایت پشتیبانی کنند.

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

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

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

مزایا و سود عملکرد

Devices configured with 16 KB page sizes use slightly more memory on average, but also gain various performance improvements for both the system and apps:

  • Lower app launch times while the system is under memory pressure: 3.16% lower on average, with more significant improvements (up to 30%) for some apps that we tested
  • Reduced power draw during app launch: 4.56% reduction on average
  • Faster camera launch: 4.48% faster hot starts on average, and 6.60% faster cold starts on average
  • Improved system boot time: improved by 8% (approximately 950 milliseconds) on average

These improvements are based on our initial testing, and results on actual devices will likely differ. We'll provide additional analysis of potential gains for apps as we continue our testing.

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

If your app uses any native code, then you should rebuild your app with support for 16 KB devices. If you are unsure if your app uses native code, you can use the APK Analyzer to identify whether any native code is present and then check the alignment of ELF segments for any shared libraries that you find.

If your app only uses code written in the Java programming language or in Kotlin, including all libraries or SDKs, then your app already supports 16 KB devices. Nevertheless, we recommend that you test your app in a 16 KB environment to verify that there are no unexpected regressions in app behavior.

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

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

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

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

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

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

    گزینه منوی ساخت استودیو برای راه اندازی APK آنالایزر

  3. APK را که می خواهید تجزیه و تحلیل کنید انتخاب کنید.

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

    نمای آنالایزر APK نشان می دهد که پرونده های شیء مشترک هستند حاضر

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

برای هر کتابخانه مشترک ، تأیید کنید که بخش های ELF کتابخانه های مشترک با استفاده از تراز 16 KB ELF به درستی تراز شده اند. اگر در Linux یا 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 در Android Studio یا sdkmanager Line Line نصب شده است.
  2. پرونده APK برنامه خود را استخراج کنید:

    لینوکس یا macOS

    unzip APK_NAME.apk -d /tmp/my_apk_out
    

    ویندوز (PowerShell)

    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
    

    ویندوز (PowerShell)

    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
    

    ویندوز (PowerShell)

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

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

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

برنامه خود را با پشتیبانی از 16 دستگاه KB بسازید

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

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

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

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

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

دستگاه های 16 KB به برنامه هایی نیاز دارند که با کتابخانه های مشترک فشرده حمل نمی شوند تا آنها را در یک مرز با زیپ 16 کیلوبایت تراز کنند. برای انجام این کار ، باید نسخه 8.5.1 یا بالاتر را به افزونه Android Gradle (AGP) ارتقا دهید. برای جزئیات بیشتر در مورد فرآیند ارتقاء ، به بخش دستیار ارتقاء افزونه Android مراجعه کنید.

نسخه AGP 8.5 یا پایین

اگر نمی توانید AGP را به نسخه 8.5.1 یا بالاتر ارتقا دهید ، جایگزین این است که برای استفاده از کتابخانه های مشترک فشرده تغییر دهید. پیکربندی Gradle خود را به روز کنید تا Gradle کتابخانه های مشترک خود را هنگام بسته بندی برنامه خود فشرده کنید تا از مشکلات نصب برنامه با کتابخانه های مشترک بدون طراحی جلوگیری کنید.

شیار

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

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

کاتلین

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

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

برنامه خود را با استفاده از تراز 16 کیلوبایت ELF کامپایل کنید

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

برای توسعه دهندگان بازی ، اگر بازی شما در بالای موتور بازی وحدت اجرا شود ، به راهنمای وحدت مراجعه کنید. اگر بازی شما در بالای موتور بازی غیر واقعی اجرا می شود ، به راهنمای Unreal مراجعه کنید. برای موتورهای بازی بومی ، با این راهنما ادامه دهید.

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

Android NDK R28 و بالاتر

نسخه NDK R28 و کامپایل بالاتر 16 KB-Aliged به طور پیش فرض.

Android NDK R27

برای پشتیبانی از تدوین کتابخانه های مشترک 16 کیلوبایت با نسخه Android NDK R27 و بالاتر ، باید پرچم های ndk-build ، build.gradle ، build.gradle.kts یا Linker را به شرح زیر به روز کنید:

NDK-Build

در Application.mk خود. 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

Android NDK R26 و پایین

برای پشتیبانی از تدوین کتابخانه های مشترک با هماهنگ 16 کیلوبایت با نسخه Android NDK R26 یا پایین تر ، باید پیکربندی ndk-build یا cmake خود را به شرح زیر به روز کنید:

NDK-Build

Android.mk خود را به روز کنید تا 16 کیلوبایت ELF تراز را فعال کنید:

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

CMake

CMakeLists.txt خود را به روز کنید تا 16 kb elf alignment را فعال کنید:

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

کد را برطرف کنید و مشکلات زمان اجرا را حل کنید

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

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

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

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

در بعضی موارد ، اگر برنامه شما PAGE_SIZE به عنوان یک مقدار مناسب استفاده کند که به اندازه صفحه زیرین گره خورده باشد ، این باعث نمی شود که برنامه شما هنگام استفاده در حالت 16 کیلوبایت شکسته شود. با این حال ، اگر این مقدار با mmap بدون MAP_FIXED به هسته منتقل شود ، هسته هنوز هم از یک صفحه کامل استفاده می کند که برخی از حافظه ها را هدر می دهد. به همین دلایل ، هنگامی که حالت 16 کیلوبایت در NDK R27 و بالاتر فعال شود ، PAGE_SIZE تعریف نشده است.

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

SDK ها را برای پشتیبانی 16 کیلوبایت بررسی کنید

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

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

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

  1. Android 15 SDK را تنظیم کنید .

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

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

    adb shell getconf PAGE_SIZE
    

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

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

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

Android Emulator را با یک تصویر سیستم 16 کیلوبایت مبتنی بر Android 15 تنظیم کنید

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

  1. تصاویر سیستم شبیه ساز 15 مبتنی بر 16 KB ، Android 15 با Android Studio Jellyfish | 2023.3.1 یا بالاتر. با این حال ، برای بهترین تجربه در هنگام کار با دستگاه 16 کیلوبایت ، از Android Studio LadyBug | 2024.2.1 یا بالاتر.

    ما همیشه روی ویژگی های جدید کار می کنیم ، بنابراین بارگیری نسخه های جدیدتر یا آخرین نسخه پیش نمایش Android Studio را در دسترس قرار دهید.

    به یاد داشته باشید که می توانید نسخه موجود Android Studio خود را نصب کنید ، زیرا می توانید چندین نسخه را به صورت جانبی نصب کنید .

  2. در Android Studio ، روی Tools> SDK Manager کلیک کنید.

  3. در برگه SDK Platforms ، جزئیات بسته بندی را بررسی کنید ، سپس بخش Android Vanillaicecream یا بالاتر را گسترش داده و بسته به دستگاه های مجازی که می خواهید ایجاد کنید ، یکی یا هر دو تصویر سیستم شبیه ساز زیر را انتخاب کنید:

    • Google API های آزمایشی 16 کیلوبایت اندازه صفحه 64 V8A تصویر سیستم
    • Google API های آزمایشی 16 کیلوبایت اندازه صفحه Intel x86_64 تصویر سیستم اتم

    16 KB Emulator System Images را با استفاده از SDK Manager در Android بارگیری کنید     استودیو

  4. برای بارگیری هر کدام از سیستم های سیستم انتخاب شده ، روی Apply> OK کلیک کنید.

  5. مراحل تنظیم یک دستگاه مجازی را برای Android 15 دنبال کنید و در صورت درخواست انتخاب یک تصویر سیستم ، تصویر سیستم 16 KB را که بارگیری کرده اید انتخاب کنید. اگر به صورت خودکار توصیه نشود ، می توانید تصویر سیستم 16 KB را در برگه دیگر تصاویر پیدا کنید.

    تصویر شبیه ساز 16 کیلوبایت را در تصاویر دیگر پیدا کنید برگه

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

برای نسخه های Android Emulator 35.1.5 تا 35.1.20 ، و قبل از تجدید نظر 4 تصاویر سیستم اندازه صفحه Android 15.0 16 KB که در مدیر SDK ارائه شده است ، برای شبیه سازی یک محیط 16 کیلوبایت در سیستم های x86_64 ، شما همچنین باید مراحل زیر را انجام دهید. این مراحل پس از نسخه 35.1.21 مورد نیاز نیست ، و با تجدید نظر 4 تصاویر سیستم اندازه صفحه 15.0 16 KB یا بعداً.

  1. در مدیر دستگاه ، روی 3 نقطه کنار تصویر 16 کیلوبایت کلیک کنید ، سپس روی نمایش روی دیسک کلیک کنید.
  2. در این پوشه ، پرونده config.ini پیدا کنید.
  3. خط زیر را به پرونده config.ini اضافه کرده و تغییرات خود را ذخیره کنید:

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

    adb shell getconf PAGE_SIZE
    

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

بعد از اتمام تنظیمات Android Emulator و دستگاه های مجازی ، Emulator را از منوی Target Teartine یا از خط فرمان راه اندازی کنید.

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

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

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

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

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

    هشدار : به دلیل یک مشکل شناخته شده با Android 15 QPR2 Beta 3 ، صفحه لمسی پس از نصب Android 15 QPR2 Beta 3 و بوت شدن دستگاه در حالت 16 کیلوبایت، روی دستگاه‌های پیکسل 8 کار نمی‌کند. این مشکل بر دستگاه‌های Pixel 8 Pro تأثیری نمی‌گذارد.

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

    هشدار : به دلیل یک مشکل شناخته شده با Android 15 QPR2 Beta 3 ، پس از نصب Android 15 QPR2 Beta 3 و بوت شدن دستگاه در حالت 16 کیلوبایت، صفحه لمسی در دستگاه‌های Pixel 8a کار نمی‌کند.

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

Google Play الزامات سازگاری

از آنجا که تولید کنندگان دستگاه دستگاه هایی را به RAM بیشتری برای بهینه سازی عملکرد مجهز می کنند ، بسیاری از آنها اندازه صفحه بزرگتر مانند 16 کیلوبایت را اتخاذ می کنند. برای تهیه راه اندازی این دستگاه های آینده ، Google Play یک الزام سازگاری برای کلیه برنامه های جدید و به روزرسانی برنامه های موجود و هدف قرار دادن دستگاه های Android 15+ برای پشتیبانی از اندازه صفحه 16 کیلوبایت از اول نوامبر 2025 معرفی شده است.

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