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

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

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

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

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

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

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

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

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

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

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

لمزيد من المعلومات، يُرجى الاطّلاع على تحسين الإضاءة المنخفضة.

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

يضيف نظام التشغيل Android 15 إضافة تتيح التحكّم بشكل أكبر في أجهزة الكاميرا و algoritms على الأجهزة المتوافقة:

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

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

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

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

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

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.

أجهزة Virtual 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 أداءً أفضل بثلاث مرات مقارنةً ببرنامج فك ترميز 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 版本中的功能保持一致。

其中包含以下主要功能和改进:

这些 API 会通过 Google Play 系统更新在搭载 Android 12(API 级别 31)及更高版本的 10 亿多部设备上更新,以便您以最新的编程功能为目标平台。

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

Android 15 对 PdfRenderer API 进行了重大改进。应用可以整合呈现等高级功能 受密码保护的文件、注释、表单编辑searching,而 selection 则包含副本。支持线性化 PDF 优化,此功能可加快本地 PDF 查看速度并减少资源使用量。Jetpack PDF 库使用这些 API 来简化 PDF 的添加 查看功能。

<ph type="x-smartling-placeholder">
</ph>
PDF 渲染的最新更新包括 搜索嵌入式 PDF 文件中的内容。

PdfRenderer 已移至一个可使用 Google Play 系统更新独立于平台版本,并且我们支持 将这些变更还原到 Android 11(API 级别 30),方法是创建兼容的 Android 15 之前版本的 API Surface,称为 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. إلى حد كبير:

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

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

KotlinJava
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()
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 أيضًا.

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

بدءًا من 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 和 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، لم يكن لديك طريقة لمعرفة ما إذا كان التطبيق قد بدأ من بث أو مقدّم محتوى أو عملية أو خدمة احتياطية أو اكتمال عملية التمهيد أو منبّه أو Activity.

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

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

从 Android 8.0(API 级别 26)开始,Android 包含 StorageStats.getAppBytes API,该 API 会将应用的安装大小总结为一个字节数,该数值是 APK 大小、从 APK 中提取的文件的大小以及在设备上生成的文件(例如提前编译 [AOT] 代码)的总和。此数字对于了解应用的存储空间使用情况而言,没有太大帮助。

Android 15 添加了 StorageStats.getAppBytesByDataType([type]) API,可让您深入了解应用如何使用所有这些空间,包括 APK 文件分块、AOT 和加速相关代码、DEX 元数据、库和引导式配置文件。

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

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

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

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

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

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

  • المعاملات المؤجلة للقراءة فقط: عند إصدار معاملات للقراءة فقط (لا تتضمّن عبارات كتابة)، استخدِم beginTransactionReadOnly() و beginTransactionWithListenerReadOnly(SQLiteTransactionListener) لإصدار معاملات DEFERRED للقراءة فقط. يمكن تنفيذ هذه المعاملات بالتزامن مع بعضها، وإذا كانت قاعدة البيانات في وضع WAL، يمكن تنفيذها بالتزامن مع معاملات IMMEDIATE أو EXCLUSIVE.
  • أعداد الصفوف وأرقام التعريف: تمت إضافة واجهات برمجة التطبيقات لاسترداد عدد الصفوف التي تم تغييرها أو رقم تعريف الصف الذي تم إدراجه مؤخرًا بدون إصدار طلب بحث إضافي. تعرض getLastChangedRowCount() عدد الصفوف التي قد تم إدراجها أو تحديثها أو حذفها من خلال أحدث عبارة SQL في المعاملة الحالية، في حين أنّ getTotalChangedRowCount() يعرض العدد على الاتصال الحالي. تعرض دالة getLastInsertRowId() rowid للصف الأخير لإدراجه في الربط الحالي.
  • الكشوف الأولية: إصدار عبارة SQlite أولية لتجاوز سهولة الاستخدام والبرامج الأخرى وأي نفقات معالجة إضافية قد تتكبدها.

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

Android 15 继续投资于 Android 动态性能框架 (ADPF),这是一组 API,可让游戏和性能密集型应用更为直接地与 Android 设备的电源和散热系统进行互动。在受支持的设备上,Android 15 添加了 ADPF 功能:

  • 针对提示会话的节能模式,用于指明其关联的线程应优先节能而非性能,非常适合长时间运行的后台工作负载。
  • 系统可以在提示会话中报告 GPU 和 CPU 工作时长,以便同时调整 CPU 和 GPU 频率,以最佳方式满足工作负载需求。
  • 热余量阈值,用于根据余量预测来解读可能的热节流状态。

如需详细了解如何在应用和游戏中使用 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 通过 UriRelativeFilterGroup 支持更精确的 Intent 解析,UriRelativeFilterGroup 包含一组 UriRelativeFilter 对象,这些对象构成一组必须满足的 Intent 匹配规则,包括网址查询参数、网址片段以及屏蔽或排除规则。

