لقد حقَّق Android 17 رسميًا ثباتًا في النظام الأساسي اليوم مع الإصدار التجريبي 3. وهذا يعني أنّ مساحة واجهة برمجة التطبيقات أصبحت ثابتة، ويمكنك إجراء اختبارات التوافق النهائية ونشر تطبيقاتك التي تستهدف الإصدار 17 من نظام التشغيل Android على "متجر Google Play". بالإضافة إلى ذلك، يوفّر الإصدار التجريبي 3 مجموعة من الإمكانات الجديدة لمساعدتك في إنشاء تطبيقات أفضل وأكثر أمانًا وتكاملاً.
جهِّز تطبيقاتك ومكتباتك وأدواتك ومحرّكات الألعاب.
إذا كنت تطوّر حزمة SDK أو مكتبة أو أداة أو محرّك ألعاب، من المهم جدًا إعداد أي تحديثات ضرورية الآن لمنع مطوّري التطبيقات والألعاب من مواجهة مشاكل في التوافق وحظرهم من استخدام أحدث ميزات حزمة SDK. يُرجى إعلام المطوّرين الذين يعتمدون عليك بما إذا كانت هناك حاجة إلى تحديثات لتوفير الدعم الكامل لنظام التشغيل Android 17.
يتضمّن الاختبار تثبيت تطبيقك النهائي أو تطبيق اختباري يستخدم مكتبتك أو محركك من خلال Google Play أو وسائل أخرى على جهاز أو محاكي يعمل بالإصدار 17 من نظام التشغيل Android Beta 3. تتبَّع جميع مسارات تطبيقك وابحث عن مشاكل في الوظائف أو واجهة المستخدم. راجِع التغييرات في السلوك للتركيز على اختبارك. يحتوي كل إصدار من Android على تغييرات في النظام الأساسي تعمل على تحسين الخصوصية والأمان وتجربة المستخدم بشكل عام، ويمكن أن تؤثر هذه التغييرات في تطبيقاتك. في ما يلي بعض التغييرات التي يجب التركيز عليها:
- إمكانية تغيير الحجم على الشاشات الكبيرة: بعد استهداف الإصدار Android 17، لن يعود بإمكانك إيقاف القيود المتعلقة باتجاه الشاشة وإمكانية تغيير الحجم ونسبة العرض إلى الارتفاع على الشاشات الكبيرة.
- تحميل الرموز البرمجية الديناميكية: إذا كان تطبيقك يستهدف الإصدار 17 من نظام التشغيل Android أو إصدارًا أحدث، فإنّ ميزة "الحماية الأكثر أمانًا لتحميل الرموز البرمجية الديناميكية" (DCL) التي تم طرحها في الإصدار 14 من نظام التشغيل Android لملفات DEX وJAR تشمل الآن المكتبات الأصلية. يجب وضع علامة للقراءة فقط على جميع الملفات الأصلية التي يتم تحميلها باستخدام System.load(). وفي حال عدم توفّرها، يعرض النظام الخطأ UnsatisfiedLinkError.
- تفعيل "شهادة الشفافية" تلقائيًا: تكون شهادة الشفافية (CT) مفعّلة تلقائيًا. (على Android 16، تتوفّر ميزة "التحقّق من التوافق"، ولكن كان على التطبيقات الموافقة على استخدامها).
- وسائل الحماية من الوصول إلى الشبكة المحلية: يتم تلقائيًا حظر وصول التطبيقات التي تستهدف الإصدار 17 من نظام التشغيل Android أو الإصدارات الأحدث إلى الشبكة المحلية. استخدِم أدوات الاختيار التي تحافظ على الخصوصية إذا أمكن ذلك، واستخدِم الإذن الجديد ACCESS_LOCAL_NETWORK للوصول الواسع النطاق والدائم.
تحسينات على الوسائط والكاميرا
خيارات تخصيص "أداة اختيار الصور"
يتيح لك نظام التشغيل Android الآن تخصيص العرض المرئي لأداة اختيار الصور بما يتناسب بشكل أفضل مع واجهة مستخدم تطبيقك. باستخدام واجهة برمجة التطبيقات الجديدة PhotoPickerUiCustomizationParams، يمكنك تعديل نسبة العرض إلى الارتفاع في طريقة العرض على شكل مربّعات من المربّع العادي 1:1 إلى العرض الرأسي 9:16. تمتدّ هذه المرونة إلى كلّ من الغرض ACTION_PICK_IMAGES وأداة اختيار الصور المضمّنة، ما يتيح لك الحفاظ على مظهر متّسق عند تفاعل المستخدمين مع الوسائط.
ويأتي كل ذلك في إطار جهودنا للمساعدة في دمج أداة اختيار الصور على 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 برنامج ترميز 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
)تحديثات الخصوصية
زر مشاركة الموقع الجغرافي الذي يوفّره النظام
تطرح 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 )
إخفاء تصنيفات التطبيقات على الشاشة الرئيسية
يتيح 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) {}
}
)إعادة تصميم شريط أدوات تسجيل الشاشة
الوظيفة الأساسية
إعدادات استبعاد تطبيقات شبكة 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.
-
أخبار المنتجاتنطرح اليوم نظام التشغيل Android 17 وسنوفّره على معظم أجهزة Pixel المتوافقة. ترقَّب طرح أجهزة جديدة تعمل بالإصدار 17 من نظام التشغيل Android خلال الأشهر المقبلة.
Matthew McCullough • يستغرق الاطّلاع على المقال 13 دقيقة -
أخبار المنتجاتنطرح اليوم المجموعة الأولى من المهام الطويلة الأمد (LHT)، وهي مهام معقّدة جدًا يستغرق إكمالها عدة أيام أو حتى أسبوع من المهندس. نقدّم أيضًا ميزة التقييم المستند إلى الوكيل، بدءًا من الوكلاء من مقدّمي النماذج المعنيين.
Matthew McCullough • يستغرق الاطِّلاع على المقال 3 دقائق -
أخبار المنتجاتتُعدّ تجربة المستخدم الرائعة أساسية في مهمة Android، ويتطلّب تحقيق هذا الوعد الحفاظ على سرعة الأجهزة وتجاوبها وموثوقيتها.
Blair Harmon • مدّة القراءة: دقيقتان
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.