اخبار محصول

سومین نسخه بتای اندروید ۱۷

مطالعه ۵ دقیقه‌ای
Matthew McCullough
معاون رئیس، مدیریت محصول، توسعه‌دهنده اندروید

اندروید ۱۷ امروز رسماً با نسخه بتا ۳ به پایداری پلتفرم رسید. این بدان معناست که سطح API قفل شده است؛ شما می‌توانید آزمایش سازگاری نهایی را انجام دهید و برنامه‌های هدفمند اندروید ۱۷ خود را به فروشگاه Play ارسال کنید. علاوه بر این، بتا ۳ مجموعه‌ای از قابلیت‌های جدید را برای کمک به شما در ساخت برنامه‌های بهتر، ایمن‌تر و بسیار یکپارچه ارائه می‌دهد.

برنامه‌ها، کتابخانه‌ها، ابزارها و موتورهای بازی خود را آماده کنید!

اگر شما یک SDK، کتابخانه، ابزار یا موتور بازی توسعه می‌دهید، آماده‌سازی هرگونه به‌روزرسانی لازم اکنون بسیار مهم است تا از مسدود شدن توسعه‌دهندگان برنامه و بازی پایین‌دستی شما به دلیل مشکلات سازگاری جلوگیری شود و به آنها اجازه داده شود تا از جدیدترین ویژگی‌های SDK استفاده کنند. لطفاً در صورت نیاز به به‌روزرسانی برای پشتیبانی کامل از اندروید ۱۷، به توسعه‌دهندگان پایین‌دستی خود اطلاع دهید.

large_Android17Timeline01.png

تست شامل نصب برنامه تولیدی یا یک برنامه آزمایشی است که از کتابخانه یا موتور شما با استفاده از Google Play یا سایر ابزارها روی یک دستگاه یا شبیه‌ساز که Android 17 Beta 3 را اجرا می‌کند، استفاده می‌کند. تمام جریان‌های برنامه خود را بررسی کنید و به دنبال مشکلات عملکردی یا رابط کاربری باشید. تغییرات رفتاری را برای تمرکز بر تست خود بررسی کنید. هر نسخه از اندروید شامل تغییرات پلتفرمی است که حریم خصوصی، امنیت و تجربه کلی کاربر را بهبود می‌بخشد و این تغییرات می‌تواند بر برنامه‌های شما تأثیر بگذارد. در اینجا چند تغییر برای تمرکز وجود دارد:

  • قابلیت تغییر اندازه در صفحه نمایش‌های بزرگ: وقتی اندروید ۱۷ را هدف قرار دهید، دیگر نمی‌توانید از حفظ محدودیت‌های جهت‌گیری، تغییر اندازه و نسبت ابعاد در صفحه نمایش‌های بزرگ صرف نظر کنید.
  • بارگذاری پویای کد: اگر برنامه شما اندروید ۱۷ یا بالاتر را هدف قرار می‌دهد، محافظت Safer Dynamic Code Loading (DCL) که در اندروید ۱۴ برای فایل‌های DEX و JAR معرفی شد، اکنون به کتابخانه‌های بومی نیز گسترش می‌یابد. همه فایل‌های بومی که با استفاده از System.load() بارگذاری می‌شوند باید به عنوان فقط خواندنی علامت‌گذاری شوند. در غیر این صورت، سیستم خطای UnsatisfiedLinkError را نمایش می‌دهد.
  • فعال کردن CT به صورت پیش‌فرض : شفافیت گواهی (CT) به صورت پیش‌فرض فعال است. (در اندروید ۱۶، CT در دسترس است اما برنامه‌ها باید آن را انتخاب می‌کردند.)
  • محافظت از شبکه محلی : برنامه‌هایی که اندروید ۱۷ یا بالاتر را هدف قرار می‌دهند، به طور پیش‌فرض دسترسی به شبکه محلی را مسدود کرده‌اند. در صورت امکان، به استفاده از انتخابگرهای حفظ حریم خصوصی روی بیاورید و از ACCESS_LOCAL_NETWORK جدید برای دسترسی گسترده و مداوم استفاده کنید.

پیشرفت‌های رسانه‌ای و دوربین

گزینه‌های سفارشی‌سازی انتخابگر عکس

