نظرة عامة على الميزات وواجهات برمجة التطبيقات

يقدّم Android 15 ميزات وواجهات برمجة تطبيقات جديدة رائعة للمطوّرين. تلخص الأقسام التالية هذه الميزات لمساعدتك في بدء استخدام واجهات برمجة التطبيقات ذات الصلة.

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

الكاميرا والوسائط

يشتمل Android 15 على مجموعة متنوعة من الميزات التي تحسّن تجربة الكاميرا والوسائط، وتتيح لك الوصول إلى أدوات وأجهزة لمساعدة صنّاع المحتوى على تحويل رؤيتهم إلى الواقع على Android.

للحصول على مزيد من المعلومات حول أحدث الميزات وحلول المطوّرين لوسائط وكاميرا Android، يمكنك الاطّلاع على المقالة إنشاء تجارب وسائط وكاميرات Android الحديثة من مؤتمر Google I/O.

تعزيز الإضاءة المنخفضة

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

  • توفير معاينة محسّنة للصور، ليتمكّن المستخدمون من تأطير الصور ذات الإضاءة المنخفضة بشكل أفضل
  • جارٍ مسح رموز الاستجابة السريعة ضوئيًا في الإضاءة المنخفضة

إذا فعّلت ميزة "تعزيز الإضاءة المنخفضة"، يتم تشغيلها تلقائيًا عند انخفاض مستوى الإضاءة، ويتم إيقافها عند ارتفاع مستوى الإضاءة.

يمكن للتطبيقات تسجيل فيديو من بث المعاينة في ظروف الإضاءة المنخفضة لحفظ فيديو سطوع.

لمزيد من المعلومات، يمكنك الاطّلاع على تعزيز الإضاءة المنخفضة.

عناصر التحكّم في الكاميرا داخل التطبيقات

يُضيف Android 15 إضافة جديدة لمزيد من التحكّم في أجهزة الكاميرا وخوارزمياته على الأجهزة المتوافقة:

  • تعديلات متقدّمة على قوة الفلاش، ما يتيح التحكّم الدقيق في شدة الفلاش في وضعَي SINGLE وTORCH أثناء التقاط الصور.

التحكّم في هامش النمو ضمن النطاق العالي الديناميكية

Android 15 chooses HDR headroom that is appropriate for the underlying device capabilities and bit-depth of the panel. For pages that have lots of SDR content, such as a messaging app displaying a single HDR thumbnail, this behavior can end up adversely influencing the perceived brightness of the SDR content. Android 15 lets you control the HDR headroom with setDesiredHdrHeadroom to strike a balance between SDR and HDR content.

The brightness of SDR UI elements on the left screen appears to be more uniform than the brightness on the right screen, which simulates possible headroom issues when HDR and SDR content are mixed. By adjusting the HDR headroom, you can achieve a better balance between the SDR and HDR content.

التحكّم في مستوى ارتفاع الصوت

Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.

To enable this feature, you need to ensure loudness metadata is available in your AAC content and enable the platform feature in your app. For this, you instantiate a LoudnessCodecController object by calling its create factory method with the audio session ID from the associated AudioTrack; this automatically starts applying audio updates. You can pass an OnLoudnessCodecUpdateListener to modify or filter loudness parameters before they are applied on the MediaCodec.

// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
                                .setSessionId(sessionId)
                                .build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
   val lcController = LoudnessCodecController.create(mSessionId)
   // Starts applying audio updates for each added MediaCodec
}

AndroidX media3 ExoPlayer will also be updated to use the LoudnessCodecController APIs for a seamless app integration.

أجهزة MIDI الافتراضية التي تعمل بالإصدار 2.0

أتاح نظام Android 13 إمكانية الاتصال بأجهزة MIDI 2.0 باستخدام USB التي تتواصل باستخدام حِزم MIDI الشاملة (UMP). يعمل Android 15 على توسيع نطاق دعم UMP ليشمل تطبيقات MIDI الافتراضية، ما يتيح لتطبيقات إنشاء المحتوى إمكانية التحكّم في تطبيقات جهاز التجميع كجهاز MIDI 2.0 افتراضي، تمامًا كما هو الحال مع جهاز USB MIDI 2.0.

فك ترميز برامج AV1 بشكل أكثر فعالية

شعار dav1d

إنّ برنامج dav1d، وهو برنامج فك ترميز برامج AV1 الشهير من VideoLAN، أصبح متاحًا الآن للأجهزة التي تعمل بنظام التشغيل Android التي لا تتيح فك ترميز AV1 في الأجهزة. ويزيد أداء dav1d بمقدار 3 مرات مقارنةً ببرنامج فك ترميز برامج AV1 القديم، ما يتيح تشغيل محتوى عالي الدقة AV1 للمزيد من المستخدمين، بما في ذلك بعض الأجهزة المنخفضة والمتوسطة.

في الوقت الحالي، يحتاج تطبيقك إلى الموافقة على استخدام dav1d من خلال استدعائه حسب الاسم "c2.android.av1-dav1d.decoder". dav1d هو برنامج فك ترميز برنامج AV1 التلقائي في تحديث لاحق. تم توحيد هذا الدعم وتوفيره على أجهزة Android 11 التي تتلقّى تحديثات نظام Google Play.

