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

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

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

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

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

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

تحسين الإضاءة المنخفضة

Android 15 introduces Low Light Boost, an auto-exposure mode available to both Camera 2 and the night mode camera extension. Low Light Boost adjusts the exposure of the Preview stream in low-light conditions. This is different from how the night mode camera extension creates still images, because night mode combines a burst of photos to create a single, enhanced image. While night mode works very well for creating a still image, it can't create a continuous stream of frames, but Low Light Boost can. Thus, Low Light Boost enables camera capabilities, such as:

  • Providing an enhanced image preview, so users are better able to frame their low-light pictures
  • Scanning QR codes in low light

If you enable Low Light Boost, it automatically turns on when there's a low light level, and turns off when there's more light.

Apps can record off the Preview stream in low-light conditions to save a brightened video.

For more information, see Low Light Boost.

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

Android 15 添加了一个扩展程序,可让您更好地控制支持的设备上的相机硬件及其算法:

  • 高级闪光灯强度调整:在拍摄图片时,可在 SINGLETORCH 模式下精确控制闪光灯强度。

التحكّم في الحد الأقصى لمستوى الإضاءة في HDR

Android 15 会选择适合底层设备功能和面板位深的 HDR 余量。对于包含大量 SDR 内容的网页(例如显示单个 HDR 缩略图的消息应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。在 Android 15 中,您可以使用 setDesiredHdrHeadroom 控制 HDR 余量,以便在 SDR 内容和 HDR 内容之间取得平衡。

左侧屏幕上的 SDR 界面元素的亮度似乎比右侧屏幕上的亮度更均匀,这模拟了混合 HDR 和 SDR 内容时可能出现的余量问题。通过调整 HDR 余量,您可以在 SDR 和 HDR 内容之间实现更好的平衡。

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

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

لتفعيل هذه الميزة، عليك التأكّد من توفّر البيانات الوصفية لمستوى الصوت في محتوى AAC وتفعيل ميزة النظام الأساسي في تطبيقك. ولإجراء ذلك، عليك إنشاء عنصر LoudnessCodecController من خلال استدعاء طريقة المصنع create مع معرّف جلسة المحتوى الصوتي من AudioTrack المرتبط، ما يؤدي بدوره إلى بدء تطبيق تعديلات الصوت تلقائيًا. يمكنك تمرير OnLoudnessCodecUpdateListener لتعديله أو فلترته معاملات ارتفاع الصوت قبل تطبيقها 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 لاستخدام واجهات برمجة تطبيقات LoudnessCodecController من أجل دمج سلس للتطبيقات

أجهزة Virtual MIDI 2.0

Android 13 added support for connecting to MIDI 2.0 devices using USB, which communicate using Universal MIDI Packets (UMP). Android 15 extends UMP support to virtual MIDI apps, enabling composition apps to control synthesizer apps as a virtual MIDI 2.0 device just like they would with an USB MIDI 2.0 device.

فك ترميز AV1 باستخدام البرامج بكفاءة أكبر

شعار dav1d

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

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

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

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

تعديلات OpenJDK 17

يواصل نظام التشغيل Android 15 العمل على إعادة تحميل المكتبات الأساسية لنظام التشغيل Android لمواءمتها مع الميزات في أحدث إصدارات OpenJDK LTS.

في ما يلي الميزات والتحسينات الرئيسية:

يتم تحديث واجهات برمجة التطبيقات هذه على أكثر من مليار جهاز يعمل بالإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث من خلال تحديثات نظام Google Play، ما يتيح لك استخدام أحدث الميزات البرمجية.

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

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

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

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

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

Android 14 在音频中添加了设备端多语言识别功能,并支持在语言之间自动切换,但这可能会导致丢失字词,尤其是当两次语音之间语言切换的间隔时间较短时。Android 15 添加了其他控件,以帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS 会将自动切换限制在音频会话开始时,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES 会在发生指定次数的切换后停用语言切换。如果您预计会话期间只会使用一种语言,并且该语言应被自动检测到,这些选项会特别有用。

واجهة برمجة تطبيقات محسّنة لخطوط OpenType المتغيّرة

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

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

Starting in Android 15, a TextView and the underlying line breaker can preserve the given portion of text in the same line to improve readability. You can take advantage of this line break customization by using the <nobreak> tag in string resources or createNoBreakSpan. Similarly, you can preserve words from hyphenation by using the <nohyphen> tag or createNoHyphenationSpan.

For example, the following string resource doesn't include a line break, and renders with the text "Pixel 8 Pro." breaking in an undesirable place:

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

In contrast, this string resource includes the <nobreak> tag, which wraps the phrase "Pixel 8 Pro." and prevents line breaks:

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

The difference in how these strings are rendered is shown in the following images:

Layout for a line of text where the phrase "Pixel 8 Pro." isn't wrapped using a <nobreak> tag.
Layout for the same line of text where the phrase "Pixel 8 Pro." is wrapped using a <nobreak> tag.

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

Android 和 Google Play 宣布支持最后的应用归档功能 年,这让用户可以通过移除部分内容来释放空间 通过 Android 应用发布的设备中不常用的应用 前往 Google Play 下载套装。Android 15 在操作系统级别支持应用归档和解压缩,让所有应用商店都能更轻松地实现归档和解压缩。

具有 REQUEST_DELETE_PACKAGES 权限的应用可以调用 PackageInstaller requestArchive 方法请求归档 已安装的应用软件包,这会移除 APK 和所有缓存的文件,但会保留 用户数据已归档的应用会通过 LauncherApps API 作为可显示的应用返回;用户会看到一个界面处理,以突出显示这些应用已归档。如果用户点按已归档的应用,负责安装的应用会收到解除归档请求,并且可以通过 ACTION_PACKAGE_ADDED 广播监控恢复过程。

使用开发者选项在设备上启用 16 KB 模式

切换以 16KB 页面大小启动设备开发者选项,以便在 16 KB 模式下启动设备。

从 Android 15 QPR1 开始,您可以使用某些设备上提供的开发者选项,以 16 KB 模式启动设备并执行设备端测试。在使用开发者选项之前,请依次前往“设置”->“系统”->“软件更新”,然后应用所有可用的更新。

此开发者选项适用于以下设备:

  • Pixel 8 和 Pixel 8 Pro(搭载 Android 15 QPR1 或更高版本)

    警告:由于 Android 15 QPR2 Beta 版 3 存在已知问题,在安装 Android 15 QPR2 Beta 版 3 并以 16 KB 模式启动设备后,Pixel 8 设备上的触摸屏无法正常使用。此问题不会影响 Pixel 8 Pro 设备。

  • Pixel 8a(搭载 Android 15 QPR1 或更高版本)

    警告:由于 Android 15 QPR2 Beta 版 3 存在已知问题,在安装 Android 15 QPR2 Beta 版 3 并以 16 KB 模式启动设备后,Pixel 8a 设备上的触摸屏无法正常使用。

  • Pixel 9、Pixel 9 Pro 和 Pixel 9 Pro XL(搭载 Android 15 QPR2 Beta 2 或更高版本)

الرسومات

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

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

شعار Vulkan

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

‫Vulkan هي واجهة Android المفضّلة لوحدة معالجة الرسومات. لذلك، يتضمّن الإصدار 15 من Android ANGLE كطبقة اختيارية لتشغيل OpenGL® ES على Vulkan. سيؤدي الانتقال إلى ANGLE إلى توحيد تنفيذ OpenGL في Android لتحسين التوافق، وفي بعض الحالات، تحسين الأداء. يمكنك اختبار ثبات تطبيق 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 المقطع الحالي بالshader المحدّد، في حين يضبط clipOutShader المقطع على اختلاف المقطع الحالي والshader، مع اعتبار كل منهما shader على أنّه قناع شفافية. يتيح ذلك رسم أشكال معقّدة بكفاءة.

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

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

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

ApplicationStartInfo API

在以前的 Android 版本中,应用启动一直是个谜。在应用中确定应用是从冷启动、温启动还是热启动状态启动很困难。您还很难了解应用在各种启动阶段(分叉进程、调用 onCreate、绘制第一个帧等)所花的时间。在 Application 类被实例化时,您无法知道应用是通过广播、content provider、作业、备份、启动完成、闹钟还是 Activity 启动的。

Android 15 上的 ApplicationStartInfo API 提供了所有这些功能,以及更多功能。您甚至可以选择在流程中添加自己的时间戳,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo 直接优化应用启动;例如,您可以消除在应用因广播而启动时在 Application 类中实例化与界面相关的库所带来的高昂开销。

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

منذ الإصدار 8.0 من Android (المستوى 26 لواجهة برمجة التطبيقات)، يتضمّن Android واجهة برمجة التطبيقات StorageStats.getAppBytes التي تلخّص حجم التطبيق المثبَّت كعدد واحد من البايتات، وهو مجموع حجم حزمة APK وحجم الملفات المستخرَجة من حزمة APK والملفات التي تم إنشاؤها على الجهاز، مثل الرموز البرمجية المجمَّعة مسبقًا (AOT). لا يقدّم هذا الرقم معلومات مفيدة بشأن كيفية استخدام تطبيقك لمساحة التخزين.

يضيف نظام التشغيل Android 15 واجهة برمجة التطبيقات StorageStats.getAppBytesByDataType([type])، التي تتيح لك الحصول على إحصاءات عن كيفية استخدام تطبيقك لكل هذه المساحة، بما في ذلك عمليات تقسيم ملف APK، والرموز البرمجية ذات الصلة بميزة AOT والتسريع، والبيانات الوصفية لملف dex، والمكتبات، والملفات الشخصية الإرشادية.

إعداد الملف الشخصي الذي يديره التطبيق

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

لتبسيط إنشاء طلبات إنشاء ملفات شخصية في تطبيقك، ننصحك باستخدام واجهة برمجة التطبيقات المتوافقة مع Profiling AndroidX API، والمتوفّرة في الإصدار Core 1.15.0-rc01 أو الإصدارات الأحدث.

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

Android 15 introduces SQLite APIs that expose advanced features from the underlying SQLite engine that target specific performance issues that can manifest in apps. These APIs are included with the update of SQLite to version 3.44.3.

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: 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

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

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

للاطّلاع على مزيد من المعلومات عن كيفية استخدام ميزة "الإعلانات الديناميكية على شبكة البحث" في تطبيقاتك وألعابك، يمكنك الانتقال إلى مستندات المساعدة.

الخصوصية

يتضمّن 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 builds in support for more precise Intent resolution through UriRelativeFilterGroup, which contains a set of UriRelativeFilter objects that form a set of Intent matching rules that must each be satisfied, including URL query parameters, URL fragments, and blocking or exclusion rules.

These rules can be defined in the AndroidManifest XML file with the <uri-relative-filter-group> tag, which can optionally include an android:allow tag. These tags can contain <data> tags that use existing data tag attributes as well as the android:query and android:fragment attributes.

Here's an example of the AndroidManifest syntax:

<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:host="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:

طلب آخر اختيار للمستخدِم بشأن الوصول إلى "الصور المحدّدة"

现在,如果应用获得了部分访问权限,则只能突出显示最近选择的照片和视频。此功能可以改善频繁请求访问照片和视频的应用的用户体验。如需在应用中使用此功能,请在通过 ContentResolver 查询 MediaStore 时启用 QUERY_ARG_LATEST_SELECTION_ONLY 参数。

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 includes the latest Android Ad Services extensions, incorporating the latest version of the Privacy Sandbox on Android. This addition is part of our work to develop technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Our privacy sandbox page has more information about the Privacy Sandbox on Android developer preview and beta programs to help you get started.

Health Connect

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

تتيح ميزة تتبُّع درجة حرارة الجلد للمستخدمين تخزين بيانات دترة حرارة أكثر دقة ومشاركتها من جهاز قابل للارتداء أو جهاز تتبُّع آخر.

الخطط التدريبية هي خطط تمارين منظمة لمساعدة المستخدم في تحقيق أهدافه المتعلّقة باللياقة البدنية. يتضمّن دعم الخطط التدريبية مجموعة متنوعة من أهداف الإنجاز والأداء:

يمكنك الاطّلاع على مزيد من المعلومات حول آخر التحديثات التي أُجريت على Health Connect في Android من خلال إنشاء تجارب استخدام قابلة للتكيّف باستخدام Android معلومات حول الصحة من مؤتمر Google I/O

مشاركة شاشة التطبيق

يتيح نظام التشغيل Android 15 مشاركة شاشة التطبيق كي يتمكّن المستخدمون من مشاركة أو تسجيل نافذة التطبيق فقط بدلاً من شاشة الجهاز بالكامل. تم تفعيل هذه الميزة لأول مرة في ملف APK لنظام التشغيل Android 14 QPR2، وتشمل MediaProjection طلبات إعادة الاتصال التي تسمح لتطبيقك بتخصيص تجربة مشاركة شاشة التطبيق. يُرجى العلم أنّه بالنسبة إلى التطبيقات التي تستهدف الإصدار 14 من Android (المستوى 34 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، يجب الحصول على موافقة المستخدم لكل جلسة رصد MediaProjection.

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

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

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

معاينات أكثر تفاعلية للتطبيقات المصغّرة باستخدام واجهة برمجة التطبيقات Generated Previews API

Before Android 15, the only way to provide widget picker previews was to specify a static image or layout resource. These previews often differ significantly from the look of the actual widget when it is placed on the home screen. Also, static resources can't be created with Jetpack Glance, so a Glance developer had to screenshot their widget or create an XML layout to have a widget preview.

Android 15 adds support for generated previews. This means that app widget providers can generate RemoteViews to use as the picker preview, instead of a static resource.

Apps can provide Remote Views to the Widget Picker, so they can update the content in the picker to be more representative of what the user will see.

Push API

Apps can provide generated previews through a push API. Apps can provide previews at any point in their lifecycle, and don't receive an explicit request from the host to provide previews. Previews are persisted in AppWidgetService, and hosts can request them on-demand. The following example loads an XML widget layout resource and sets it as the preview:

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

The expected flow is:

  1. At any time, the widget provider calls setWidgetPreview. The provided previews are persisted in AppWidgetService with other provider info.
  2. setWidgetPreview notifies hosts of an updated preview through the AppWidgetHost.onProvidersChanged callback. In response, the widget host reloads all of its provider information.
  3. When displaying a widget preview, the host checks AppWidgetProviderInfo.generatedPreviewCategories, and if the chosen category is available, calls AppWidgetManager.getWidgetPreview to return the saved preview for this provider.

When to call setWidgetPreview

Because there is no callback to provide previews, apps can choose to send previews at any point when they are running. How often to update the preview depends on the widget's use case.

The following list describes the two main categories of preview use cases:

  • Providers that show real data in their widget previews, such as personalized or recent information. These providers can set the preview once the user has signed in or has done initial configuration in their app. After this, they can set up a periodic task to update the previews at their chosen cadence. Examples of this type of widget could be a photo, calendar, weather or news widget.
  • Providers that show static information in previews or quick-action widgets that don't display any data. These providers can set previews once, when the app first launches. Examples of this type of widget include a drive quick actions widget or chrome shortcuts widget.

Some providers might show static previews on the hub mode picker, but real information on the homescreen picker. These providers should follow the guidance for both of these use cases to set previews.

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

Android 15 对画中画 (PiP) 模式进行了更改,确保在进入画中画模式时实现更流畅的转换。对于在主界面上叠加界面元素的应用,这将非常有用,因为这些元素会进入 PiP。

开发者使用 onPictureInPictureModeChanged 回调来定义用于切换叠加界面元素可见性的逻辑。当 PiP 进入或退出动画完成时,系统会触发此回调。从 Android 15 开始,PictureInPictureUiState 类包含另一种状态。

在这种界面状态下,以 Android 15(API 级别 35)为目标平台的应用会在画中画动画开始后立即观察到使用 isTransitioningToPip() 调用的 Activity#onPictureInPictureUiStateChanged 回调。在 PiP 模式下,许多界面元素与应用无关,例如包含建议、即将播放的视频、评分和标题等信息的视图或布局。当应用进入画中画模式时,请使用 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 supports setting rich vibrations for incoming notifications by channel using NotificationChannel.setVibrationEffect, so your users can distinguish between different types of notifications without having to look at their device.

شريحة شريط حالة "عرض الوسائط" والإيقاف التلقائي

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

شريحة شريط الحالة لمشاركة الشاشة والبث والتسجيل

الشاشات الكبيرة وأشكال الأجهزة

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

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

Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。

Google I/O 大会上有一些关于构建自适应 Android 的会议 应用使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。

إتاحة استخدام الشاشة الخارجية

Your app can declare a property that Android 15 uses to allow your Application or Activity to be presented on the small cover screens of supported flippable devices. These screens are too small to be considered as compatible targets for Android apps to run on, but your app can opt in to supporting them, making your app available in more places.

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

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

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

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

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

سيظهر إشعار عندما يتصل الجهاز بالقمر الصناعي.

تجارب أكثر سلاسة باستخدام تقنية NFC

Android 15 正在努力打造更顺畅、更可靠的感应式付款体验,同时继续支持 Android 强大的 NFC 应用生态系统。在受支持的设备上,应用可以请求 NfcAdapter 进入观察模式,在该模式下,设备会监听但不会响应 NFC 读卡器,并将应用的 NFC 服务 PollingFrame 对象发送以进行处理。PollingFrame 对象可用于在与 NFC 读卡器进行首次通信之前进行身份验证,在许多情况下,这支持一触式交易。

此外,应用可以在受支持的设备上注册过滤器,以便在有轮询循环活动时收到通知,从而能够与多个感知 NFC 的应用顺畅运行。

دور المحفظة

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

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

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

الأمان

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

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

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

دمج ميزة "تسجيل الدخول أو الاشتراك بنقرة واحدة" مع طلبات المقاييس الحيوية

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) للمحتوى

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

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

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

يضيف Android 15 ميزات تحسّن تسهيل الاستخدام للمستخدمين.

تحسينات على لغة برايل

في الإصدار 15 من نظام التشغيل Android، أصبح بإمكان TalkBack إتاحة استخدام شاشات برايل التي تستخدم معيار HID عبر USB وBluetooth الآمن.

سيساعد هذا المعيار، مثل المعيار المستخدَم في الفئران ولوحات المفاتيح، نظام Android على إتاحة نطاق أوسع من أجهزة العرض بلغة برايل بمرور الوقت.

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

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

خط متغيّر باللغة الصينية واليابانية والكورية

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

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

ضبط المسافات بين الأحرف

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

تنسيق للنص الياباني باستخدام JUSTIFICATION_MODE_NONE
تنسيق للنص باللغة الإنجليزية باستخدام JUSTIFICATION_MODE_NONE


تنسيق للنص الياباني باستخدام JUSTIFICATION_MODE_INTER_WORD
تنسيق للنص باللغة الإنجليزية باستخدام JUSTIFICATION_MODE_INTER_WORD


تنسيق للنص الياباني باستخدام JUSTIFICATION_MODE_INTER_CHARACTER
تنسيق النص باللغة الإنجليزية باستخدام 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 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 cone Copyright (c) 1996-2010 VideoLAN. This logo or a modified version may be used or modified by anyone to refer to the VideoLAN project or any product developed by the VideoLAN team, but does not indicate endorsement by the project.

Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc.

OpenGL is a registered trademark and the OpenGL ES logo is a trademark of Hewlett Packard Enterprise used by permission by Khronos.