اندروید اکنون به شما این امکان را می‌دهد که نمایش بصری انتخابگر عکس را متناسب با رابط کاربری برنامه خود تنظیم کنید. با بهره‌گیری از API جدید PhotoPickerUiCustomizationParams ، می‌توانید نسبت ابعاد نمای شبکه‌ای را از مربع استاندارد ۱:۱ به نمایشگر عمودی ۹:۱۶ تغییر دهید. این انعطاف‌پذیری هم به ACTION_PICK_IMAGES intent و هم به انتخابگر عکس تعبیه‌شده گسترش می‌یابد و شما را قادر می‌سازد تا هنگام تعامل کاربران با رسانه‌ها، زیبایی‌شناسی منسجمی را حفظ کنید.

large_(پیش‌فرض)11aspectratio.png

همه این‌ها بخشی از تلاش ما برای کمک به ایجاد امکان انتخابگر عکس اندروید با حفظ حریم خصوصی و هماهنگی کامل آن با تجربه برنامه شماست. برای کسب اطلاعات بیشتر در مورد نحوه جاسازی مستقیم انتخابگر عکس در برنامه خود برای داشتن بهترین تجربه بومی، با ما همراه باشید .

  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: اندروید ۱۷ از طریق ثابت جدید ImageFormat.RAW14، پشتیبانی از فرمت تصویر RAW14 - استاندارد صنعتی بالفعل برای عکاسی دیجیتال سطح بالا - را معرفی می‌کند. RAW14 یک فرمت تک کاناله با ۱۴ بیت در هر پیکسل است که از یک طرح‌بندی فشرده استفاده می‌کند که در آن هر چهار پیکسل متوالی در هفت بایت فشرده می‌شوند.

افزونه‌های دوربین تعریف‌شده توسط فروشنده: اندروید ۱۷ افزونه‌های تعریف‌شده توسط فروشنده را اضافه می‌کند تا شرکای سخت‌افزاری بتوانند حالت‌های افزونه دوربین سفارشی را تعریف و پیاده‌سازی کنند تا به شما امکان دسترسی به بهترین و جدیدترین ویژگی‌های دوربین، مانند «وضوح فوق‌العاده» یا پیشرفت‌های پیشرفته مبتنی بر هوش مصنوعی را بدهند. می‌توانید با استفاده از API isExtensionSupported(int) برای این حالت‌ها جستجو کنید.

APIهای نوع دستگاه دوربین: APIهای جدید اندروید ۱۷ به شما امکان می‌دهند نوع دستگاه اصلی را جستجو کنید تا مشخص شود که آیا دوربین سخت‌افزار داخلی، وب‌کم USB خارجی یا یک دوربین مجازی است.

پشتیبانی از سمعک بلوتوث LE Audio

اندروید اکنون شامل یک دسته بندی خاص برای سمعک‌های صوتی بلوتوث کم مصرف (BLE) است. با اضافه شدن ثابت 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 }

مسیریابی صوتی دانه‌ای برای سمعک‌ها

اندروید ۱۷ به کاربران اجازه می‌دهد تا به طور مستقل محل پخش صداهای خاص سیستم را مدیریت کنند. آن‌ها می‌توانند انتخاب کنند که اعلان‌ها، آهنگ‌های زنگ و آلارم‌ها به سمعک‌های متصل یا بلندگوی داخلی دستگاه هدایت شوند.

رمزگذار نرم‌افزاری توسعه‌یافته HE-AAC

اندروید ۱۷ یک رمزگذار نرم‌افزاری Extended HE-AAC ارائه شده توسط سیستم را معرفی می‌کند. این رمزگذار با استفاده از کدگذاری یکپارچه گفتار و صدا، از بیت‌ریت‌های پایین و بالا پشتیبانی می‌کند. می‌توانید از طریق API 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)

بهبود عملکرد و باتری

کاهش زمان بیدارباش با پشتیبانی شنونده برای آلارم‌های allow-while-idle

اندروید ۱۷ نوع جدیدی از AlarmManager.setExactAndAllowWhileIdle را معرفی می‌کند که به جای PendingIntent، یک OnAlarmListener می‌پذیرد. این مکانیزم جدید مبتنی بر فراخوانی برای برنامه‌هایی که در حال حاضر برای انجام وظایف دوره‌ای، مانند برنامه‌های پیام‌رسان که اتصالات سوکت را حفظ می‌کنند، به wakelockهای مداوم متکی هستند، ایده‌آل است.

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