أدوات وإنتاجية المطوّرين

نحن نبذل جهودًا كبيرة لتحسين إنتاجيتك تتمحور حول أدوات مثل Android Studio وJetpack Compose ومكتبات Android Jetpack، فنحن نبحث دائمًا عن طرق في النظام الأساسي لمساعدتك على تحقيق رؤيتك بسهولة أكبر.

تحديثات OpenJDK 17

Android 15 continues the work of refreshing Android's core libraries to align with the features in the latest OpenJDK LTS releases.

The following key features and improvements are included:

These APIs are updated on over a billion devices running Android 12 (API level 31) and higher through Google Play System updates, so you can target the latest programming features.

تحسينات على ملف PDF

يتضمن Android 15 تحسينات مهمة على واجهات برمجة التطبيقات في PdfRenderer. يمكن أن تتضمن التطبيقات ميزات متقدّمة، مثل عرض الملفات المحمية بكلمة مرور والتعليقات التوضيحية وتعديل النماذج والبحث والاختيار بنسخة منها. تتم إتاحة تحسينات ملفات PDF الخطية لتسريع عرض ملفات PDF المحلية وتقليل استخدام الموارد.

تشمل آخر التعديلات التي أجريناها على عرض ملفات PDF ميزات، مثل البحث في ملف PDF مضمّن.

لقد تم نقل PdfRenderer إلى وحدة يمكن تحديثها باستخدام تحديثات نظام Google Play بشكل مستقل عن إصدار النظام الأساسي، ونحن نتيح هذه التغييرات مرة أخرى على Android 11 (المستوى 30 لواجهة برمجة التطبيقات) من خلال إنشاء إصدار متوافق من واجهة برمجة التطبيقات لمرحلة ما قبل Android 15، ويُطلق عليه اسم PdfRendererPreV.

نقدِّر ملاحظاتك بشأن التحسينات التي أجريناها على واجهة PdfRenderer API، ونخطط لتسهيل دمج واجهات برمجة التطبيقات هذه في تطبيقك مع مكتبة Android Jetpack القادمة.

تحسينات التبديل التلقائي بين اللغات

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

واجهة برمجة تطبيقات محسّنة لـ OpenType Variable Font

يحسّن نظام التشغيل Android 15 من سهولة استخدام الخط المتغير OpenType. يمكنك الآن إنشاء مثيل FontFamily من خط متغيّر بدون تحديد محور الوزن باستخدام واجهة برمجة التطبيقات buildVariableFamily. يلغي عارض النص قيمة المحور wght لمطابقة النص المعروض.

وباستخدام واجهة برمجة التطبيقات الجديدة، يؤدي ذلك إلى تبسيط الرمز لإنشاء Typeface بشكل كبير:

Kotlin

val newTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build()

Java

Typeface newTypeface = Typeface.CustomFallbackBuilder(
            new FontFamily.Builder(
                new Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build();

في السابق، كنت تحتاج إلى المزيد من الرموز البرمجية لإنشاء Typeface نفسه:

Kotlin

val oldTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf")
                    .setFontVariationSettings("'wght' 400")
                    .setWeight(400)
                    .build())
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 100")
                        .setWeight(100)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 200")
                        .setWeight(200)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 300")
                        .setWeight(300)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 500")
                        .setWeight(500)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 600")
                        .setWeight(600)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 700")
                        .setWeight(700)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 800")
                        .setWeight(800)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 900")
                        .setWeight(900)
                        .build()
                ).build()
        ).build()

Java

Typeface oldTypeface = new Typeface.CustomFallbackBuilder(
    new FontFamily.Builder(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 400")
            .setWeight(400)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 100")
            .setWeight(100)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 200")
            .setWeight(200)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 300")
            .setWeight(300)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 500")
            .setWeight(500)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 600")
            .setWeight(600)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 700")
            .setWeight(700)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 800")
            .setWeight(800)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 900")
            .setWeight(900)
            .build()
    )
    .build()
).build();

في ما يلي مثال على طريقة عرض Typeface باستخدام كل من واجهات برمجة التطبيقات القديمة والجديدة:

مثال على كيفية اختلاف عرض Typeface باستخدام
واجهات برمجة التطبيقات الجديدة والقديمة

في هذا المثال، لا تتيح واجهة برمجة التطبيقات Typeface التي تم إنشاؤها باستخدام واجهة برمجة التطبيقات القديمة إنشاء قيم وزن خط دقيقة للمثيلات 350 و450 و550 و650 Font، لذلك يعود العارض إلى أقرب عرض ممكن. لذلك في هذه الحالة، يتم عرض 300 بدلاً من 350، ويتم عرض 400 بدلاً من 450، وهكذا. وعلى النقيض من ذلك، تُنشئ دالة Typeface التي تم إنشاؤها باستخدام واجهات برمجة التطبيقات الجديدة بشكلٍ ديناميكي مثيل Font لوزن معيّن، لذلك يتم عرض قيم الترجيح الدقيقة لـ 350 و450 و550 و650 أيضًا.

