دعم أحجام صفحات بحجم 16 كيلوبايت

متطلبات التوافق مع Google Play بحجم 16 كيلوبايت
اعتبارًا من 1 نوفمبر 2025، يجب أن تتوافق جميع التطبيقات الجديدة وتحديثات التطبيقات الحالية التي يتم إرسالها إلى Google Play وتستهدف الأجهزة التي تعمل بالإصدار 15 من نظام التشغيل Android أو الإصدارات الأحدث مع صفحات الذاكرة بحجم 16 كيلوبايت على الأجهزة التي تعمل بنظام 64 بت.

في السابق، كان نظام التشغيل Android يتيح فقط صفحات الذاكرة بحجم 4 كيلوبايت، ما ساعد في تحسين أداء ذاكرة النظام بما يتناسب مع إجمالي مساحة الذاكرة التي كانت تتوفّر عادةً في أجهزة Android. بدءًا من الإصدار 15 من نظام التشغيل Android، يتيح مشروع Android مفتوح المصدر (AOSP) استخدام الأجهزة التي تم ضبطها لاستخدام حجم صفحة يبلغ 16 كيلوبايت (أجهزة 16 كيلوبايت). إذا كان تطبيقك يستخدم أي مكتبات NDK، سواء بشكل مباشر أو غير مباشر من خلال حزمة تطوير برامج (SDK)، عليك إعادة إنشاء تطبيقك لكي يعمل على هذه الأجهزة التي تستخدم صفحات ذاكرة بحجم 16 كيلوبايت.

مع استمرار الشركات المصنّعة للأجهزة في تصميم أجهزة تتضمّن كميات أكبر من الذاكرة الفعلية (RAM)، ستستخدم العديد من هذه الأجهزة أحجام صفحات تبلغ 16 كيلوبايت (وأكبر في النهاية) لتحسين أداء الجهاز. تتيح إضافة دعم للأجهزة التي تستخدم صفحات بحجم 16 كيلوبايت تشغيل تطبيقك على هذه الأجهزة، كما تساعد تطبيقك في الاستفادة من التحسينات المرتبطة بالأداء. وبدون إعادة تجميع، لن تعمل التطبيقات على الأجهزة التي تستخدم صفحات الذاكرة بحجم 16 كيلوبايت في إصدارات Android المستقبلية.

لمساعدتك في إضافة إمكانية استخدام تطبيقك، قدّمنا إرشادات حول كيفية التحقّق مما إذا كان تطبيقك سيتأثر، وكيفية إعادة إنشاء تطبيقك (إذا كان ذلك منطبقًا)، وكيفية اختبار تطبيقك في بيئة بحجم 16 كيلوبايت باستخدام المحاكيات (بما في ذلك صور نظام Android 15 لمحاكي Android).

المزايا وتحسين الأداء

تستهلك الأجهزة التي تم ضبطها على أحجام صفحات تبلغ 16 كيلوبايت مساحة أكبر قليلاً من الذاكرة في المتوسط، لكنها تُجري أيضًا تحسينات متنوعة في الأداء لكل من النظام والتطبيقات:

  • أوقات تشغيل التطبيق أقل عندما يكون النظام تحت ضغط الذاكرة: ‫3.16% انخفاضًا في المتوسط، مع تحسينات أكثر أهمية (تصل إلى %30) لبعض التطبيقات التي اختبرناها
  • انخفاض في استهلاك الطاقة أثناء تشغيل التطبيق: انخفاض بنسبة% 4.56 في المتوسّط
  • تشغيل أسرع للكاميرا: عمليات تشغيل أسرع بنسبة 4.48% في المتوسط، وعمليات تشغيل على البارد أسرع بنسبة 6.60% في المتوسط
  • مدة تشغيل النظام المحسَّنة: تحسّنت بنسبة %8 (950 ملي ثانية تقريبًا) في المتوسّط

تستند هذه التحسينات إلى اختبارنا الأوّلي، ومن المرجّح أن تختلف النتائج على الأجهزة الفعلية. وسنقدّم تحليلاً إضافيًا للفوائد المحتملة للتطبيقات أثناء مواصلة الاختبار.

التحقّق مما إذا كان تطبيقك متأثرًا

