يقدّم نظام التشغيل Android 15 ميزات وواجهات برمجة تطبيقات رائعة للمطوّرين. توضّح الأقسام التالية هذه الميزات لمساعدتك على البدء في استخدام واجهات برمجة التطبيقات ذات الصلة.
للحصول على قائمة مفصّلة بواجهات برمجة التطبيقات التي تمت إضافتها وتعديلها وإزالتها، يُرجى الاطّلاع على تقرير الاختلافات في واجهات برمجة التطبيقات. للحصول على تفاصيل حول واجهات برمجة التطبيقات المضافة، يُرجى الانتقال إلى مرجع واجهة برمجة تطبيقات Android. بالنسبة إلى Android 15، ابحث عن واجهات برمجة التطبيقات التي تمت إضافتها في المستوى 35 لواجهة برمجة التطبيقات. للتعرّف على المجالات التي قد تؤثّر فيها تغييرات النظام الأساسي في تطبيقاتك، احرص على الاطّلاع على التغييرات في سلوك Android 15 للتطبيقات التي تستهدف Android 15 ولجميع التطبيقات.
الكاميرا والوسائط
يتضمّن Android 15 مجموعة متنوعة من الميزات التي تحسّن تجربة استخدام الكاميرا والوسائط، وتتيح لك الوصول إلى الأدوات والأجهزة التي تساعد صنّاع المحتوى في تنفيذ أفكارهم الإبداعية على Android.
لمزيد من المعلومات حول أحدث الميزات والحلول المتاحة للمطوّرين في ما يخص الوسائط والكاميرا على Android، يمكنك مشاهدة جلسة إنشاء تجارب حديثة في ما يخص الوسائط والكاميرا على Android من مؤتمر Google I/O.
تحسين الإضاءة المنخفضة
يقدّم نظام التشغيل Android 15 ميزة تحسين الإضاءة المنخفضة، وهو وضع للتعرّض التلقائي للضوء متاح في كلاً من الكاميرا 2 وإضافة "الوضع الليلي" في الكاميرا. تعمل ميزة "تحسين الإضاءة المنخفضة" على تعديل مستوى تعريض المعاينة المباشرة للشاشة في ظروف الإضاءة المنخفضة. يختلف ذلك عن طريقة إنشاء الصور الثابتة من خلال إضافة الكاميرا في "الوضع الليلي"، لأنّ "الوضع الليلي" يجمع سلسلة من الصور لإنشاء صورة واحدة محسّنة. على الرغم من أنّ وضع "الإضاءة المنخفضة" يعمل بشكلٍ جيد جدًا لإنشاء صورة ثابتة، إلا أنّه لا يمكنه إنشاء بثٍ متواصلٍ من اللقطات، ولكن يمكن لميزة "تحسين الإضاءة المنخفضة" فعل ذلك. وبالتالي، توفّر ميزة "تحسين الإضاءة المنخفضة" ميزات كاميرا ، مثل:
- توفير معاينة محسّنة للصور، ما يتيح للمستخدمين ضبط عناصر الصور المنخفضة الإضاءة بشكلٍ أفضل
- مسح رموز الاستجابة السريعة ضوئيًا في الإضاءة المنخفضة
في حال تفعيل ميزة "تحسين الإضاءة المنخفضة"، يتم تفعيلها تلقائيًا عند انخفاض مستوى الإضاءة، ويتم إيقافها عند زيادة الإضاءة.
يمكن للتطبيقات تسجيل فيديو من المعاينة المباشرة على الشاشة في ظروف الإضاءة المنخفضة لحفظه بدرجة سطوع أفضل.
لمزيد من المعلومات، يُرجى الاطّلاع على تحسين الإضاءة المنخفضة.
عناصر التحكّم في الكاميرا داخل التطبيق
Android 15 adds an extension for more control over the camera hardware and its algorithms on supported devices:
- Advanced flash strength adjustments enabling precise control of flash
intensity in both
SINGLEandTORCHmodes while capturing images.
التحكّم في مساحة HDR
Android 15 会选择适合底层设备功能和面板位深的 HDR 余量。对于包含大量 SDR 内容的网页(例如显示单个 HDR 缩略图的消息应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。在 Android 15 中,您可以使用 setDesiredHdrHeadroom 控制 HDR 余量,以便在 SDR 内容和 HDR 内容之间取得平衡。
التحكّم في مستوى الصوت

Android 15 引入了对 CTA-2075 响度标准的支持,可帮助您避免音频响度不一致,并确保用户在切换内容时不必不断调整音量。系统利用输出设备(头戴式耳机和扬声器)的已知特性以及 AAC 音频内容中提供的响度元数据,智能调整音频响度和动态范围压缩级别。
如需启用此功能,您需要确保 AAC 内容中提供响度元数据,并在应用中启用平台功能。为此,您可以通过使用关联的 AudioTrack 中的音频会话 ID 调用其 create 工厂方法来实例化 LoudnessCodecController 对象;这会自动开始应用音频更新。您可以传递 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 API,可实现无缝应用集成。
أجهزة MIDI 2.0 الافتراضية
أضاف نظام Android 13 إمكانية الاتصال ب أجهزة MIDI 2.0 باستخدام USB، والتي تتواصل باستخدام حِزم MIDI العالمية (UMP). يوفّر نظام التشغيل Android 15 دعمًا لبروتوكول UMP في تطبيقات MIDI الافتراضية، ما يتيح لتطبيقات إنشاء المحتوى التحكّم في تطبيقات المزج كجهاز MIDI 2.0 افتراضي تمامًا كما لو كانت تستخدم جهاز USB MIDI 2.0.
فك تشفير برامج AV1 بشكل أكثر كفاءة
dav1d 是 VideoLAN 推出的热门 AV1 软件解码器,适用于不支持硬件 AV1 解码的 Android 设备。与旧版 AV1 软件解码器相比,dav1d 的性能最高可提升 3 倍,让更多用户(包括一些低端和中端设备)能够播放高清 AV1 视频。
您的应用需要选择启用 dav1d,方法是通过名称 "c2.android.av1-dav1d.decoder" 调用它。在后续更新中,dav1d 将成为默认的 AV1 软件解码器。此支持已标准化,并向后移植到收到 Google Play 系统更新的 Android 11 设备。
إنتاجية المطوّرين وأدواتهم
مع أنّ معظم جهودنا لتحسين إنتاجيتك تركّز على أدوات مثل استوديو Android وJetpack Compose ومكتبات Android Jetpack، إلا أنّنا نبحث دائمًا عن طرق في المنصة لمساعدتك في تحقيق أهدافك بسهولة أكبر.
تعديلات OpenJDK 17
Android 15 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致。
其中包含以下主要功能和改进:
- 改进了 NIO 缓冲区的使用体验
- 数据流
- 其他
math和strictmath方法 util软件包更新,包括顺序的collection、map和setDeflater中的ByteBuffer支持- 安全更新,例如
X500PrivateCredential和安全密钥更新
这些 API 会通过 Google Play 系统更新在搭载 Android 12(API 级别 31)及更高版本的 10 亿多部设备上更新,以便您以最新的编程功能为目标平台。
تحسينات على ملفات PDF
Android 15 对 PdfRenderer API 进行了重大改进。应用可以整合呈现等高级功能
受密码保护的文件、注释、表单编辑、
searching,而 selection 则包含副本。支持线性化 PDF 优化,此功能可加快本地 PDF 查看速度并减少资源使用量。Jetpack PDF 库使用这些 API 来简化 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 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 التي تم إنشاؤها باستخدام واجهة برمجة التطبيقات القديمة
القدرة على إنشاء قيم دقيقة لوزن الخط لحالات Font التي تبلغ 350 و450 و550 و650
، لذا يعود مُنشئ العرض إلى أقرب قيمة لوزن الخط. ففي
في هذه الحالة، يتم عرض العدد 300 بدلاً من 350، ويتم عرض 400 بدلاً من 450،
وهكذا. في المقابل، فإنّ Typeface الذي تم إنشاؤه باستخدام واجهات برمجة التطبيقات الجديدة ينشئ ديناميكيًا
مثيل Font لوزن معين، لذا يتم عرض الترجيحات الدقيقة بقيمة 350،
450 و550 و650 أيضًا.
عناصر تحكّم دقيقة في فواصل الأسطر
从 Android 15 开始,TextView 和底层行断开符可以将给定部分文本保留在同一行中,以提高可读性。您可以通过在字符串资源或 createNoBreakSpan 中使用 <nobreak> 标记来充分利用此换行符自定义功能。同样,您可以使用 <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>
以下图片展示了这些字符串呈现方式的差异:
<nobreak> 标记换行。
<nobreak> 标记封装“Pixel 8 Pro.”短语的同一行文本的布局。أرشفة التطبيقات
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 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.
تفعيل الوضع 16 كيلوبايت على جهاز باستخدام خيارات المطوّرين
فعِّل خيار المطوّر التشغيل مع صفحات حجمها 16 كيلوبايت لتشغيل الجهاز في وضع 16 كيلوبايت.
في إصدارات QPR من نظام التشغيل Android 15، يمكنك استخدام خيار المطوّرين المتاح على أجهزة معيّنة لإعادة تشغيل الجهاز في وضع 16 كيلوبايت وإجراء اختبار على الجهاز. قبل استخدام خيار المطوّرين، انتقِل إلى الإعدادات > النظام > تحديثات البرامج وطبِّق أي تحديثات متوفّرة.
يتوفّر خيار المطوّرين هذا على الأجهزة التالية:
Pixel 8 وPixel 8 Pro (مع الإصدار 1 من حزمة إصلاح الأخطاء في نظام Android 15 أو إصدار أحدث)
Pixel 8a (مع الإصدار 1 من حزمة إصلاح الأخطاء في نظام Android 15 أو إصدار أحدث)
Pixel 9 و9 Pro و9 Pro XL (مع الإصدار التجريبي 2 من حزمة Android 15 QPR2 أو إصدار أحدث)
الرسومات
يوفّر Android 15 أحدث التحسينات على الرسومات، بما في ذلك ANGLE وإضافات إلى نظام رسومات Canvas.
تحديث طريقة وصول Android إلى وحدة معالجة الرسومات
Android hardware has evolved quite a bit from the early days where the core OS would run on a single CPU and GPUs were accessed using APIs based on fixed-function pipelines. The Vulkan® graphics API has been available in the NDK since Android 7.0 (API level 24) with a lower-level abstraction that better reflects modern GPU hardware, scales better to support multiple CPU cores, and offers reduced CPU driver overhead — leading to improved app performance. Vulkan is supported by all modern game engines.
Vulkan is Android's preferred interface to the GPU. Therefore, Android 15 includes ANGLE as an optional layer for running OpenGL® ES on top of Vulkan. Moving to ANGLE will standardize the Android OpenGL implementation for improved compatibility, and, in some cases, improved performance. You can test out your OpenGL ES app stability and performance with ANGLE by enabling the developer option in Settings -> System -> Developer Options -> Experimental: Enable ANGLE on Android 15.
The Android ANGLE on Vulkan roadmap
As part of streamlining our GPU stack, going forward we will be shipping ANGLE as the GL system driver on more new devices, with the future expectation that OpenGL/ES will be only available through ANGLE. That being said, we plan to continue support for OpenGL ES on all devices.
Recommended next steps
Use the developer options to select the ANGLE driver for OpenGL ES and test your app. For new projects, we strongly encourage using Vulkan for C/C++.
تحسينات على Canvas
Android 15 继续对 Android 的 Canvas 图形系统进行现代化改造,并新增了以下功能:
Matrix44提供一个 4x4 矩阵来转换坐标,当您想在 3D 中操控画布时,应使用此矩阵。clipShader会将当前剪裁区域与指定的着色器相交,而clipOutShader会将剪裁区域设为当前剪裁区域与着色器的差值,每个操作都会将着色器视为一个 Alpha 遮罩。这支持高效地绘制复杂形状。
الأداء والبطارية
يواصل نظام التشغيل 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 类,可让您从应用内部收集性能分析信息,例如堆转储、堆分析报告、堆栈采样等。它使用提供的标记为您的应用提供回调,以标识输出文件,该文件将传递给应用的文件目录。该 API 会进行速率限制,以尽可能降低对性能的影响。
为了简化在应用中构建性能分析请求的过程,我们建议您使用 Core 1.15.0-rc01 或更高版本中的相应 Profiling AndroidX API。
تحسينات على قاعدة بيانات SQLite
Android 15 引入了 SQLite API,这些 API 可公开底层 SQLite 引擎的高级功能,以解决可能在应用中出现的特定性能问题。将 SQLite 更新到版本 3.44.3。
开发者应参阅 SQLite 性能最佳实践 以便充分利用其 SQLite 数据库,尤其是在处理大型 或运行对延迟敏感的查询时
- 只读延迟事务:在发出
只读(不包括写入语句),请使用
beginTransactionReadOnly()和beginTransactionWithListenerReadOnly(SQLiteTransactionListener)发出只读的DEFERRED事务。此类事务 如果数据库处于 WAL 模式 与IMMEDIATE或EXCLUSIVE事务并发运行。 - 行数和 ID:添加了 API 以检索已更改的行数和 ID
行或最后插入的行 ID 而不发出额外的查询。
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 增加了对应用的支持,以检测 正在录制。每当应用转换时,系统都会调用回调 在屏幕录制内容中处于可见与隐藏状态之间。如果正在记录注册进程的 UID 拥有的 activity,则系统会将应用视为可见。这样一来,如果您的应用执行敏感操作,您就可以告知用户正在录制他们的操作。
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:query 和 android:fragment 属性的 <data> 代码。
下面是一个 AndroidManifest 语法示例:
<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>
المساحة الخاصّة
借助私密空间,用户可以在设备上创建一个单独的空间,在额外的身份验证层保护下,防止敏感应用遭到窥探。私密空间使用单独的用户个人资料。用户可以选择使用设备锁定方式或为私密空间使用单独的锁定方式。
私密空间中的应用会显示在启动器的单独容器中,并且当私密空间处于锁定状态时,这些应用不会显示在“最近用过”视图、通知、“设置”和其他应用中。用户生成的内容和下载的内容(例如媒体内容或文件)以及账号在私密空间和主空间之间是分开的。在私密空间处于解锁状态时,您可以使用系统 Sharesheet 和照片选择器向应用授予对各个空间中内容的访问权限。
用户无法将现有应用及其数据移至私密空间。相反,用户可以在私密空间中选择安装选项,以便使用他们偏好的任意应用商店安装应用。私密空间中的应用会作为主空间中任何应用的单独副本进行安装(同一应用的新副本)。
当用户锁定私密空间时,系统会停止该个人资料。在个人资料停止运行时,私密空间中的应用将不再处于活动状态,无法执行前台或后台活动,包括显示通知。
我们建议您使用私密空间测试应用,以确保应用能按预期运行,尤其是当您的应用属于以下某一类别时:
- 具有工作资料逻辑的应用:假定其应用的任何已安装副本(不在主资料中)均位于工作资料中。
- 医疗应用
- 启动器应用
- 应用商店应用
طلب آخر اختيار للمستخدم في ما يخصّ إذن الوصول إلى "الصور المحدّدة"
يمكن للتطبيقات الآن إبراز الصور والفيديوهات التي تم اختيارها مؤخرًا فقط عند منح التطبيقات
إذن وصول جزئي إلى أذونات الوصول إلى الوسائط. يمكن أن تحسِّن هذه الميزة
تجربة المستخدم للتطبيقات التي تطلب الوصول إلى الصور
والفيديوهات بشكل متكرر. لاستخدام هذه الميزة في تطبيقك، فعِّل الوسيطة
QUERY_ARG_LATEST_SELECTION_ONLY عند طلب MediaStore
من خلال 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 أحدث الإضافات المتعلقة بتطبيق Health Connect من Android، وهو منصّة آمنة ومتمركزة لإدارة بيانات الصحة واللياقة البدنية التي تجمعها التطبيقات ومشاركتها. يتيح هذا التعديل استخدام أنواع بيانات إضافية في ما يتعلّق باللياقة البدنية والتغذية ودرجة حرارة الجلد وخطط التدريب وغير ذلك.
تتيح ميزة تتبُّع درجة حرارة الجلد للمستخدمين تخزين بيانات دترة حرارة أكثر دقة ومشاركتها من جهاز قابل للارتداء أو جهاز تتبُّع آخر.
الخطط التدريبية هي خطط تمارين منظمة لمساعدة المستخدم في تحقيق أهدافه المتعلّقة باللياقة البدنية. يتضمّن دعم الخطط التدريبية مجموعة متنوعة من أهداف الإنجاز والأداء:
- أهداف الإنجاز المتعلّقة بعدد السعرات الحرارية المحروقة، المسافة، والمدة، عدد التكرارات، والخطوات
- أهداف الأداء حول أكبر عدد ممكن من التكرارات (AMRAP)، الوتيرة، معدل ضربات القلب، القوة، معدل الجهد المبذول، السرعة
يمكنك الاطّلاع على مزيد من المعلومات حول آخر التحديثات التي أُجريت على Health Connect في Android من خلال إنشاء تجارب استخدام قابلة للتكيّف باستخدام Android معلومات حول الصحة من مؤتمر Google I/O
مشاركة شاشة التطبيق
Android 15 支持应用屏幕共享,因此用户可以仅共享或录制应用窗口,而不是整个设备屏幕。此功能首次在 Android 14 QPR2 中启用,包含 MediaProjection 回调,可让您的应用自定义应用屏幕共享体验。请注意,对于以 Android 14(API 级别 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.
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:
- At any time, the widget provider calls
setWidgetPreview. The provided previews are persisted inAppWidgetServicewith other provider info. setWidgetPreviewnotifies hosts of an updated preview through theAppWidgetHost.onProvidersChangedcallback. In response, the widget host reloads all of its provider information.- When displaying a widget preview, the host checks
AppWidgetProviderInfo.generatedPreviewCategories, and if the chosen category is available, callsAppWidgetManager.getWidgetPreviewto 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) لضمان عرض الانتقال بشكل أكثر سلاسة عند الدخول إلى وضع "نافذة ضمن النافذة". سيكون هذا مفيدًا التطبيقات التي تتضمّن عناصر واجهة مستخدم مركّبة على واجهة المستخدم الرئيسية، والتي تصل إلى "نافذة ضمن النافذة".
يستخدم المطوّرون دالة استدعاء onPictureInPictureModeChanged لتحديد المنطق.
يعمل على تبديل مستوى رؤية عناصر واجهة المستخدم المركّبة. يتم بدء عملية الاستدعاء هذه عند اكتمال الصورة المتحركة لدخول وضع "صورة في صورة" أو الخروج منه. تبدأ في
Android 15، تتضمن فئة PictureInPictureUiState ولاية أخرى.
من خلال حالة واجهة المستخدم هذه، ستتتبّع التطبيقات التي تستهدف الإصدار 15 من نظام التشغيل Android (المستوى 35 لواجهة برمجة التطبيقات)
تم استدعاء استدعاء Activity#onPictureInPictureUiStateChanged باستخدام
isTransitioningToPip() عند بدء الصورة المتحركة في "نافذة ضمن النافذة" (PIP). هناك
العديد من عناصر واجهة المستخدم التي لا تكون ملائمة للتطبيق عندما يكون في وضع "صورة في صورة"، على سبيل المثال، المعروضات أو التنسيقات التي تتضمّن معلومات مثل الاقتراحات والفيديوهات القادمة والتقييمات والعناوين. عند انتقال التطبيق إلى وضع "نافذة ضمن النافذة"، استخدِم
onPictureInPictureUiStateChanged لإخفاء عناصر واجهة المستخدم هذه. عندما
ينتقل التطبيق إلى وضع ملء الشاشة من نافذة "نافذة ضمن النافذة"، استخدِم
استدعاء onPictureInPictureModeChanged لإظهار هذه العناصر، كما هو موضح في
في ما يلي الأمثلة التالية:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
يساعد هذا التبديل السريع لعناصر واجهة المستخدم غير ذات الصلة (لتشغيل نافذة PiP) في ضمان ظهور رسوم متحركة سلسة وبدون وميض عند تشغيل وضع PiP.
قواعد محسّنة لميزة "عدم الإزعاج"
AutomaticZenRule lets apps customize Attention
Management (Do Not Disturb) rules and decide when to activate or deactivate
them. Android 15 greatly enhances these rules with the goal of improving the
user experience. The following enhancements are included:
- Adding types to
AutomaticZenRule, allowing the system to apply special treatment to some rules. - Adding an icon to
AutomaticZenRule, helping to make the modes be more recognizable. - Adding a
triggerDescriptionstring toAutomaticZenRulethat describes the conditions on which the rule should become active for the user. - Added
ZenDeviceEffectstoAutomaticZenRule, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.
ضبط 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() 执行以下操作:
检测设备是否连接到卫星,让他们更清楚地了解
可能会导致完全网络服务不可用的原因此外,Android 15 支持短信和彩信应用以及预加载的 RCS 应用,以便使用卫星连接发送和接收消息。
تجارب أكثر سلاسة باستخدام تقنية NFC
Android 15 正在努力打造更顺畅、更可靠的感应式付款体验,同时继续支持 Android 强大的 NFC 应用生态系统。在受支持的设备上,应用可以请求 NfcAdapter 进入观察模式,在该模式下,设备会监听但不会响应 NFC 读卡器,并将应用的 NFC 服务 PollingFrame
对象发送以进行处理。PollingFrame 对象可用于在与 NFC 读卡器进行首次通信之前进行身份验证,在许多情况下,这支持一触式交易。
此外,应用可以在受支持的设备上注册过滤器,以便在有轮询循环活动时收到通知,从而能够与多个感知 NFC 的应用顺畅运行。
دور المحفظة
Android 15 引入了钱包角色,可与用户的首选钱包应用更紧密地集成。此角色会取代 NFC 默认的感应式付款设置。用户可以前往设置 > 应用 > 默认应用,管理钱包角色持有者。
在为在付款类别中注册的 AID 路由 NFC 感应式付款时,系统会使用钱包角色。点按操作始终会转到 Google 钱包角色持有者,除非有已注册相同 AID 的其他应用在前台运行。
此角色还用于确定“Google 钱包”快速访问功能块在启用后应显示在何处。将角色设为“无”时,“快速访问”功能块不可用,并且支付类别 NFC 点按仅传送到前台应用。
الأمان
يساعدك نظام التشغيل Android 15 في تعزيز أمان تطبيقك وحماية بياناته، كما يوفّر للمستخدمين المزيد من الشفافية والتحكّم في بياناتهم. يمكنك مشاهدة جلسة الحفاظ على أمان المستخدمين على Android من مؤتمر Google I/O للتعرّف على المزيد من الإجراءات التي نتّخذها لتحسين وسائل حماية المستخدمين وحماية تطبيقك من التهديدات الجديدة.
دمج Credential Manager مع ميزة "الملء التلقائي"
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将生物识别提示集成到凭据创建过程中 和登录流程,这样提供商就无需管理 生物识别提示。因此,凭据提供程序只需专注于创建和获取流程的结果,并辅以生物识别流程结果。这一简化的流程创建了更高效、更精简的凭据 创建和检索过程。
إدارة المفاتيح للتشفير التام بين الأطراف
نقدّم E2eeContactKeysManager في Android 15، وهو تنسيق ملف يسهّل التشفير التام بين الأطراف (E2EE) في تطبيقات Android من خلال توفير واجهة برمجة تطبيقات على مستوى نظام التشغيل لتخزين المفاتيح العامة للتشفير.
تم تصميم E2eeContactKeysManager للدمج مع تطبيق
جهات الاتصال في النظام الأساسي لمنح المستخدمين طريقة مركزية لإدارة مفاتيحهم المفتوحة
لجهات الاتصال وإثبات ملكيتها.
عمليات التحقّق من الأذونات على معرّفات الموارد المنتظمة للمحتوى
Android 15 引入了一组用于对内容 URI 执行权限检查的 API:
Context.checkContentUriPermissionFull:此选项会对内容 URI 执行完整权限检查。Activity清单属性requireContentUriPermissionFromCaller:此属性会在 activity 启动时对提供的内容 URI 强制执行指定权限。Activity调用方的ComponentCaller类:此类表示启动 activity 的应用。
تسهيل الاستخدام
يضيف Android 15 ميزات تعمل على تحسين إمكانية الوصول للمستخدمين.
تحسينات على لغة برايل
في الإصدار 15 من نظام التشغيل Android، أصبح بإمكان TalkBack إتاحة استخدام شاشات برايل التي تستخدم معيار HID عبر USB وBluetooth الآمن.
سيساعد هذا المعيار، مثل المعيار المستخدَم في الفئران ولوحات المفاتيح، نظام Android على إتاحة نطاق أوسع من أجهزة العرض بلغة برايل بمرور الوقت.
التوافق مع أسواق عالمية
يضيف Android 15 ميزات وإمكانات تكمل تجربة المستخدم عند استخدام الجهاز بلغات مختلفة.
خط CJK متغيّر
从 Android 15 开始,面向中文、日文和韩文 (CJK) 语言的字体文件 NotoSansCJK 现在是可变字体。可变字体为中日韩语言的创意排版提供了更多可能性。设计师可以探索更多样式的排版,并制作出以前难以实现或根本无法实现的视觉效果出色的布局。
ضبط المسافة بين الأحرف
بدءًا من الإصدار 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 从以下语言开始支持基于短语的日语和韩语换行:
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 بموجب إذن.