عناصر تحكّم دقيقة في فواصل الأسطر

بدءًا من نظام التشغيل Android 15، يمكن لـ TextView وفاصل السطر الأساسي الاحتفاظ بالجزء المحدّد من النص في السطر نفسه لتحسين إمكانية القراءة. يمكنك الاستفادة من هذا تخصيص فاصل الأسطر باستخدام علامة <nobreak> في موارد السلسلة أو createNoBreakSpan. وبالمثل، يمكنك الحفاظ على الكلمات من الواصلة باستخدام العلامة <nohyphen> أو createNoHyphenationSpan.

على سبيل المثال، لا يشتمل مورد السلسلة التالي على فاصل أسطر، يظهر مع عرض النص "Pixel 8 Pro" في مكان غير مرغوب فيه:

<resources>
    <string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>

وفي المقابل، يتضمّن مورد السلسلة هذا العلامة <nobreak> التي تلفّ عبارة "Pixel 8 Pro." وتمنع فواصل الأسطر:

<resources>
    <string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>

يظهر الفرق في كيفية عرض هذه السلاسل في الصور التالية:

تنسيق لسطر من النص لا يتم فيه لف العبارة "Pixel 8 Pro" باستخدام علامة <nobreak>
تنسيق لسطر النص نفسه حيث يتم لف العبارة "Pixel 8 Pro" باستخدام علامة <nobreak>

أرشفة التطبيقات

Android and Google Play announced support for app archiving last year, allowing users to free up space by partially removing infrequently used apps from the device that were published using Android App Bundle on Google Play. Android 15 now includes OS level support for app archiving and unarchiving, making it easier for all app stores to implement it.

Apps with the REQUEST_DELETE_PACKAGES permission can call the PackageInstaller requestArchive method to request archiving an installed app package, which removes the APK and any cached files, but persists user data. Archived apps are returned as displayable apps through the LauncherApps APIs; users will see a UI treatment to highlight that those apps are archived. If a user taps on an archived app, the responsible installer will get a request to unarchive it, and the restoration process can be monitored by the ACTION_PACKAGE_ADDED broadcast.

الرسومات

يوفّر Android 15 أحدث التحسينات في الرسومات، بما في ذلك محرِّك ANGLE والإضافات إلى نظام رسومات "لوحة الرسم".

تحديث إمكانية الوصول إلى وحدة معالجة الرسومات في Android

شعار Vulkan

تطورت أجهزة Android إلى حد كبير منذ بدايتها حيث كان يتم تشغيل نظام التشغيل الأساسي على وحدة معالجة مركزية واحدة، كما تم الوصول إلى وحدات معالجة الرسومات باستخدام واجهات برمجة التطبيقات استنادًا إلى المخططات ذات الوظائف الثابتة. كانت واجهة برمجة التطبيقات Vulkan® للرسومات متاحة في NDK منذ نظام Android 7.0 (المستوى 24 لواجهة برمجة التطبيقات) ذات مستوى تجريدي أدنى يعكس بشكل أفضل الأجهزة الحديثة لوحدة معالجة الرسومات، وتوسّع نطاقها بشكل أفضل لتتوافق مع نوى وحدة معالجة مركزية متعددة، وتخفض النفقات العامة لبرنامج تشغيل وحدة المعالجة المركزية (CPU)، ما يؤدي إلى تحسُّن أداء التطبيق. يتوافق Vulkan مع جميع محرّكات الألعاب الحديثة.

Vulkan هي واجهة Android المفضلة لوحدة معالجة الرسومات. وبالتالي، يتضمّن نظام التشغيل Android 15 لغة ANGLE كطبقة اختيارية لتشغيل OpenGL® ES على شبكة Vulkan. سيؤدي الانتقال إلى محرِّك ANGLE إلى توحيد تنفيذ Android OpenGL من أجل تعزيز التوافق وتحسين الأداء في بعض الحالات. يمكنك اختبار ثبات تطبيق OpenGL ES وأدائه من خلال ANGLE من خلال تفعيل خيار المطوّرين في الإعدادات -> النظام -> خيارات المطوّرين -> تجريبية: تفعيل محرِّك ANGLE على Android 15.

Android ANGLE على خارطة طريق Vulkan

خطة تحقيق الأهداف المتعلّقة بواجهات برمجة تطبيقات وحدة معالجة الرسومات لنظام التشغيل Android.

في إطار تبسيط حزمة وحدة معالجة الرسومات، سنشحن من الآن فصاعدًا محرِّك ANGLE على أنّه برنامج تشغيل نظام GL على المزيد من الأجهزة الجديدة، ومن المتوقّع أن يكون OpenGL/ES متوفرًا فقط من خلال محرِّك ANGLE في المستقبل. ومع ذلك، نخطط لمواصلة دعم OpenGL ES على جميع الأجهزة.

الخطوات التالية المقترحة

استخدِم خيارات المطوّرين لتحديد برنامج تشغيل محرِّك ANGLE على OpenGL ES واختبار تطبيقك. وبالنسبة إلى المشاريع الجديدة، ننصحك بشدة باستخدام Vulkan لـ C/C++.