إذا كان تطبيقك يستخدم أي رموز برمجية أصلية، عليك إعادة إنشاء تطبيقك ليتوافق مع الأجهزة التي تستخدم صفحات ذاكرة بحجم 16 كيلوبايت. إذا لم تكن متأكدًا مما إذا كان تطبيقك يستخدم رمزًا برمجيًا أصليًا، يمكنك استخدام "أداة تحليل حِزم APK" لتحديد ما إذا كان هناك أي رمز برمجي أصلي، ثم التحقّق من توافق أقسام ELF مع أي مكتبات مشتركة تجدها. يوفّر "استوديو Android" أيضًا ميزات تساعدك في رصد مشاكل المحاذاة تلقائيًا.

إذا كان تطبيقك يستخدم فقط الرموز البرمجية المكتوبة بلغة البرمجة Java أو Kotlin، بما في ذلك جميع المكتبات أو حِزم تطوير البرامج (SDK)، يكون تطبيقك متوافقًا مع الأجهزة التي تبلغ سعتها 16 كيلوبايت. ومع ذلك، ننصحك باختبار تطبيقك في بيئة بحجم 16 كيلوبايت للتأكّد من عدم حدوث أي تراجع غير متوقّع في سلوك التطبيق.

هل يستخدم تطبيقك رمزًا برمجيًا أصليًا؟

يستخدم تطبيقك الرمز البرمجي الأصلي في حال توفُّر أيٍّ مما يلي:

  • يستخدم تطبيقك أي رمز C/C++‎ (أصلي). إذا كان تطبيقك يستخدم Android NDK، فهذا يعني أنّه يستخدم الرمز البرمجي الأصلي.
  • يربط تطبيقك بأي مكتبات أو ملحقات أصلية تابعة لجهات خارجية (مثل حِزم تطوير البرامج) تستخدمها.
  • تم إنشاء تطبيقك باستخدام أداة إنشاء تطبيقات تابعة لجهة خارجية تستخدم مكتبات مجمّعة من رموز برمجية أصلية على الجهاز.

تحديد المكتبات المجمّعة من رموز برمجية أصلية باستخدام "أداة تحليل ملفات APK"

أداة تحليل حِزم APK هي أداة تتيح لك تقييم جوانب مختلفة من حِزمة APK تم إنشاؤها. للتحقّق ممّا إذا كان تطبيقك يستخدم رموزًا برمجية أصلية (بغض النظر عمّا إذا كانت متوافقة مع الصفحة بحجم 16 كيلوبايت):

  1. افتح استوديو Android، ثم انقر على ملف > فتح واختَر أي مشروع.
  2. من شريط القوائم، انقر على إنشاء > تحليل حزمة APK...

    خيار قائمة "إنشاء" في "استوديو Android" لتشغيل "أداة تحليل ملفات APK"
  3. اختَر حزمة APK التي تريد تحليلها.

  4. ابحث داخل المجلد lib الذي يستضيف ملفات الكائنات المشتركة (.so) إذا كانت متوفرة. إذا كانت هناك أي ملفات كائنات مشتركة، سيستخدم تطبيقك الرمز البرمجي الأصلي. يعرض عمود المحاذاة رسائل تحذيرية لأي ملفات تتضمّن مشاكل في المحاذاة. إذا لم تكن هناك ملفات كائنات مشتركة أو لم يكن هناك مجلد lib، يعني ذلك أنّ تطبيقك لا يستخدم الرمز البرمجي الأصلي.

    طريقة عرض "أداة تحليل حِزم APK" التي توضّح أنّ ملفات الكائنات المشترَكة متوفّرة

رصد مشاكل المحاذاة من خلال عمليات التحقّق المبرمَجة

يُصدر "استوديو Android" تحذيرًا بشكل استباقي إذا كانت المكتبات أو حِزم APK المُنشأة مسبقًا لا تتوافق مع الحدّ الأدنى لحجم التطبيق البالغ 16 كيلوبايت. استخدِم أداة محلّل حِزم APK لمراجعة المكتبات التي يجب تحديثها أو لمعرفة ما إذا كانت هناك أي تغييرات مطلوبة في الرموز.

إشعارات التحذير في "استوديو YouTube" بشأن مشاكل المحاذاة في مشروع

يُبرز Lint في "استوديو Android" أيضًا المكتبات الأصلية التي لم تتم محاذاتها مع صفحة الذاكرة بحجم 16 كيلوبايت.

تحذير من أداة التدقيق في "استوديو Android" بشأن مكتبة أصلية غير متوافقة

