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

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

قراءة لمدة 5 دقائق
Matthew McCullough
نائب الرئيس لإدارة المنتجات في "فريق مطوّري Android"

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

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

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

large_Android17Timeline01.png

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

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

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

الحدّ من عمليات التنشيط باستخدام دعم المستمعين للمنبهات التي يمكن تشغيلها أثناء وضع "السكون"

يقدّم الإصدار 17 من نظام التشغيل Android نوعًا جديدًا من 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

باستخدام Intent الجديد 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، بما في ذلك أحدث توافق مع Unicode وتحسين توافق SSL مع المجموعات المسماة في TLS.

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

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

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

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

تأليف:

متابعة القراءة