تحسينات على "لوحة الرسم"

يواصل Android 15 تحديث نظام رسومات Canvas من Android بإمكانات جديدة:

  • Matrix44 توفّر مصفوفة 4×4 لتحويل الإحداثيات التي يجب استخدامها عندما تريد معالجة اللوحة في العرض الثلاثي الأبعاد.
  • يتقاطع clipShader مع المقطع الحالي مع التظليل المحدد، بينما يضبط clipOutShader المقطع على الفرق بين المقطع الحالي وأداة التظليل، حيث يتعامل كل منهما مع أداة التظليل على أنه قناع ألفا. يدعم هذا رسم الأشكال المعقدة بكفاءة.

الأداء والبطارية

يواصل Android تركيزه على مساعدتك في تحسين أداء تطبيقاتك وجودتها. يقدِّم Android 15 واجهات برمجة تطبيقات جديدة تساعد في زيادة كفاءة المهام في تطبيقك من حيث التنفيذ وتحسين أداء التطبيق وجمع إحصاءات حول تطبيقاتك.

للتعرّف على أفضل الممارسات المتعلقة بتوفير استهلاك البطارية، وتصحيح أخطاء الشبكة واستخدام الطاقة، والتفاصيل حول كيفية تحسين كفاءة البطارية في الخلفية في Android 15 والإصدارات الأحدث من Android، يمكنك الاطّلاع على المقالة تحسين كفاءة العمل في الخلفية على Android من مؤتمر Google I/O.

واجهة برمجة التطبيقات ApplicationStartInfo

في الإصدارات السابقة من Android، كان بدء تشغيل التطبيق لغزًا إلى حدٍ ما. كان من الصعب تحديد ما إذا كان تطبيقك بدأ من حالة باردة أو دافئة أو ساخنة. وكان من الصعب أيضًا معرفة المدة التي قضاها تطبيقك في مراحل الإطلاق المختلفة، مثل إجراء مراحل عملية الإطلاق، واستدعاء onCreate، ورسم الإطار الأول، وغير ذلك. عندما تم إنشاء مثيل لصف Application، لم تكن هناك طريقة لمعرفة ما إذا كان التطبيق قد بدأ من خلال بث أو من مقدِّم محتوى أو وظيفة أو نسخة احتياطية أو اكتمال التشغيل أو منبّه أو جهاز Activity.

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

معلومات تفصيلية عن حجم التطبيق

Since Android 8.0 (API level 26), Android has included the StorageStats.getAppBytes API that summarizes the installed size of an app as a single number of bytes, which is a sum of the APK size, the size of files extracted from the APK, and files that were generated on the device such as ahead-of-time (AOT) compiled code. This number is not very insightful in terms of how your app is using storage.

Android 15 adds the StorageStats.getAppBytesByDataType([type]) API, which lets you get insight into how your app is using up all that space, including APK file splits, AOT and speedup related code, dex metadata, libraries, and guided profiles.

تحليل الملف التعريفي المُدار من خلال التطبيق

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

تحسينات قاعدة بيانات SQLite

Android 15 introduces new SQLite APIs that expose advanced features from the underlying SQLite engine that target specific performance issues that can manifest in apps.