التحقّق من محاذاة أقسام ELF للمكتبات المشترَكة

بالنسبة إلى أي مكتبات مشترَكة، تأكَّد من أنّ أقسام ELF للمكتبات المشترَكة تتم محاذاتها بشكل صحيح باستخدام محاذاة ELF بحجم 16 كيلوبايت. إذا كنت تستخدم Linux أو macOS، يمكنك استخدام النص البرمجي check_elf_alignment.sh كما هو موضّح في القسم التالي. يمكنك أيضًا استخدام أدوات سطر الأوامر مباشرةً.

استخدام النص البرمجي check_elf_alignment.sh (على نظام التشغيل Linux أو 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. تأكَّد من تثبيت الإصدار 35.0.0 أو إصدار أحدث من أدوات إنشاء حزمة تطوير البرامج (SDK) لنظام التشغيل Android وAndroid NDK باستخدام أداة SDK Manager في "استوديو Android" أو أداة سطر الأوامر sdkmanager.
  2. استخرِج ملف APK الخاص بتطبيقك باتّباع الخطوات التالية:

    ‫Linux أو macOS

    unzip APK_NAME.apk -d /tmp/my_apk_out
    

    نظام التشغيل Windows (PowerShell)

    Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_out
    
  3. في الدليل المؤقت الذي استخرجت منه ملف APK، تحقَّق من محتويات الدليل lib بحثًا عن ملفات الكائنات المشتركة (.so). وهي ملفات الكائنات المشتركة نفسها التي كنت ستراها أثناء تحديد المكتبات الأصلية باستخدام "أداة تحليل حِزم APK". نفِّذ الأمر التالي على كل ملف من ملفات الكائنات المشتركة:

    ‫Linux أو 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
    

    نظام التشغيل Windows (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 هو مسار الدليل الذي ثبّت فيه حزمة تطوير البرامج (SDK) لنظام Android، و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 الخاص بتطبيقك:

    ‫Linux أو macOS

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

    نظام التشغيل Windows (PowerShell)

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

    حيث يمثّل SDK_ROOT_LOCATION مسار الدليل الذي ثبَّت فيه حزمة تطوير البرامج (SDK) لنظام التشغيل Android، ويمثّل APK_NAME اسم ملف APK الخاص بتطبيقك. سيعرض السطر الأخير من الناتج العبارة "تم التحقّق بنجاح" إذا كانت جميع المكتبات المشترَكة متوافقة بشكل صحيح.

    إذا تعذّر إثبات الملكية، يجب إعادة ضبط بعض المكتبات المشترَكة، لذا عليك تعديل حزمة هذه المكتبات، ثم إعادة تجميع تطبيقك وإعادة الاختبار باتّباع الخطوات الواردة في هذا القسم.

إنشاء تطبيقك ليتوافق مع الأجهزة التي تستخدم صفحات ذاكرة بحجم 16 كيلوبايت

إذا كان تطبيقك يستخدم رموزًا برمجية أصلية، عليك إكمال الخطوات الموضّحة في الأقسام التالية للتأكّد من أنّ تطبيقك متوافق مع الأجهزة التي تستخدم صفحات ذاكرة بحجم 16 كيلوبايت:

  1. تعديل حِزم المكتبات المشتركة
  2. تجميع تطبيقك باستخدام محاذاة ELF بحجم 16 كيلوبايت
  3. إصلاح الرمز البرمجي وحلّ المشاكل أثناء التشغيل
  4. التحقّق من توافق حِزم تطوير البرامج (SDK) مع صفحة الذاكرة بحجم 16 كيلوبايت

تعديل حِزم المكتبات المشترَكة

ننصحك بالترقية إلى الإصدار 8.5.1 أو إصدار أحدث من "مكوّن Android الإضافي في Gradle" واستخدام المكتبات المشترَكة غير المضغوطة.

الإصدار 8.5.1 أو إصدار أحدث من "مكوّن Android الإضافي لبرنامج Gradle"

تتطلّب الأجهزة التي تستخدم صفحات ذاكرة بحجم 16 كيلوبايت أن تعمل التطبيقات التي تتضمّن مكتبات مشتركة غير مضغوطة على محاذاتها على حدود مضغوطة بحجم 16 كيلوبايت. لإجراء ذلك، عليك الترقية إلى الإصدار 8.5.1 أو إصدار أحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android. راجِع القسم أداة "مساعد ترقية" لمكوّن Gradle الإضافي لنظام التشغيل Android لمعرفة تفاصيل حول عملية الترقية.

الإصدار 8.5 من "مكوّن Android الإضافي في Gradle" أو إصدار أقدم

إذا لم تتمكّن من ترقية "مكوّن Android الإضافي في Gradle" إلى الإصدار 8.5.1 أو إصدار أحدث، يمكنك بدلاً من ذلك استخدام المكتبات المشترَكة المضغوطة. عدِّل إعدادات Gradle ليضغط Gradle المكتبات المشترَكة عند تجميع تطبيقك لتجنُّب حدوث مشاكل في تثبيت التطبيق بسبب المكتبات المشترَكة غير المحاذية.

Groovy

في ملف build.gradle، أضِف الخيار التالي:

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

Kotlin

في ملف build.gradle.kts، أضِف الخيار التالي:

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

تجميع تطبيقك باستخدام محاذاة ELF بحجم 16 كيلوبايت

تتطلّب الأجهزة التي تستخدم صفحات ذاكرة بحجم 16 كيلوبايت محاذاة مقاطع ELF الخاصة بالمكتبات المشتركة بشكل صحيح باستخدام محاذاة ELF بحجم 16 كيلوبايت لكي يتمكّن تطبيقك من العمل.

بالنسبة إلى مطوّري الألعاب، إذا كانت لعبتك تعمل على محرّك ألعاب Unity، يُرجى الرجوع إلى دليل Unity. إذا كانت لعبتك تعمل على محرّك ألعاب Unreal، راجِع دليل Unreal. بالنسبة إلى محركات الألعاب الأصلية، تابِع هذا الدليل.

لإعادة تجميع تطبيقك باستخدام محاذاة ELF بحجم 16 كيلوبايت، أكمل الخطوات الواردة في أحد الأقسام التالية حسب إصدار Android NDK الذي تستخدمه.

‫Android NDK r28 والإصدارات الأحدث

يتم تجميع الإصدار r28 من NDK والإصدارات الأحدث مع محاذاة 16 كيلوبايت تلقائيًا.

‫Android NDK r27

لإتاحة تجميع المكتبات المشترَكة المتوافقة مع حجم 16 كيلوبايت باستخدام الإصدار r27 من حزمة تطوير البرامج الأصلية (NDK) لنظام Android أو الإصدارات الأحدث، عليك تعديل ndk-build أو build.gradle أو build.gradle.kts أو علامات الرابط على النحو التالي:

ndk-build

في Application.mk:

APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true

Groovy

في ملف 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"
      }
    }
  }
}

