أخبار المنتجات

الإصدار التجريبي الثالث من Android 17

مدّة القراءة: 5 دقائق
عرض الملف الشخصي لـ Matthew McCullough
Matthew McCullough نائب رئيس قسم إدارة المنتجات، مطوّر برامج Android

وصل Android 17 رسميًا إلى مرحلة استقرار النظام الأساسي اليوم مع الإصدار التجريبي 3. وهذا يعني أنّه تم قفل واجهة برمجة التطبيقات، ويمكنك إجراء اختبار التوافق النهائي ونشر تطبيقاتك التي تستهدف Android 17 على "متجر Google Play". بالإضافة إلى ذلك، يوفّر الإصدار التجريبي الثالث مجموعة من الإمكانات الجديدة لمساعدتك في إنشاء تطبيقات أفضل وأكثر أمانًا وتكاملاً.

جهِّز تطبيقاتك ومكتباتك وأدواتك ومحركات الألعاب لديك.

إذا كنت تطوّر حزمة تطوير برامج (SDK) أو مكتبة أو أداة أو محرّك ألعاب، من المهم جدًا إعداد أي تحديثات ضرورية الآن لمنع حظر مطوّري التطبيقات والألعاب التابعة لك بسبب مشاكل التوافق والسماح لهم باستهداف أحدث ميزات حزمة تطوير البرامج (SDK). يُرجى إعلام المطوّرين التابعين لك إذا كانت هناك حاجة إلى إجراء تحديثات للتوافق بشكل كامل مع Android 17.

large_Android17Timeline01.png

يتضمن الاختبار تثبيت تطبيقك في مرحلة الإنتاج أو تطبيق تجريبي يستخدم مكتبتك أو محرّكك باستخدام Google Play أو وسائل أخرى على جهاز أو محاكي يعمل بالإصدار التجريبي 3 من Android 17. تصفَّح جميع مسارات تطبيقك وابحث عن أي مشاكل في الوظائف أو واجهة المستخدم. راجِع التغييرات في السلوك لتركيز الاختبارات. يتضمّن كل إصدار من Android تغييرات في النظام الأساسي تهدف إلى تحسين الخصوصية والأمان وتجربة المستخدم بشكل عام، ويمكن أن تؤثر هذه التغييرات في تطبيقاتك. في ما يلي بعض التغييرات التي يجب التركيز عليها:

  • إمكانية تغيير الحجم على الشاشات الكبيرة: عند استهداف الإصدار 17 من Android، لن يعود بإمكانك إيقاف قيود اتجاه الشاشة وإمكانية تغيير الحجم ونسبة العرض إلى الارتفاع على الشاشات الكبيرة.
  • تحميل الرموز البرمجية الديناميكية: إذا كان تطبيقك يستهدف الإصدار 17 من نظام التشغيل Android أو الإصدارات الأحدث، فإنّ ميزة "تحميل الرموز البرمجية الديناميكية الأكثر أمانًا" (DCL) التي تم تقديمها في الإصدار 14 من نظام التشغيل Android لملفات DEX وJAR تمتد الآن لتشمل المكتبات المجمّعة من رموز برمجية أصلية. يجب وضع علامة "للقراءة فقط" على جميع الملفات الأصلية التي يتم تحميلها باستخدام System.load(). وإلا، سيظهر الخطأ UnsatisfiedLinkError.
  • تفعيل شهادة الشفافية تلقائيًا: يتم تفعيل شهادة الشفافية تلقائيًا. (في Android 16، تتوفّر ميزة "التحقّق من بيانات الاعتماد"، ولكن كان على التطبيقات تفعيلها).
  • الحماية على الشبكة المحلية: يتم تلقائيًا حظر وصول التطبيقات التي تستهدف الإصدار 17 من Android أو الإصدارات الأحدث إلى الشبكة المحلية. ننصحك بالتبديل إلى استخدام أدوات الاختيار التي تحافظ على الخصوصية إن أمكن، واستخدام إذن ACCESS_LOCAL_NETWORK الجديد للوصول الواسع النطاق والدائم.

تحسينات على الوسائط والكاميرا

خيارات تخصيص "أداة اختيار الصور"