Developers should consult best practices for SQLite performance to get the most out of their SQLite database, especially when working with large databases or when running latency-sensitive queries.

  • Read-only deferred transactions: when issuing transactions that are read-only (don't include write statements), use beginTransactionReadOnly() and beginTransactionWithListenerReadOnly(SQLiteTransactionListener) to issue read-only DEFERRED transactions. Such transactions can run concurrently with each other, and if the database is in WAL mode, they can run concurrently with IMMEDIATE or EXCLUSIVE transactions.
  • Row counts and IDs: new APIs were added to retrieve the count of changed rows or the last inserted row ID without issuing an additional query. getLastChangedRowCount() returns the number of rows that were inserted, updated, or deleted by the most recent SQL statement within the current transaction, while getTotalChangedRowCount() returns the count on the current connection. getLastInsertRowId() returns the rowid of the last row to be inserted on the current connection.
  • Raw statements: issue a raw SQlite statement, bypassing convenience wrappers and any additional processing overhead that they may incur.

تحديثات "إطار عمل الأداء الديناميكي على Android"

Android 15 continues our investment in the Android Dynamic Performance Framework (ADPF), a set of APIs that allow games and performance intensive apps to interact more directly with power and thermal systems of Android devices. On supported devices, Android 15 will add new ADPF capabilities:

  • A power-efficiency mode for hint sessions to indicate that their associated threads should prefer power saving over performance, great for long-running background workloads.
  • GPU and CPU work durations can both be reported in hint sessions, allowing the system to adjust CPU and GPU frequencies together to best meet workload demands.
  • Thermal headroom thresholds to interpret possible thermal throttling status based on headroom prediction.

To learn more about how to use ADPF in your apps and games, head over to the documentation.

الخصوصية

يتضمّن Android 15 مجموعة متنوعة من الميزات التي تساعد مطوّري التطبيقات على حماية خصوصية المستخدم.

رصد تسجيل الشاشة

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

val mCallback = Consumer<Int> { state ->
  if (state == SCREEN_RECORDING_STATE_VISIBLE) {
    // We're being recorded
  } else {
    // We're not being recorded
  }
}

override fun onStart() {
   super.onStart()
   val initialState =
      windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
   mCallback.accept(initialState)
}

override fun onStop() {
    super.onStop()
    windowManager.removeScreenRecordingCallback(mCallback)
}

إمكانات IntentFilter الموسّعة

يدعم Android 15 توفير درجة دقة أكثر دقة عند استخدام Intent من خلال نظام UriRelativeFilterGroup الذي يحتوي على مجموعة من عناصر UriRelativeFilter التي تشكّل مجموعة من قواعد Intent المطابِقة التي يجب استيفاء كلّ منها، بما في ذلك مَعلمات طلب البحث لعناوين URL وأجزاء عناوين URL وقواعد الحظر أو الاستبعاد.

يمكن تحديد هذه القواعد في ملف XML AndroidManifest باستخدام علامة <uri-relative-filter-group> الجديدة التي يمكن أن تتضمّن علامة android:allow بشكل اختياري. يمكن أن تحتوي هذه العلامات على علامات <data> التي تستخدم سمات علامات البيانات الحالية، بالإضافة إلى السمتَين android:query وandroid:fragment الجديدتَين.

إليك مثال على بنية AndroidManifest:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:domain="astore.com" />
  <uri-relative-filter-group>
    <data android:pathPrefix="/auth" />
    <data android:query="region=na" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:query="mobileoptout=true" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:fragmentPrefix="faq" />
  </uri-relative-filter-group>
</intent-filter>

المساحة الخاصة

The private space can be unlocked and locked to show or hide sensitive apps on a device.

Private space lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. The private space uses a separate user profile. The user can choose to use the device lock or a separate lock factor for the private space.

Apps in the private space show up in a separate container in the launcher, and are hidden from the recents view, notifications, settings, and from other apps when the private space is locked. User-generated and downloaded content (such as media or files) and accounts are separated between the private space and the main space. The system sharesheet and the photo picker can be used to give apps access to content across spaces when the private space is unlocked.

Users can't move existing apps and their data into the private space. Instead, users select an install option in the private space to install an app using whichever app store they prefer. Apps in the private space are installed as separate copies from any apps in the main space (new copies of the same app).

When a user locks the private space, the profile is stopped. While the profile is stopped, apps in the private space are no longer active and can't perform foreground or background activities, including showing notifications.

We recommend that you test your app with private space to make sure your app works as expected, especially if your app falls into one of the following categories:

طلب البحث عن أحدث خيارات المستخدم للوصول إلى الصور المحددة

It is now possible for apps to highlight only the most recently selected photos and videos when partial access to media permissions is granted. This feature can improve the user experience for apps that frequently request access to photos and videos. To use this feature in your app, enable the QUERY_ARG_LATEST_SELECTION_ONLY argument when querying MediaStore through ContentResolver.

Kotlin

val externalContentUri = MediaStore.Files.getContentUri("external")

val mediaColumns = arrayOf(
   FileColumns._ID,
   FileColumns.DISPLAY_NAME,
   FileColumns.MIME_TYPE,
)

val queryArgs = bundleOf(
   // Return only items from the last selection (selected photos access)
   QUERY_ARG_LATEST_SELECTION_ONLY to true,
   // Sort returned items chronologically based on when they were added to the device's storage
   QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",
   QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",
   QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(
       FileColumns.MEDIA_TYPE_IMAGE.toString(),
       FileColumns.MEDIA_TYPE_VIDEO.toString()
   )
)

Java

Uri externalContentUri = MediaStore.Files.getContentUri("external");

String[] mediaColumns = {
    FileColumns._ID,
    FileColumns.DISPLAY_NAME,
    FileColumns.MIME_TYPE
};

Bundle queryArgs = new Bundle();
queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true);
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC");
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?");
queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] {
    String.valueOf(FileColumns.MEDIA_TYPE_IMAGE),
    String.valueOf(FileColumns.MEDIA_TYPE_VIDEO)
});

"مبادرة حماية الخصوصية" على Android

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

Health Connect

Android 15 integrates the latest extensions around Health Connect by Android, a secure and centralized platform to manage and share app-collected health and fitness data. This update adds support for new data types across fitness, nutrition, skin temperature, training plans, and more.

Skin temperature tracking allows users to store and share more accurate temperature data from a wearable or other tracking device.

Training plans are structured workout plans to help a user achieve their fitness goals. Training plans support includes a variety of completion and performance goals:

Learn more about the latest updates to Health Connect in Android in the Building adaptable experiences with Android Health talk from Google I/O.

مشاركة جزء من الشاشة

Android 15 supports partial screen sharing so users can share or record just an app window rather than the entire device screen. This feature, first enabled in Android 14 QPR2, includes MediaProjection callbacks that allow your app to customize the partial screen sharing experience. Note that for apps targeting Android 14 (API level 34) or higher, user consent is now required for each MediaProjection capture session.