Kotlin

في ملف 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

الإصدار 26 من Android NDK والإصدارات الأقدم

يجب دائمًا تحديث NDK. يجب استخدام هذا الخيار كحلّ أخير فقط، ولا يمكن ضمان توفّر الدعم.

لإتاحة تجميع المكتبات المشترَكة المحاذية بحجم 16 كيلوبايت باستخدام الإصدار r26 أو الإصدارات الأقدم من حزمة تطوير البرامج (NDK) لنظام التشغيل Android، عليك تعديل إعدادات 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")

‫Android NDK r22 والإصدارات الأقدم

يجب دائمًا تحديث NDK. يجب استخدام هذا الخيار كحلّ أخير فقط، ولا يمكن ضمان توفّر الدعم.

بالإضافة إلى الخطوة الموضّحة للإصدار 26 من NDK والإصدارات الأقدم، يجب ضبط common-page-size=16384 إذا كنت تستخدم الإصدار 22 من NDK أو الإصدارات الأقدم. يجب ضبط common-page-size=16384 بسبب الأخطاء في الإصدارات السابقة من GNU ld وLLVM lld. لن ينجح هذا الحل البديل لحجم الصفحة الشائع إلا إذا كان ملف ELF يتضمّن أيضًا قسم relro_padding. (الإصدار 18 من LLD والإصدارات الأحدث).

لتجميع مكتبات مشتركة متوافقة مع صفحات بحجم 16 كيلوبايت باستخدام الإصدار r22 أو الإصدارات الأقدم من حزمة تطوير البرامج (NDK) لنظام Android، عليك تعديل إعدادات ndk-build أو cmake على النحو التالي:

ndk-build