您可以在 AndroidManifest XML 文件中使用 <uri-relative-filter-group> 标记来定义这些规则,该标记可以包含 android:allow 标记。这些代码可以包含使用现有数据代码属性以及 android:queryandroid:fragment 属性的 <data> 代码。

下面是一个 AndroidManifest 语法示例:

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

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

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

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

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

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

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

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

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

يمكن للتطبيقات الآن إبراز الصور والفيديوهات التي تم اختيارها مؤخرًا فقط عند منح التطبيقات إذن وصول جزئي إلى أذونات الوسائط. يمكن أن تحسِّن هذه الميزة تجربة المستخدم للتطبيقات التي تطلب الوصول إلى الصور والفيديوهات بشكل متكرر. لاستخدام هذه الميزة في تطبيقك، فعِّل الوسيطة QUERY_ARG_LATEST_SELECTION_ONLY عند طلب البحث من MediaStore من خلال ContentResolver.

KotlinJava
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()
   
)
)
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 أحدث الإضافات المتعلقة بتطبيق 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

قبل الإصدار 15 من Android، كانت الطريقة الوحيدة لتقديم معاينات لأداة اختيار التطبيقات المصغّرة هي تحديد مصدر صورة أو تنسيق ثابت. غالبًا ما تختلف هذه المعاينات عن شكل التطبيق المصغّر الفعلي عند وضعه على الشاشة الرئيسية. بالإضافة إلى ذلك، لا يمكن إنشاء موارد ثابتة باستخدام 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

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

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

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

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

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

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 ضبط اهتزازات تفاعلية للإشعارات الواردة من خلال قناة تستخدم NotificationChannel.setVibrationEffect، لذلك يستطيع المستخدمون التمييز بين الأنواع المختلفة من الإشعارات بدون الاضطرار إلى النظر إلى أجهزتهم.

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

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

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

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

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

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

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

جلسات مؤتمر Google I/O حول تصميم Android التكيُّفي التطبيقات وواجهة مستخدم المبنى باستخدام Material 3 المكتبة التكيّفية التي يمكن أن تساعدك، كما توفر مستنداتنا المزيد من المساعدة لتصميم مواقع الشاشات

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

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

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

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

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

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

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

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

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

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

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

دور المحفظة

Android 15 引入了钱包角色,可与用户的首选钱包应用更紧密地集成。此角色会取代 NFC 默认的感应式付款设置。用户可以前往设置 > 应用 > 默认应用,管理钱包角色持有者。

在为在付款类别中注册的 AID 路由 NFC 感应式付款时,系统会使用钱包角色。点按操作始终会转到 Google 钱包角色持有者,除非有已注册相同 AID 的其他应用在前台运行。

此角色还用于确定“Google 钱包”快速访问功能块在启用后应显示在何处。将角色设为“无”时,“快速访问”功能块不可用,并且支付类别 NFC 点按仅传送到前台应用。

الأمان

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

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

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

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

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

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

نقدّم 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) بعرض خطوط مختلف

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

从 Android 15 开始,可以通过 使用 JUSTIFICATION_MODE_INTER_CHARACTER。“字词间的理由”原为 最初是在 Android 8.0(API 级别 26)中引入的, Justifications 功能为使用 例如中文、日语等。

使用 JUSTIFICATION_MODE_NONE 的日语文本布局。
使用 JUSTIFICATION_MODE_NONE 的英语文本布局。


使用 JUSTIFICATION_MODE_INTER_WORD 的日语文本布局。
使用 JUSTIFICATION_MODE_INTER_WORD 的英语文本布局。


使用 JUSTIFICATION_MODE_INTER_CHARACTER 的日语文本布局。
使用 JUSTIFICATION_MODE_INTER_CHARACTER 的英语文本布局。

ضبط فاصل الأسطر التلقائي

Android 从以下语言开始支持基于短语的日语和韩语换行: Android 13(API 级别 33)。不过,虽然基于短语的行分隔符可以提高短文本行的可读性,但对于长文本行,效果并不理想。在 Android 15 中,应用只能使用 LINE_BREAK_WORD_STYLE_AUTO 选项,针对短文本行应用基于短语的行分隔符。此选项会为文本选择最佳字词样式选项。

对于短文本行,则使用基于短语的换行符,功能相同 为 LINE_BREAK_WORD_STYLE_PHRASE,如 以下图片:

对于短文本行,LINE_BREAK_WORD_STYLE_AUTO 应用基于短语的换行符,以提高文本的可读性。 这与应用 LINE_BREAK_WORD_STYLE_PHRASE

对于较长的文本行,LINE_BREAK_WORD_STYLE_AUTO 会使用 no 换行字词样式, LINE_BREAK_WORD_STYLE_NONE,如 以下图片:

对于较长的文本,LINE_BREAK_WORD_STYLE_AUTO 应用不换行的字词样式,以提高文本的可读性。 这与应用 LINE_BREAK_WORD_STYLE_NONE

خط إضافي للغة اليابانية Hentaigana

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

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

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

Vulkan وشعار Vulkan علامتان تجاريتان مسجّلتان لشركة Khronos Group Inc.

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