تجربة المستخدم وواجهة مستخدم النظام

يمنح Android 15 مطوّري التطبيقات والمستخدمين مزيدًا من التحكّم والمرونة لضبط أجهزتهم بحيث تناسب احتياجاتهم.

لمعرفة مزيد من المعلومات حول كيفية استخدام آخر التحسينات في Android 15 لتحسين تجربة المستخدم في تطبيقك، يمكنك الاطّلاع على محاضرة تحسين تجربة المستخدم في تطبيق Android من مؤتمر Google I/O.

معاينات أكثر ثراءً للأدوات باستخدام واجهة برمجة التطبيقات للمعاينات التي تم إنشاؤها

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

يتيح نظام Android 15 استخدام المعاينات التي يتم إنشاؤها. وهذا يعني أنّه يمكن لموفّري تطبيقات الأدوات المصغّرة إنشاء RemoteViews لاستخدامها كمعاينة لأداة الاختيار، بدلاً من مورد ثابت.

يمكن للتطبيقات توفير ميزة "طرق العرض عن بُعد" لـ "أداة اختيار التطبيقات المصغّرة" بحيث يمكنها تعديل المحتوى في أداة الاختيار ليكون أكثر تمثيلاً لما يراه المستخدم.

واجهة برمجة التطبيقات Push

يمكن أن توفّر التطبيقات معاينات تم إنشاؤها من خلال واجهة برمجة تطبيقات Push. يمكن أن توفّر التطبيقات معاينات في أي مرحلة من مراحل نشاطها، ولا تتلقّى طلبًا صريحًا من المضيف لتوفير معاينات. يستمر الاحتفاظ بالمعاينات في AppWidgetService، ويمكن للمضيفين طلبها عند الطلب. يؤدي المثال التالي إلى تحميل مورد تنسيق أداة XML وتعيينه كمعاينة:

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

التدفق المتوقع هو:

  1. يطلب موفِّر التطبيقات المصغّرة في أي وقت الرمز setWidgetPreview. أمّا المعاينات المقدَّمة، فتستمر في AppWidgetService مع معلومات مقدّم الخدمة الأخرى.
  2. تُبلِغ setWidgetPreview مضيفي النسخة المعدّلة من خلال معاودة الاتصال في AppWidgetHost.onProvidersChanged. استجابةً لذلك، يعيد مضيف الأداة المصغّرة تحميل جميع معلومات المزود.
  3. عند عرض معاينة للأداة، يتحقّق المضيف من AppWidgetProviderInfo.generatedPreviewCategories، وفي حال كانت الفئة التي تم اختيارها متاحة، يطلب AppWidgetManager.getWidgetPreview عرض المعاينة المحفوظة لهذا مقدّم الخدمة.

وقت الاتصال بخدمة setWidgetPreview

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

توضِّح القائمة التالية الفئتَين الرئيسيتَين لحالات استخدام المعاينة:

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

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

نافذة ضمن النافذة

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

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

من خلال حالة واجهة المستخدم الجديدة هذه، سترصد التطبيقات التي تستهدف الإصدار 15 من نظام التشغيل Android معاودة الاتصال بـ Activity#onPictureInPictureUiStateChanged عند استدعاء isTransitioningToPip() فور بدء الصورة المتحركة في وضع "نافذة ضمن النافذة". هناك العديد من عناصر واجهة المستخدم التي لا صلة لها بالتطبيق عندما يكون في وضع "نافذة ضمن النافذة"، مثلاً طرق العرض أو التنسيق الذي يتضمّن معلومات مثل الاقتراحات والفيديوهات القادمة والتقييمات والعناوين. عندما ينتقل التطبيق إلى وضع "نافذة ضمن النافذة"، عليك استخدام وظيفة معاودة الاتصال onPictureInPictureUiStateChanged لإخفاء عناصر واجهة المستخدم هذه. عند انتقال التطبيق إلى وضع ملء الشاشة من نافذة "نافذة ضمن النافذة"، استخدِم ميزة معاودة الاتصال بنسبة onPictureInPictureModeChanged لإظهار هذه العناصر على النحو الموضّح في الأمثلة التالية:

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
        if (pipState.isTransitioningToPip()) {
          // Hide UI elements
        }
    }
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
        if (isInPictureInPictureMode) {
          // Unhide UI elements
        }
    }

يساعد هذا التبديل السريع لعرض العناصر في واجهة المستخدم غير المرتبطة بالموضوع (بالنسبة إلى نافذة "نافذة ضمن النافذة") على ضمان إدخال صورة متحركة أكثر سلاسة وخالية من الوميض.

قواعد مُحسَّنة لميزة "عدم الإزعاج"