يُرجى تعديل Android.mk لإنشاء ملف ELF متوافق مع الصفحات بحجم 16 كيلوبايت:

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

CMake

يُرجى تعديل CMakeLists.txt لإنشاء ملف ELF متوافق مع الصفحات بحجم 16 كيلوبايت:

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")

إصلاح الرمز وحلّ المشاكل أثناء التشغيل

حتى إذا كان تطبيقك متوافقًا مع صفحة الذاكرة بحجم 16 كيلوبايت، قد يواجه أخطاء إذا افترضت بعض أجزاء الرمز البرمجي أنّ الجهاز يستخدم حجم صفحة معيّنًا. لتجنُّب ذلك، أكمِل الخطوات التالية:

  1. أزِل أي تبعيات مبرمَجة بشكل ثابت تشير إلى الثابت PAGE_SIZE أو أي مثيلات في منطق الرمز البرمجي تفترض أنّ حجم الصفحة على الجهاز هو 4 كيلوبايت (4096).

    يمكنك استخدام getpagesize() أو sysconf(_SC_PAGESIZE) بدلاً من ذلك.

  2. ابحث عن استخدامات mmap() وواجهات برمجة التطبيقات الأخرى التي تتطلّب وسيطات متوافقة مع الصفحة، واستبدِلها ببدائل عند الضرورة.

في بعض الحالات، إذا كان تطبيقك يستخدم PAGE_SIZE كقيمة مناسبة غير مرتبطة بحجم الصفحة الأساسي، لن يؤدي ذلك إلى تعطُّل تطبيقك عند استخدامه في وضع 16 كيلوبايت. ومع ذلك، إذا تم تمرير هذه القيمة إلى النواة باستخدام mmap بدون MAP_FIXED، ستظل النواة تستخدم صفحة كاملة، ما يؤدي إلى إهدار بعض الذاكرة. لهذه الأسباب، تكون قيمة PAGE_SIZE غير محدّدة عند تفعيل الوضع 16 كيلوبايت في NDK الإصدار 27 والإصدارات الأحدث.

إذا كان تطبيقك يستخدم PAGE_SIZE بهذه الطريقة ولا يمرّر هذه القيمة مباشرةً إلى النواة، يمكنك إنشاء متغيّر جديد باسم جديد بدلاً من استخدام PAGE_SIZE للإشارة إلى أنّه يُستخدم لأغراض أخرى ولا يشير إلى صفحة ذاكرة حقيقية.

التحقّق من توافق حِزم تطوير البرامج (SDK) مع صفحة الذاكرة بحجم 16 كيلوبايت

تتوافق العديد من حِزم تطوير البرامج (SDK) مع أحجام الصفحات البالغة 16 كيلوبايت، خاصةً إذا أنشأتها بنفسك أو حصلت على إصدارات مسبقة الإنشاء حديثة. ومع ذلك، بما أنّ بعض حِزم SDK المجمَّعة مسبقًا أو إصدارات حِزم SDK غير متوافقة مع حجم 16 كيلوبايت، عليك مراجعة الموقع الإلكتروني لكل موفّر حزمة SDK لتحديد الإصدار الذي يجب استخدامه مع حجم 16 كيلوبايت.

اختبار تطبيقك في بيئة تتضمّن صفحات بحجم 16 كيلوبايت