يتيح لك Android الآن تخصيص العرض المرئي لأداة اختيار الصور لتتكامل بشكل أفضل مع واجهة مستخدم تطبيقك. من خلال الاستفادة من واجهة برمجة التطبيقات الجديدة PhotoPickerUiCustomizationParams، يمكنك تعديل نسبة العرض إلى الارتفاع في العرض على شكل مربّعات من المربّع العادي 1:1 إلى العرض العمودي 9:16. تمتد هذه المرونة إلى كل من الغرض ACTION_PICK_IMAGES وأداة اختيار الصور المضمّنة، ما يتيح لك الحفاظ على مظهر متناسق عندما يتفاعل المستخدمون مع الوسائط.

large_(Default)11aspectratio.png

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

val params = PhotoPickerUiCustomizationParams.Builder()
.setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
.build()
val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}
startActivityForResult(intent, REQUEST_CODE)

إتاحة تنسيق الصور RAW14: يوفّر Android 17 إمكانية استخدام تنسيق الصور RAW14، وهو المعيار المتّبع في المجال للتصوير الرقمي المتطوّر، من خلال الثابت الجديد ImageFormat.RAW14. ‫RAW14 هو تنسيق أحادي القناة، 14 بت لكل بكسل، يستخدم تخطيطًا مكثفًا حيث يتم تجميع كل أربعة بكسل متتالية في سبعة بايت.

إضافات الكاميرا التي يحدّدها المورّد: يضيف Android 17 إضافات يحدّدها المورّد لتمكين شركاء الأجهزة من تحديد وتنفيذ أوضاع مخصّصة لإضافات الكاميرا من أجل منحك إمكانية الوصول إلى أفضل ميزات الكاميرا وأحدثها، مثل "دقة سوبر" أو التحسينات المتطوّرة المستندة إلى الذكاء الاصطناعي. يمكنك الاستعلام عن هذه الأوضاع باستخدام واجهة برمجة التطبيقات isExtensionSupported(int).

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

توافق سماعات الأذن الطبية مع تكنولوجيا Bluetooth LE Audio

يتضمّن Android الآن فئة أجهزة محدّدة لسماعات الأذن الطبية التي تعمل بتقنية Bluetooth Low Energy (BLE) Audio. من خلال إضافة الثابت AudioDeviceInfo.TYPE_BLE_HEARING_AID، يمكن لتطبيقك الآن التمييز بين سماعات الأذن الطبية وسماعات الرأس العادية.

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }

توجيه الصوت الدقيق لسماعات الأذن الطبية

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

برنامج ترميز HE-AAC الموسّع

يقدّم Android 17 برنامج ترميز Extended HE-AAC يوفّره النظام. يتيح برنامج الترميز هذا معدّلات نقل بيانات منخفضة وعالية باستخدام ترميز موحّد للكلام والصوت. يمكنك الوصول إلى برنامج الترميز هذا من خلال واجهة برمجة التطبيقات MediaCodec باستخدام الاسم c2.android.xheaac.encoder أو من خلال طلب البحث عن نوع MIME‏ audio/mp4a-latm.

val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)

تحسينات على الأداء والبطارية

تقليل عمليات قفل التنشيط من خلال إتاحة المستمعين للمنبّهات المسموح بها أثناء وضع السكون

يقدّم Android 17 إصدارًا جديدًا من AlarmManager.setExactAndAllowWhileIdle يقبل OnAlarmListener بدلاً من PendingIntent. تُعدّ هذه الآلية الجديدة المستندة إلى عمليات الاستدعاء مثالية للتطبيقات التي تعتمد حاليًا على عمليات قفل التنشيط المستمرة لتنفيذ المهام الدورية، مثل تطبيقات المراسلة التي تحافظ على اتصالات المقابس.

val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
// Do work here
}
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
listener,
null
)

تعديلات على الخصوصية

زر مشاركة الموقع الجغرافي الذي يوفّره النظام

localcafe.jpg

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

إعدادات منفصلة لإظهار كلمة المرور في لوحات المفاتيح التي تعمل باللمس ولوحات المفاتيح الخارجية

تقسم هذه الميزة إعداد النظام الحالي "عرض كلمات المرور" إلى خيارَين مفضّلَين مختلفَين للمستخدم: أحدهما للإدخالات المستندة إلى اللمس والآخر لإدخالات لوحة المفاتيح الخارجية (الأجهزة). يتم الآن إخفاء الأحرف التي يتم إدخالها عبر لوحات المفاتيح الخارجية على الفور بشكل تلقائي.