به‌روزرسانی‌های حریم خصوصی

دکمه موقعیت مکانی ارائه شده توسط سیستم

کافه محلی.jpg

اندروید در حال معرفی یک دکمه موقعیت مکانی رندر شده توسط سیستم است که شما می‌توانید آن را مستقیماً با استفاده از کتابخانه Android Jetpack در طرح‌بندی برنامه خود جاسازی کنید. وقتی کاربری این دکمه سیستمی را لمس می‌کند، برنامه شما فقط برای جلسه فعلی به موقعیت مکانی دقیق دسترسی پیدا می‌کند. برای پیاده‌سازی این، باید مجوز USE_LOCATION_BUTTON را اعلام کنید.

تنظیمات مجزای نمایش رمز عبور برای صفحه کلیدهای لمسی و فیزیکی

این ویژگی، تنظیمات سیستمی «نمایش رمزهای عبور» موجود را به دو ترجیح کاربری مجزا تقسیم می‌کند: یکی برای ورودی‌های لمسی و دیگری برای ورودی‌های صفحه‌کلید فیزیکی (سخت‌افزاری). کاراکترهای وارد شده از طریق صفحه‌کلیدهای فیزیکی اکنون به طور پیش‌فرض بلافاصله پنهان می‌شوند.

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

امنیت

بارگذاری کد پویای فقط خواندنی اجباری

برای بهبود امنیت در برابر حملات تزریق کد، اندروید اکنون الزام می‌کند که کتابخانه‌های بومی که به صورت پویا بارگذاری می‌شوند، باید فقط خواندنی باشند. اگر برنامه شما اندروید ۱۷ یا بالاتر را هدف قرار می‌دهد، تمام فایل‌های بومی که با استفاده از 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)

برای آماده شدن برای پیشرفت‌های آینده در محاسبات کوانتومی، اندروید از طریق طرح امضای APK نسخه ۳.۲ جدید، پشتیبانی از رمزنگاری پساکوانتومی (PQC) را معرفی می‌کند. این طرح از یک رویکرد ترکیبی استفاده می‌کند که یک امضای کلاسیک را با یک امضای 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
)

برچسب‌های پنهان برنامه‌ها در صفحه اصلی

برچسب برنامه مخفی روی صفحه اصلی.png

اندروید اکنون تنظیماتی را برای کاربر فراهم می‌کند تا نام برنامه‌ها (برچسب‌ها) را در فضای کاری صفحه اصلی پنهان کند. مطمئن شوید که آیکون برنامه شما متمایز و قابل تشخیص است.

تصویر در تصویر تعاملی دسکتاپ

برخلاف حالت تصویر در تصویر سنتی، این پنجره‌های پین‌شده در حالت دسکتاپ، ضمن اینکه همیشه بالای پنجره‌های برنامه‌های دیگر قرار دارند، تعاملی باقی می‌مانند.

  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_Record-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)
}

به‌روزرسانی‌های API نسخه‌های ۲۵ و ۲۱ از OpenJDK

این به‌روزرسانی ویژگی‌ها و اصلاحات گسترده‌ای را از OpenJDK 21 و OpenJDK 25، از جمله جدیدترین پشتیبانی از یونیکد و پشتیبانی بهبود یافته SSL برای گروه‌های نامگذاری شده در TLS، به ارمغان می‌آورد.

شروع کار با اندروید ۱۷

شما می‌توانید هر دستگاه پیکسل پشتیبانی‌شده‌ای را ثبت‌نام کنید یا از ایمیج‌های سیستم ۶۴ بیتی با شبیه‌ساز اندروید استفاده کنید .

  • با توجه به SDK جدید کامپایل کنید و مشکلات را در صفحه بازخورد گزارش دهید.
  • برنامه فعلی خود را از نظر سازگاری آزمایش کنید و ببینید آیا برنامه شما تحت تأثیر تغییرات اندروید ۱۷ قرار می‌گیرد یا خیر.

برای اطلاعات کامل، به سایت توسعه‌دهندگان اندروید ۱۷ مراجعه کنید.

نوشته شده توسط:

ادامه مطلب