بعد إنشاء تطبيقك مع توفير إمكانية استخدامه على الأجهزة التي تستخدم صفحات الذاكرة بحجم 16 كيلوبايت، عليك اختباره في بيئة بحجم 16 كيلوبايت لمعرفة ما إذا كان تطبيقك سيواجه أي تراجع في الأداء. لإجراء هذا، اتبع هذه الخطوات:

  1. إعداد حزمة تطوير البرامج (SDK) لنظام التشغيل Android 15

  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 كيلوبايت باستخدام "محاكي Android"، اتّبِع الخطوات التالية:

  1. تتوافق صور نظام محاكي Android 15 المستندة إلى 16 كيلوبايت مع الإصدار Jellyfish‏ | 2023.3.1 من "استوديو Android" أو الإصدارات الأحدث. ومع ذلك، للحصول على أفضل تجربة عند استخدام أجهزة بسعة 16 كيلوبايت، استخدِم الإصدار Ladybug | 2024.2.1 من "استوديو Android" أو إصدارًا أحدث.

    نعمل دائمًا على تطوير ميزات جديدة، لذا ننصحك بتنزيل أحدث الإصدارات أو أحدث إصدار مبكر من "استوديو Android" عند توفّرها.

    يُرجى العِلم أنّه يمكنك إبقاء الإصدار الحالي من Android Studio مثبّتًا، إذ يمكنك تثبيت إصدارات متعددة جنبًا إلى جنب.

  2. في "استوديو Android"، انقر على الأدوات > مدير حزمة تطوير البرامج (SDK).

  3. في علامة التبويب منصات حزمة SDK، ضَع علامة في المربّع بجانب عرض تفاصيل الحزمة، ثم وسِّع القسم Android VanillaIceCream أو إصدار أحدث، واختَر صورة نظام محاكي واحدة أو كلتيهما مما يلي، وذلك حسب الأجهزة الافتراضية التي تريد إنشاءها:

    • صورة نظام ARM 64 v8a بحجم صفحة تجريبية يبلغ 16 كيلوبايت لواجهات Google APIs
    • صورة نظام Google APIs التجريبي بحجم صفحة 16 كيلوبايت Intel x86_64 Atom
    تنزيل صور نظام المحاكي بحجم 16 كيلوبايت باستخدام "أداة إدارة حزمة تطوير البرامج" (SDK Manager) في "استوديو Android"
  4. انقر على تطبيق > حسنًا لتنزيل صور النظام التي اخترتها.

  5. اتّبِع الخطوات لإعداد جهاز افتراضي لنظام التشغيل Android 15، وعندما يُطلب منك اختيار صورة نظام، اختَر صورة النظام بحجم 16 كيلوبايت التي نزّلتها. إذا لم يتم اقتراحها تلقائيًا، يمكنك العثور على صورة النظام بحجم 16 كيلوبايت في علامة التبويب صور أخرى.

    ابحث عن صورة المحاكي بحجم 16 كيلوبايت في علامة التبويب "صور أخرى".

خطوات إضافية لبعض إصدارات المحاكي وصور النظام

بالنسبة إلى الإصدارات من 35.1.5 إلى 35.1.20 من "محاكي Android"، وقبل المراجعة 4 من صور نظام Android 15.0 التي تتضمّن صفحات بحجم 16 كيلوبايت والمتاحة في "مدير حزمة تطوير البرامج"، عليك أيضًا إكمال الخطوات التالية لمحاكاة بيئة تتضمّن صفحات بحجم 16 كيلوبايت على أنظمة x86_64. لا تكون هذه الخطوات مطلوبة بعد الإصدار 35.1.21، ومع المراجعة 4 من صور نظام Android 15.0 بحجم صفحة 16 كيلوبايت أو الإصدارات الأحدث.

  1. في "إدارة الأجهزة"، انقر على النقاط الثلاث بجانب صورة حجمها 16 كيلوبايت، ثم انقر على العرض على القرص.
  2. في هذا المجلد، ابحث عن الملف config.ini.
  3. أضِف السطر التالي إلى ملف config.ini واحفظ التغييرات:

    kernel.parameters = androidboot.page_shift=14
    
  4. للتحقّق من التغييرات، شغِّل الأمر التالي الذي من المفترض أن يعرض 16384:

    adb shell getconf PAGE_SIZE
    

تشغيل المحاكي

بعد الانتهاء من إعداد "محاكي Android" والأجهزة الافتراضية، شغِّل المحاكي من قائمة الجهاز المستهدف أو من سطر الأوامر.

تفعيل الوضع 16 كيلوبايت على جهاز باستخدام خيارات المطوّرين

فعِّل خيار المطوّر التشغيل مع صفحات حجمها 16 كيلوبايت لتشغيل الجهاز في الوضع الذي يستخدم صفحات بحجم 16 كيلوبايت.

بدءًا من الإصدار 1 من حزمة الإصدارات التجريبية العامة (QPR1) لنظام التشغيل Android 15، يمكنك استخدام خيار المطوّرين المتاح على أجهزة معيّنة لتشغيل الجهاز في وضع 16 كيلوبايت وإجراء اختبار على الجهاز. قبل استخدام خيار المطوّرين، انتقِل إلى الإعدادات > النظام > تحديثات البرامج وطبِّق أي تحديثات متوفّرة.