يسمح الإعداد AutomaticZenRule للتطبيقات بتخصيص قواعد "إدارة الانتباه (عدم الإزعاج)" وتحديد وقت تفعيلها أو إيقافها. يعزّز نظام Android 15 هذه القواعد بشكل كبير بهدف تحسين تجربة المستخدم. يتم تضمين التحسينات التالية:

  • إضافة أنواع إلى AutomaticZenRule، ما يسمح للنظام بتطبيق معاملة خاصة على بعض القواعد
  • جارٍ إضافة رمز إلى AutomaticZenRule لتسهيل التعرّف على الأوضاع.
  • إضافة سلسلة triggerDescription إلى AutomaticZenRule توضّح الشروط التي يجب أن تصبح القاعدة نشطة وفقًا لها للمستخدم
  • تمت إضافة ZenDeviceEffects إلى AutomaticZenRule، ما يتيح للقواعد تفعيل عناصر مثل عرض تدرّج الرمادي أو الوضع الليلي أو تعتيم الخلفية.

تعيين VibrationEffect لقنوات الإشعارات

يتيح Android 15 ضبط اهتزازات قوية للإشعارات الواردة على القناة باستخدام NotificationChannel.setVibrationEffect، ليتمكّن المستخدمون من التفريق بين الأنواع المختلفة من الإشعارات بدون الحاجة إلى النظر إلى أجهزتهم.

الشاشات الكبيرة وعوامل الشكل

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

تحسين أداء المهام المتعددة على الشاشة الكبيرة

Android 15 gives users better ways to multitask on large screen devices. For example, users can save their favorite split-screen app combinations for quick access and pin the taskbar on screen to quickly switch between apps. This means that making sure your app is adaptive is more important than ever.

Google I/O has sessions on Building adaptive Android apps and Building UI with the Material 3 adaptive library that can help, and our documentation has more to help you Design for large screens.

دعم شاشة الغطاء

يمكن لتطبيقك توضيح موقع يستخدمه Android 15 للسماح بعرض Application أو Activity على شاشات الغلاف الصغيرة للأجهزة القابلة للطي المتوافقة. هذه الشاشات صغيرة جدًا بحيث لا يمكن اعتبارها استهدافات متوافقة مع تطبيقات Android لتشغيلها، ولكن يمكن لتطبيقك الموافقة على دعمها، مما يجعل تطبيقك متاحًا في المزيد من الأماكن.

إمكانية الاتصال

يُحدِّث Android 15 النظام الأساسي لمنح تطبيقك إمكانية الوصول إلى أحدث التطورات في تقنيات الاتصال واللاسلكي.

دعم الأقمار الصناعية

Android 15 continues to extend platform support for satellite connectivity and includes some UI elements to ensure a consistent user experience across the satellite connectivity landscape.

Apps can use ServiceState.isUsingNonTerrestrialNetwork() to detect when a device is connected to a satellite, giving them more awareness of why full network services might be unavailable. Additionally, Android 15 provides support for SMS and MMS apps as well as preloaded RCS apps to use satellite connectivity for sending and receiving messages.

A notification appears when the device connects to a satellite.

تجارب أكثر سلاسة عبر NFC

Android 15 is working to make the tap to pay experience more seamless and reliable while continuing to support Android's robust NFC app ecosystem. On supported devices, apps can request the NfcAdapter to enter observe mode, where the device listens but doesn't respond to NFC readers, sending the app's NFC service PollingFrame objects to process. The PollingFrame objects can be used to auth ahead of the first communication to the NFC reader, allowing for a one tap transaction in many cases.

In addition, apps can now register a filter on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.

دور "محفظة Google"

يقدّم Android 15 دورًا جديدًا في "محفظة Google" يتيح دمجًا أكثر دقة مع تطبيق المحفظة المفضّل لدى المستخدم. ويحلّ هذا الدور محلّ إعدادات الدفع بدون تلامس الأجهزة التلقائية لتقنية NFC. يمكن للمستخدمين إدارة صاحب دور المحفظة من خلال الانتقال إلى الإعدادات > التطبيقات > التطبيقات التلقائية.

يُستخدَم دور "المحفظة" عند توجيه نقرات NFC لمعرّفات AID المسجّلة في فئة الدفع. تصل النقرات دائمًا إلى صاحب دور "محفظة Google" ما لم يكن هناك تطبيق آخر مُسجَّل في معرّف AID نفسه قيد التشغيل في المقدّمة.

يُستخدَم هذا الدور أيضًا لتحديد المكان الذي يجب أن ينتقل إليه مربّع الوصول السريع في "محفظة Google" عند تفعيله. عند ضبط الدور على "None" ("بدون")، لا يكون مربّع QuickAccess متاحًا، ولا يتم عرض نقرات NFC في فئة الدفع إلا على التطبيق المُقدَّم في المقدّمة.

الأمان

يساعدك نظام التشغيل Android 15 على تعزيز أمان تطبيقك وحماية بياناته ويمنح المستخدمين المزيد من الشفافية والتحكّم في بياناتهم. يمكنك الاطّلاع على محاضرات حماية مستخدمي Android من مؤتمر Google I/O لمعرفة المزيد عن الإجراءات التي نتّخذها لتحسين إجراءات حماية المستخدمين وحماية تطبيقك من التهديدات الجديدة.

دمج "مدير بيانات الاعتماد" مع ميزة "الملء التلقائي"

Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.