val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD
val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)

الأمان

فرض تحميل الرموز الديناميكية للقراءة فقط

لتحسين الأمان ضد هجمات حقن الرموز البرمجية، يفرض Android الآن أن تكون المكتبات المجمّعة من رموز برمجية أصلية والمحمَّلة ديناميكيًا للقراءة فقط. إذا كان تطبيقك يستهدف الإصدار 17 من نظام التشغيل Android أو الإصدارات الأحدث، يجب وضع علامة "للقراءة فقط" على جميع الملفات الأصلية التي يتم تحميلها باستخدام System.load()‎ مسبقًا.

val libraryFile = File(context.filesDir, "my_native_lib.so")
// Mark the file as read-only before loading to comply with Android 17+ security requirements
libraryFile.setReadOnly()
System.load(libraryFile.absolutePath)

توقيع حِزم APK المختلطة باستخدام تقنية التشفير بعد الكمّي (PQC)

للاستعداد للتطوّرات المستقبلية في مجال الحوسبة الكمية، يقدّم Android ميزة "تشفير ما بعد الكم" (PQC) من خلال الإصدار 3.2 الجديد من مخطّط توقيع حِزم APK. يستخدم هذا المخطط نهجًا مختلطًا يجمع بين التوقيع الكلاسيكي وتوقيع ML-DSA.

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

دعم أفضل للتطبيقات المصغّرة على الشاشات الخارجية

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

val options = appWidgetManager.getAppWidgetOptions(appWidgetId)
val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID)
val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout)
remoteViews.setViewPadding(
R.id.container,
16f, 8f, 16f, 8f,
TypedValue.COMPLEX_UNIT_DIP
)

تصنيفات التطبيقات المخفية على الشاشة الرئيسية

Hiddenapplabelsonthehomescreen.png

يوفّر Android الآن إعدادًا للمستخدم لإخفاء أسماء التطبيقات (التصنيفات) في مساحة عمل الشاشة الرئيسية. تأكَّد من أنّ رمز تطبيقك مميّز ويمكن التعرّف عليه.

ميزة "نافذة ضمن النافذة" التفاعلية على أجهزة الكمبيوتر المكتبي

على عكس ميزة "نافذة ضمن النافذة" التقليدية، تظل هذه النوافذ المثبَّتة تفاعلية مع بقائها دائمًا في أعلى نوافذ التطبيقات الأخرى في وضع الكمبيوتر المكتبي.

val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0]
appTask.requestWindowingLayer(
ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
context.mainExecutor,
object : OutcomeReceiver<Int, Exception> {
override fun onResult(result: Int) {
if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
// Task successfully moved to pinned layer
}
}
override fun onError(error: Exception) {}
}
)

شريط أدوات مُعاد تصميمه لتسجيل الشاشة

large_Recording-redesign.png

الوظيفة الأساسية

إعدادات استبعاد التطبيقات من شبكة VPN

باستخدام نية ACTION_VPN_APP_EXCLUSION_SETTINGS الجديدة، يمكن لتطبيقك تشغيل شاشة "الإعدادات" التي يديرها النظام حيث يمكن للمستخدمين اختيار التطبيقات التي تتجاوز نفق شبكة VPN.

val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}

تعديلات على واجهتَي برمجة التطبيقات OpenJDK 25 و21

يوفّر هذا التحديث ميزات وتحسينات شاملة من OpenJDK 21 وOpenJDK 25، بما في ذلك أحدث إصدار من معيار يونيكود ودعم محسَّن لطبقة المقابس الآمنة للمجموعات المُسمّاة في بروتوكول أمان طبقة النقل (TLS).

بدء استخدام Android 17

يمكنك تسجيل أي جهاز Pixel متوافق أو استخدام صور نظام 64 بت مع Android Emulator.

  • يمكنك تجميع حزمة SDK الجديدة والإبلاغ عن المشاكل في صفحة الملاحظات.
  • اختبِر تطبيقك الحالي للتأكّد من توافقه مع Android 17 ومعرفة ما إذا كان سيتأثر بالتغييرات في هذا الإصدار.

للحصول على معلومات كاملة، يُرجى الانتقال إلى الموقع الإلكتروني لمطوّري Android 17.

من كتابة:
متابعة القراءة