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

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

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

المزايا ومكاسب الأداء

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

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

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

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

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

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

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

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

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

تحديد المكتبات الأصلية باستخدام أداة تحليل حِزم APK

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

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

    خيار قائمة Studio Build لتشغيل
أداة تحليل APK

  3. اختَر حِزمة APK التي تريد تحليلها.

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

    عرض أداة تحليل APK يوضح أن ملفات العناصر
المشتركة موجودة

إنشاء تطبيقك متوافق مع أجهزة بحجم 16 كيلوبايت

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

تحديث حزمة مكتباتك المشتركة

ننصحك بالترقية إلى الإصدار 8.3 من AGP أو إلى إصدار أحدث واستخدام المكتبات المشتركة غير المضغوطة.

الإصدار 8.3 من AGP أو إصدار أحدث

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

الإصدار 8.2 من AGP أو إصدار أقدم

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

رائع

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

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

Kotlin

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

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

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

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

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

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

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

لعبة ndk-build

عدِّل Android.mk لتفعيل تنسيق ELF الذي يبلغ حجمه 16 كيلوبايت:

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

إنشاء فيديوهات Shorts

عدِّل CMakeLists.txt لتفعيل تنسيق ELF الذي يبلغ حجمه 16 كيلوبايت:

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

الإصدار NDK r27 من Android والإصدارات الأحدث

لإتاحة تجميع 16 مكتبات مشترَكة متوافقة مع قاعدة المعلومات مع الإصدار r27 من نظام التشغيل Android NDK أو الإصدارات الأحدث، يجب تحديث علامات 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"
      }
    }
  }
}

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

التحقّق من حالات الرموز التي تشير إلى أحجام معيّنة للصفحات

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

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

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

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

اختبار تطبيقك في بيئة 16 كيلوبايت

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

إعداد محاكي Android بصورة لنظام Android 15 بحجم 16 كيلوبايت

لإعداد بيئة حجمها 16 كيلوبايت باستخدام محاكي Android، اتبع الخطوات التالية:

  1. إنّ صور نظام محاكي Android 15 المستندة إلى 16 كيلوبايت متوافقة مع الإصدار 2023.3.1 أو الإصدارات الأحدث من "استوديو Android". مع ذلك، للحصول على أفضل تجربة عند التعامل مع الإصدار التجريبي من Android 15، عليك تنزيل أحدث إصدار معاينة من "استوديو Android".

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

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

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

    • نسخة تجريبية لنظام التشغيل ARM 64 v8a بحجم صفحة 16 كيلوبايت من Google APIs
    • صورة نظام Intel x86_64 Atom تجريبية بحجم صفحة 16 كيلوبايت من Google APIs

    يمكنك تنزيل صور نظام المحاكي بحجم 16 كيلوبايت باستخدام أداة SDK Manager في "استوديو Android"

  4. انقر على تطبيق > موافق لتنزيل صور النظام التي اخترتها.

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

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