يتوفّر خيار المطوّر هذا على الأجهزة التالية:

  • ‫Pixel 8 وPixel 8 Pro (مع الإصدار 1 من حزمة إصلاح الأخطاء QPR لنظام التشغيل Android 15 أو إصدار أحدث)

  • ‫Pixel 8a (مع الإصدار 1 من حزمة الإصدارات ربع السنوية لنظام Android 15 أو إصدار أحدث)

  • ‫Pixel 9 وPixel 9 Pro وPixel 9 Pro XL (مع الإصدار التجريبي 2 من حزمة QPR2 لنظام التشغيل Android 15 أو إصدار أحدث)

وضع التوافق مع الإصدارات السابقة بحجم 16 كيلوبايت

تحذير في وضع التوافق مع حجم الصفحة

تحذير في وضع التوافق مع حجم الصفحة

يتوفّر خيار التوافق مع الإصدارات القديمة بحجم 16 كيلوبايت عندما يعمل الجهاز بنواة بحجم 16 كيلوبايت. يدير مدير الحِزم تطبيقًا في وضع التوافق مع الإصدارات السابقة بحجم 16 كيلوبايت عند استيفاء الشروط التالية:

  • إذا كان التطبيق يحتوي على ملفات ELF (بالامتداد .so) مع محاذاة مقطع LOAD بحجم 4 كيلوبايت.
  • إذا كانت حزمة APK المضغوطة تحتوي على ملفات ELF غير مضغوطة بحجم 4 كيلوبايت ومحاذية لملف ZIP.

إذا فعّل مدير الحِزم وضع التوافق مع الإصدارات القديمة بحجم 16 كيلوبايت لأحد التطبيقات، سيعرض التطبيق تحذيرًا عند تشغيله لأول مرة يفيد بأنّه يعمل في وضع التوافق مع الإصدارات القديمة بحجم 16 كيلوبايت.

يتيح وضع التوافق مع الإصدارات القديمة بحجم 16 كيلوبايت تشغيل بعض التطبيقات، وللحصول على أفضل موثوقية وثبات، يجب أن تظل التطبيقات متوافقة مع حجم 16 كيلوبايت.

في صفحة معلومات التطبيق، ضِمن الإعدادات المتقدّمة، فعِّل أو أوقِف الإعداد تشغيل التطبيق في وضع التوافق مع حجم الصفحة لتفعيل وضع التوافق مع الإصدارات السابقة بحجم 16 كيلوبايت أو إيقافه لتطبيق معيّن. يظهر هذا الإعداد فقط عندما يعمل الجهاز بحجم صفحة يبلغ 16 كيلوبايت.

إعداد وضع التوافق مع حجم الصفحة

إعداد وضع التوافق مع حجم الصفحة

لفرض التوافق مع الإصدارات القديمة بحجم 16 كيلوبايت لكل تطبيق على الجهاز، اتّبِع الخطوات التالية:

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

لإيقاف التوافق مع الإصدارات القديمة بحجم 16 كيلوبايت لكل تطبيق على الجهاز، اتّبِع الخطوات التالية:

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

اضبط السمة android:pageSizeCompat على "مفعَّلة" أو "غير مفعَّلة" لتفعيل وضع التوافق مع الإصدارات القديمة أو إيقافه لتطبيق معيّن في AndroidManifest.xml. عند ضبط هذه السمة، لن يعرض التطبيق تحذيرات بشأن وضع التوافق مع الإصدارات القديمة عند تشغيله.

متطلبات التوافق مع Google Play

مع تزويد الشركات المصنّعة للأجهزة بأجهزة تتضمّن المزيد من ذاكرة الوصول العشوائي (RAM) لتحسين الأداء، سيعتمد العديد منها أحجام صفحات أكبر، مثل 16 كيلوبايت. استعدادًا لإطلاق هذه الأجهزة القادمة، سيفرض Google Play شرطًا جديدًا بشأن التوافق، وهو أنّه اعتبارًا من 1 نوفمبر 2025، يجب أن تتوافق جميع التطبيقات الجديدة وتحديثات التطبيقات الحالية التي يتم إرسالها إلى Google Play وتستهدف الأجهزة التي تعمل بالإصدار Android 15 (المستوى 35 لواجهة برمجة التطبيقات) والإصدارات الأحدث مع صفحات الذاكرة بحجم 16 كيلوبايت.

لمزيد من المعلومات حول متطلبات التوافق هذه، يمكنك الاطّلاع على منشور المدوّنة هذا.