الاشتراك بنقرة واحدة وتسجيل الدخول مع إشعارات المقاييس الحيوية

Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.

إدارة المفاتيح للتشفير التام بين الأطراف

نحن بصدد طرح E2eeContactKeysManager في نظام Android 15 الذي يسهّل التشفير التام بين الأطراف (E2EE) في تطبيقات Android الخاصة بك من خلال توفير واجهة برمجة تطبيقات على مستوى نظام التشغيل لتخزين المفاتيح العامة المشفّرة.

تم تصميم E2eeContactKeysManager للتكامل مع تطبيق "جهات الاتصال" على النظام الأساسي لمنح المستخدمين طريقة مركزية لإدارة المفاتيح العامة لجهات الاتصال والتحقق منها.

عمليات التحقق من الأذونات على معرّفات الموارد المنتظمة (URI) للمحتوى

يقدّم Android 15 مجموعة جديدة من واجهات برمجة التطبيقات التي تُجري عمليات تحقّق من أذونات الوصول إلى معرّفات الموارد المنتظمة (URI) للمحتوى:

  • Context.checkContentUriPermissionFull: يؤدي هذا الخيار إلى إجراء التحقق من الأذونات الكاملة لمعرّفات الموارد المنتظمة (URI) للمحتوى.
  • سمة البيان Activity requireContentUriPermissionFromCaller: يؤدي ذلك إلى فرض أذونات محدّدة على معرّفات الموارد المنتظمة (URI) للمحتوى التي تم توفيرها عند بدء النشاط.
  • فئة ComponentCaller للمتصلين Activity: يمثل هذا التطبيق الذي أطلق النشاط.

تسهيل الاستخدام

يضيف Android 15 ميزات لتحسين إمكانية الوصول للمستخدمين.

لغة برايل أفضل

In Android 15, we've made it possible for TalkBack to support Braille displays that are using the HID standard over both USB and secure Bluetooth.

This standard, much like the one used by mice and keyboards, will help Android support a wider range of Braille displays over time.

التوافق مع أسواق عالمية

يضيف Android 15 ميزات وإمكانات تكمّل تجربة المستخدم عند استخدام الجهاز بلغات مختلفة.

خط متغيّر CJK

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

كيف يظهر الخط المتغيّر للغات الصينية واليابانية والكورية (CJK) بعرض خط مختلف.

التبرير بين الأحرف

Starting with Android 15, text can be justified utilizing letter spacing by using JUSTIFICATION_MODE_INTER_CHARACTER. Inter-word justification was first introduced in Android 8.0 (API level 26), and inter-character justification provides similar capabilities for languages that use the whitespace character for segmentation, such as Chinese, Japanese, and others.

Layout for Japanese text using JUSTIFICATION_MODE_NONE.
Layout for English text using JUSTIFICATION_MODE_NONE.


Layout for Japanese text using JUSTIFICATION_MODE_INTER_WORD.
Layout for English text using JUSTIFICATION_MODE_INTER_WORD.


Layout for Japanese text using the new JUSTIFICATION_MODE_INTER_CHARACTER.
Layout for English text using the new JUSTIFICATION_MODE_INTER_CHARACTER.

إعداد فاصل الأسطر التلقائي

Android started supporting phrase-based line breaks for Japanese and Korean in Android 13 (API level 33). However, while phrase-based line breaks improve the readability of short lines of text, they don't work well for long lines of text. In Android 15, apps can now apply phrase-based line breaks only for short lines of text, using the LINE_BREAK_WORD_STYLE_AUTO option. This option selects the best word style option for the text.

For short lines of text, phrase-based line breaks are used, functioning the same as LINE_BREAK_WORD_STYLE_PHRASE, as shown in the following image:

For short lines of text, LINE_BREAK_WORD_STYLE_AUTO applies phrase-based line breaks to improve the readability of the text. This is the same as applying LINE_BREAK_WORD_STYLE_PHRASE.

For longer lines of text, LINE_BREAK_WORD_STYLE_AUTO uses a no line-break word style, functioning the same as LINE_BREAK_WORD_STYLE_NONE, as shown in the following image:

For long lines of text, LINE_BREAK_WORD_STYLE_AUTO applies no line-break word style to improve the readability of the text. This is the same as applying LINE_BREAK_WORD_STYLE_NONE.

خط Hentaigana الياباني الجديد

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

نمط الحرف والنص لخط "هنتايغانا" الياباني:

حقوق الطبع والنشر لـ VideoLAN المخروطية (c) 1996-2010 VideoLAN. يمكن لأي شخص استخدام هذا الشعار أو نسخة معدلة أو تعديلها للإشارة إلى مشروع VideoLAN أو أي منتج طوّره فريق VideoLAN، ولكنها لا تشير إلى توصية من المشروع.

Vulkan وشعار Vulkan هما علامتان تجاريتان مسجَّلتان لشركة الخronos Group Inc.

OpenGL هي علامة تجارية مسجّلة، وشعار OpenGL ES هو علامة تجارية لشركة Hewlett Packard Enterprise وتستخدمها بموجب إذن من شركةKronos.