Android 9 (سطح API 28) ویژگیها و قابلیتهای جدید فوقالعادهای را برای کاربران و توسعهدهندگان معرفی میکند. این سند موارد جدید برای توسعهدهندگان را برجسته میکند.
برای آشنایی با میاناهای برنامهسازی کاربردی جدید، گزارش تفاوت میانای برنامهسازی کاربردی را بخوانید یا به مرجع میانای برنامهسازی کاربردی Android مراجعه کنید. همچنین حتماً تغییرات رفتار Android 9 را بررسی کنید تا با زمینههایی که تغییرات پلاتفرم ممکن است بر برنامههایتان تأثیر بگذارد آشنا شوید.
مکانیابی داخلی با Wi-Fi RTT
Android 9 پشتیبانی پلاتفرم از پروتکل Wi-Fi با استاندارد IEEE 802.11-2016 را اضافه میکند. این پروتکل که با نام زمان رفتوبرگشت Wi-Fi (RTT) نیز شناخته میشود، به شما امکان میدهد از موقعیتیابی داخلی در برنامههایتان بهره ببرید.
در دستگاههایی که از Android 9 با پشتیبانی سختافزاری استفاده میکنند، برنامههایتان میتوانند از
میاناهای برنامهسازی کاربردی RTT برای اندازهگیری
فاصله تا نقاط دسترسی Wi-Fi نزدیک که از RTT پشتیبانی میکنند استفاده کنند. دستگاه باید خدمات مکان را فعال کرده باشد و اسکن Wi-Fi را روشن کرده باشد (در
تنظیمات > مکان)، و برنامه شما باید
ACCESS_FINE_LOCATION
اجازه داشته باشد. برای استفاده از «نوشتار همزمان»، دستگاه نیازی به اتصال به نقاط دسترسی ندارد.
برای حفظ حریم خصوصی، فقط تلفن میتواند فاصله تا نقطه دسترسی را تعیین کند؛
نقطههای دسترسی این اطلاعات را ندارند.
اگر دستگاهتان فاصله تا ۳ نقطه دسترسی یا بیشتر را اندازهگیری کند، میتوانید از الگوریتم چندضلعی برای تخمین موقعیت دستگاه که بهترین تناسب را با آن اندازهگیریها دارد استفاده کنید. نتیجه معمولاً در محدوده ۱ تا ۲ متر دقیق است.
با این دقت، میتوانید تجربههای جدیدی بسازید، مثل پیمایش درون ساختمان و خدمات مکانمبنای دقیق، مثل کنترل صوتی رفع ابهام (برای مثال، «این چراغ را روشن کن») و اطلاعات مکانمبنا (مثل «آیا برای این محصول پیشنهاد ویژه وجود دارد؟»).
میانای برنامهسازی کاربردی WiFi RTT را در برنامه نمایشی Android WifiRttScan درحال استفاده ببینید.
برای کسب اطلاعات بیشتر، مکان Wi-Fi: فاصلهیابی با RTT را ببینید.
پشتیبانی از برش نمایشگر
آزمایش برش نمایشگر بااستفاده از شبیهساز
Android 9 از جدیدترین صفحههای نمایش لبهبهلبه که دارای برشهای نمایشگر برای دوربینها و بلندگوها هستند پشتیبانی میکند. کلاس
DisplayCutout
به شما امکان میدهد مکان و شکل نواحی غیرعملکردی را که
محتوا نباید در آنها نمایش داده شود پیدا کنید. برای تعیین وجود و جایگیری این نواحی برش، از روش
getDisplayCutout()
استفاده کنید.
ویژگی جدید چیدمان پنجره،
layoutInDisplayCutoutMode،
به برنامه شما امکان میدهد محتوایش را در اطراف برشهای دستگاه بچیند. میتوانید این مشخصه را روی یکی از مقادیر زیر تنظیم کنید:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULTLAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGESLAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
میتوانید برش صفحه را در هر دستگاه یا شبیهسازی که Android 9 در آن اجرا میشود بهصورت زیر شبیهسازی کنید:
- گزینههای توسعهدهندگان را فعال کنید.
- در صفحه گزینههای توسعهدهندگان، به پایین پیمایش کنید و بخش طراحی را پیدا کنید و شبیهسازی نمایشگر با برش را انتخاب کنید.
- اندازه برش را انتخاب کنید.
اعلانها
Android 9 چندین بهبود در اعلانها ارائه میدهد که همه آنها برای توسعهدهندگانی که سطح میانای برنامهسازی کاربردی ۲۸ و بالاتر را هدفیابی میکنند دردسترس است.
MessagingStyle با عکس پیوستشده.
MessagingStyle با پاسخها و مکالمه.
برای کد نمونهای که از اعلانها، ازجمله ویژگیهای Android 9، استفاده میکند، به نمونه افراد مراجعه کنید.
تجربه پیامرسانی بهبودیافته
از Android 7.0 (سطح API 24) میتوانید اقدامی برای پاسخ دادن به پیامها یا وارد کردن مستقیم نوشتار دیگر از اعلان اضافه کنید. Android 9 این ویژگی را با بهبودهای زیر ارتقا میدهد:
پشتیبانی سادهشده برای شرکتکنندگان مکالمه: از
Personکلاس برای شناسایی افراد درگیر در مکالمه، ازجمله تصویرهای نمایه و نشانیهای وب آنها استفاده میشود. بسیاری از میاناهای برنامهسازی کاربردی دیگر، مثلaddMessage()، اکنون بهجایCharSequenceاز کلاسPersonاستفاده میکنند. کلاسPersonهمچنین از الگوی طراحی «سازنده» پشتیبانی میکند.پشتیبانی از تصاویر: Android 9 اکنون تصاویر را در «اعلانهای پیامرسانی» در تلفنها نمایش میدهد. میتوانید از
setData()در پیام برای نمایش تصویر استفاده کنید. تکهکد زیر نشان میدهد که چگونهPersonو پیامی حاوی تصویر ایجاد کنید.
کاتلین
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
جاوا
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
ذخیره کردن پاسخها بهعنوان پیشنویس: برنامه شما میتواند
EXTRA_REMOTE_INPUT_DRAFTارسالشده توسط سیستم را زمانیکه کاربر بهطور تصادفی اعلان پیامرسانی را میبندد بازیابی کند. میتوانید از این مورد اضافی برای پیشپر کردن فیلدهای نوشتاری در برنامه استفاده کنید تا کاربران بتوانند پاسخشان را تکمیل کنند.تشخیص اینکه مکالمه گروهی است یا نه: میتوانید از
setGroupConversation()برای شناسایی هدفمند مکالمه بهعنوان مکالمه گروهی یا غیرگروهی استفاده کنید.کنش معنایی را برای هدف تنظیم کنید: این
setSemanticAction()روش به شما امکان میدهد به کنشها معنای معنایی بدهید، مثل «علامتگذاری بهعنوان خواندهشده»، «حذف»، «پاسخ»، و غیره.«پاسخ هوشمند»: Android 9 از همان پاسخهای پیشنهادی موجود در برنامه پیامرسانی شما پشتیبانی میکند. از
RemoteInput.setChoices()برای ارائه مجموعهای از پاسخهای استاندارد به کاربر استفاده کنید.
تنظیمات کانال، همهفرستیها، و «مزاحم نشوید»
Android 8.0 کانالهای اعلان را معرفی کرد که به شما امکان میدهد برای هر نوع اعلانی که میخواهید نمایش داده شود، کانال قابلسفارشیسازی توسط کاربر ایجاد کنید. Android 9 تنظیمات کانال اعلان را با این تغییرات سادهتر میکند:
مسدود کردن گروههای کانال: کاربران اکنون میتوانند کل گروههای کانال را در تنظیمات اعلان یک برنامه مسدود کنند. میتوانید از روش
isBlocked()برای شناسایی زمان مسدود شدن یک گروه استفاده کنید و در نتیجه، هیچ اعلانی برای کانالهای آن گروه ارسال نکنید.علاوهبراین، برنامه شما میتواند بااستفاده از روش جدید
getNotificationChannelGroup()تنظیمات گروه کانال فعلی را پُرسمان کند.انواع هدف پخش جدید: سیستم Android اکنون وقتی وضعیت مسدود کردن کانالهای اعلان و گروههای کانال تغییر میکند، هدفهای پخش ارسال میکند. برنامهای که مالک کانال یا گروه مسدودشده است میتواند به این هدفها گوش دهد و متناسب با آن واکنش نشان دهد. برای اطلاعات بیشتر درباره این کنشهای هدف و عناصر اضافی، به فهرست ثابتهای بهروزشده در
NotificationManagerمرجع مراجعه کنید. برای اطلاعات درباره واکنش به اهداف همهفرستی، به همهفرستیها مراجعه کنید.NotificationManager.Policyسه دسته اولویت «مزاحم نشوید» جدید دارد:PRIORITY_CATEGORY_ALARMSزنگهای ساعت را در اولویت قرار میدهد.PRIORITY_CATEGORY_MEDIAصداهای منابع رسانهای، مثل رسانه و مسیریابی صوتی، را در اولویت قرار میدهد.PRIORITY_CATEGORY_SYSTEMصداهای سیستم را در اولویت قرار میدهد.
NotificationManager.Policyهمچنین هفت ثابت جدید «مزاحم نشوید» دارد که میتوانید از آنها برای سرکوب کردن وقفههای دیداری استفاده کنید:SUPPRESSED_EFFECT_FULL_SCREEN_INTENTاز راهاندازی فعالیت تمامصفحه ازطریق اعلان جلوگیری میکند.SUPPRESSED_EFFECT_LIGHTSچراغ اعلان را مسدود میکند.SUPPRESSED_EFFECT_PEEKاز نمایش مختصر اعلانها در نمای اعلان («سرک کشیدن») جلوگیری میکند.SUPPRESSED_EFFECT_STATUS_BARمانع از نمایش اعلانها در نوار وضعیت در دستگاههایی میشود که از نوار وضعیت پشتیبانی میکنند.SUPPRESSED_EFFECT_BADGEنشانهای روی دستگاههایی که از نشان پشتیبانی میکنند را مسدود میکند. برای اطلاعات بیشتر، به اصلاح نشان اعلان مراجعه کنید.SUPPRESSED_EFFECT_AMBIENTاعلانها را در دستگاههایی که از نمایشگر محیطی پشتیبانی میکنند مسدود میکند.SUPPRESSED_EFFECT_NOTIFICATION_LISTاز نمایش اعلانها در نمای فهرست در دستگاههایی که از نمای فهرست پشتیبانی میکنند، مانند سایه اعلان یا صفحه قفل، جلوگیری میکند.
پشتیبانی از چند دوربین و بهروزرسانیهای دوربین
در دستگاههای دارای Android 9، میتوانید بهطور همزمان از دو یا چند دوربین فیزیکی به جاریسازیها دسترسی داشته باشید. در دستگاههایی که دوربین جلو یا پشت دوگانه دارند، میتوانید ویژگیهای نوآورانهای ایجاد کنید که با یک دوربین امکانپذیر نیست، مثل زوم یکپارچه، بوکه، و دید استریو. این API همچنین به شما امکان میدهد جریان دوربین منطقی یا ترکیبی را فراخوانی کنید که بهطور خودکار بین دو یا چند دوربین جابهجا میشود.
بهبودهای دیگر در دوربین شامل پارامترهای جلسه اضافی است که به کاهش تأخیر درطول ضبط اولیه کمک میکند، و همرسانی سطحی که به کاربران دوربین امکان میدهد بدون نیاز به توقف و شروع جاریسازی دوربین، از عهده موارد استفاده مختلف برآیند. همچنین «میاناهای برنامهسازی کاربردی» برای پشتیبانی از فلاش نمایشگرمحور و دسترسی به برچسبهای زمان OIS برای پایدارسازی تصویر در سطح برنامه و جلوههای ویژه اضافه کردهایم.
در Android 9، API چنددوربینی از دوربینهای تکرنگ برای دستگاههای دارای قابلیت FULL یا LIMITED پشتیبانی میکند.
برونداد تکرنگ ازطریق قالب
YUV_420_888
با Y بهعنوان خاکستری، U (Cb) بهعنوان ۱۲۸، و V (Cr) بهعنوان ۱۲۸ بهدست میآید.
Android 9 همچنین پشتیبانی از دوربینهای USB/UVC خارجی را در دستگاههای پشتیبانیشده فعال میکند.
ImageDecoder برای عناصر طراحیشدنی و بیتمپها
Android 9 کلاس
ImageDecoder
را معرفی میکند که رویکردی مدرن برای رمزگشایی تصاویر ارائه میدهد. بهجای میاناهای برنامهسازی کاربردی BitmapFactory
و BitmapFactory.Options
از این کلاس استفاده کنید.
ImageDecoder به شما امکان میدهد
Drawable یا
Bitmap را از بافر بایت، فایل،
یا نشانی وب ایجاد کنید. برای رمزگشایی تصویر، ابتدا
createSource()
را با منبع تصویر رمزگذاریشده فراخوانی کنید. سپس با ارسال شیء ImageDecoder.Source
،
decodeDrawable()
یا decodeBitmap()
را فراخوانی کنید
تا Drawable
یا Bitmap ایجاد شود. برای تغییر تنظیمات پیشفرض،
OnHeaderDecodedListener را به
decodeDrawable() یا decodeBitmap() ارسال کنید. ImageDecoder تماس
onHeaderDecoded()
با پهنا و ارتفاع پیشفرض تصویر، پساز مشخص شدن آنها.
اگر تصویر کدبندیشده گیف پویانماییشده یا WebP باشد، decodeDrawable()
Drawable را برمیگرداند که نمونهای از
AnimatedImageDrawable
کلاس است.
روشهای مختلفی وجود دارد که میتوانید برای تنظیم ویژگیهای تصویر استفاده کنید:
- برای مقیاسبندی تصویر رمزگشاییشده به اندازه دقیق، ابعاد هدف را به
setTargetSize()منتقل کنید. همچنین میتوانید تصاویر را بااستفاده از اندازه نمونه مقیاسبندی کنید. اندازه نمونه را مستقیماً بهsetTargetSampleSize()ارسال کنید. - برای برش دادن تصویر در محدوده تصویر مقیاسبندیشده،
setCrop()را فراخوانی کنید. - برای ایجاد کردن بیتمپ تغییرپذیر،
trueرا بهsetMutableRequired()ارسال کنید.
ImageDecoder همچنین به شما امکان میدهد جلوههای سفارشی و پیچیده به تصویر اضافه کنید،
مثل گوشههای گرد یا
نقابهای دایرهای. از
setPostProcessor()
با نمونهای از
PostProcessor
کلاس برای اجرای هر فرمان طراحی که میخواهید استفاده کنید.
پویانمایی
Android 9 کلاس
AnimatedImageDrawable
را برای طراحی و نمایش تصاویر پویانماییشده GIF و WebP معرفی میکند.
AnimatedImageDrawable عملکردی مشابه
AnimatedVectorDrawable
دارد،
بهاینصورت که رشته رندر پویانماییهای AnimatedImageDrawable را هدایت میکند.
رشته رندر همچنین از یک رشته کارگر برای رمزگشایی استفاده میکند، بهطوریکه رمزگشایی با سایر عملیات در رشته رندر تداخل نمیکند. این پیادهسازی به برنامه شما امکان میدهد
تصویر پویانماییشدهای را بدون مدیریت بهروزرسانیهای آن یا
تداخل با رویدادهای دیگر در رشته میانای کاربر برنامهتان نمایش دهد.
AnimatedImageDrawable را میتوان بااستفاده از نمونهای از
ImageDecoder رمزگشایی کرد. تکهکد زیر نحوه استفاده از ImageDecoder برای رمزگشایی AnimatedImageDrawable را نشان میدهد:
کاتلین
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
جاوا
private void decodeImage() throws IOException {
Drawable decodedAnimation = ImageDecoder.decodeDrawable(
ImageDecoder.createSource(getResources(), R.drawable.my_drawable));
if (decodedAnimation instanceof AnimatedImageDrawable) {
// Prior to start(), the first frame is displayed.
((AnimatedImageDrawable) decodedAnimation).start();
}
}ImageDecoder چندین روش دارد که به شما امکان میدهد تصویر را بیشتر تغییر دهید.
برای مثال، میتوانید از روش
setPostProcessor()
برای اصلاح ظاهر تصویر، مثل اعمال ماسک دایرهای یا
گوشههای گرد، استفاده کنید.
ویدیو HDR VP9، فشردهسازی تصویر HEIF، و «میاناهای برنامهسازی کاربردی رسانه»
Android 9 از «نمایه 2 VP9» با «دامنه پویای بالا» (HDR) پشتیبانی داخلی ارائه میدهد، بنابراین میتوانید فیلمهای دارای HDR را از YouTube، Play Movies، و منابع دیگر در دستگاههای سازگار با HDR به کاربران خود ارائه دهید.
Android 9 همچنین از کدبندی تصاویر بااستفاده از قالب «فایل تصویری با کارایی بالا» (HEIF
یا HEIC) پشتیبانی میکند که فشردهسازی را بهبود میبخشد و استفاده از فضای ذخیرهسازی و دادههای شبکه را کاهش میدهد. نمونههای تصویر ثابت HEIF در کلاسهای
MediaMuxer
و MediaExtractor
پشتیبانی میشوند. با پشتیبانی پلاتفرم در دستگاههای Android 9، ارسال و استفاده از تصاویر HEIF از سرور زیرین شما آسان است. پساز اینکه مطمئن شدید برنامهتان با این قالب داده برای همرسانی و نمایش سازگار است، HEIF را بهعنوان قالب ذخیرهسازی تصویر در برنامهتان امتحان کنید. میتوانید بااستفاده از ImageDecoder یا BitmapFactory (که یک بیتمپ از فایل JPEG دریافت میکند) تبدیل jpeg به heic را انجام دهید. سپس میتوانید از
HeifWriter برای نوشتن تصاویر ثابت HEIF
از بافرهای بایت YUV یا نمونههای
Surface یا
Bitmap استفاده کنید.
سنجههای رسانه از کلاسهای
AudioTrack،
AudioRecord،
و MediaDrm نیز دردسترس هستند.
Android 9 روشهایی را به کلاس
MediaDRM برای دریافت سنجهها، سطوح HDCP،
سطوح امنیتی، و تعداد جلسهها، و برای افزودن کنترل بیشتر بر
سطوح امنیتی و توقفهای ایمن معرفی میکند. برای جزئیات، گزارش تفاوت میانای برنامهسازی کاربردی را ببینید.
در Android 9، میانای برنامهسازی کاربردی AAudio از چندین مشخصه AAudioStream دیگر، ازجمله کاربرد، نوع محتوا، و پیشتنظیم ورودی پشتیبانی میکند. بااستفاده از این مشخصهها، میتوانید جاریسازیهایی ایجاد کنید که برای برنامههای VoIP یا دوربین فیلمبرداری بهینهسازی شدهاند. همچنین میتوانید شناسه جلسه را تنظیم کنید تا
جاریسازی AAudio را با زیرمیکسی که میتواند شامل جلوهها باشد مرتبط کنید. از
AudioEffect API برای کنترل جلوهها استفاده کنید.
Android 9
AudioEffect API را برای
پردازش دینامیک معرفی میکند.
با این کلاس، میتوانید جلوههای صوتی مبتنی بر کانال—ازجمله
برابرسازی، فشردهسازی چندباندی، و محدودکننده—را در مراحل مختلف بسازید. تعداد باندها و مراحل فعال قابل پیکربندی است و اکثر پارامترها را میتوان بهصورت همزمان کنترل کرد.
حساسیت هزینه داده در JobScheduler
از Android 9 به بعد، JobScheduler
میتواند از نشانهای وضعیت شبکه ارائهشده توسط شرکتهای مخابراتی برای بهبود مدیریت
کارهای مربوط به شبکه استفاده کند.
کارها میتوانند اندازه داده تخمینی خود را اعلام کنند، پیشدریافت سیگنال انجام دهند، و
الزامات دقیق شبکه را مشخص کنند. سپس JobScheduler کار را براساس وضعیت شبکه مدیریت میکند. برای مثال، وقتی شبکه نشان میدهد که شلوغ است،
JobScheduler ممکن است درخواستهای شبکه بزرگ را بهتعویق بیندازد. وقتی در شبکه
بدون محدودیت حجم هستید، JobScheduler میتواند کارهای پیشدریافت را برای
بهبود تجربه کاربر اجرا کند، مثلاً با پیشدریافت کردن عنوانها.
هنگام افزودن کار، درصورت لزوم از setEstimatedNetworkBytes()،
setPrefetch()، و setRequiredNetwork()
استفاده کنید تا به
JobScheduler کمک کنید کار را بهدرستی انجام دهد. وقتی کارتان اجرا میشود،
حتماً از شیء Network
برگرداندهشده توسط
JobParameters.getNetwork() استفاده کنید.
درغیراینصورت، بهطور ضمنی از شبکه پیشفرض دستگاه استفاده خواهید کرد که
ممکن است نیازهای شما را برآورده نکند و باعث مصرف ناخواسته داده شود.
میانای برنامهسازی کاربردی شبکههای عصبی ۱.۱
میانای برنامهسازی کاربردی شبکههای عصبی در Android 8.1 (سطح API 27) معرفی شد تا یادگیری ماشین دروندستگاهی در Android را تسریع کند. Android 9 «میانای برنامهسازی کاربردی» را گسترش میدهد و بهبود میبخشد و از نه عملکرد جدید پشتیبانی میکند:
- عملیات ریاضی عنصر به عنصر:
- عملیات آرایه:
مشکل شناختهشده: هنگام انتقال
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
تنسورها به
ANEURALNETWORKS_PAD
عملیات، که در Android 9 و نسخههای بالاتر دردسترس است،
برونداد NNAPI ممکن است با برونداد چارچوبهای یادگیری ماشین سطح بالاتر، مثل
TensorFlow Lite، مطابقت نداشته باشد. تا زمانی که مشکل حل شود،
باید فقط
ANEURALNETWORKS_TENSOR_FLOAT32
را ارسال کنید.
علاوهبراین، این API تابع جدیدی نیز معرفی میکند،
ANeuralNetworksModel_relaxComputationFloat32toFloat16()،
که به شما امکان میدهد مشخص کنید آیا
ANEURALNETWORKS_TENSOR_FLOAT32
با محدوده و دقتی به اندازه قالب IEEE 754 16-bit floating-point محاسبه شود یا نه.
چارچوب تکمیل خودکار
Android 9 چندین بهبود معرفی میکند که سرویسهای تکمیل خودکار میتوانند برای بهبود بیشتر تجربه کاربری هنگام تکمیل فرمها پیادهسازی کنند. برای کسب اطلاعات بیشتر درباره نحوه استفاده از ویژگیهای تکمیل خودکار در برنامهتان، راهنمای چارچوب تکمیل خودکار را ببینید.
بهبودهای امنیتی
Android 9 تعدادی ویژگی امنیتی معرفی میکند که در بخشهای زیر خلاصه شده است:
تأیید محافظتشده Android
دستگاههای پشتیبانیشده که Android 9 یا بالاتر دارند به شما امکان میدهند از «تأییدیه محافظتشده Android» استفاده کنید. هنگام استفاده از این گردش کار، برنامه شما پیاموارهای به کاربر نمایش میدهد و از او میخواهد بیانیه کوتاهی را تأیید کند. این بیانیه به برنامه امکان میدهد تأیید کند که کاربر میخواهد تراکنش حساسی مثل پرداخت را تکمیل کند.
اگر کاربر بیانیه را بپذیرد، Android Keystore امضای رمزنگاریشدهای را که با کد اصالتسنجی پیام درهمسازی کلیددار (HMAC) محافظت میشود دریافت و ذخیره میکند. پساز اینکه Android Keystore معتبر بودن پیام را تأیید کرد، برنامه شما میتواند از کلید تولیدشده از trustedConfirmationRequired در محیط اجرای مطمئن (TEE) برای امضای پیامی که کاربر پذیرفته است استفاده کند. امضا با اطمینان بسیار بالا نشان میدهد که کاربر بیانیه را دیده است و با آن موافقت کرده است.
احتیاط: «تأییدیه محافظتشده Android» کانال اطلاعاتی امنی برای کاربر فراهم نمیکند. برنامه شما نمیتواند هیچگونه تضمین محرمانگی فراتر از آنچه پلاتفرم Android ارائه میدهد را فرض کند. بهطور خاص، از این گردش کار برای نمایش اطلاعات حساسی که معمولاً در دستگاه کاربر نشان نمیدهید استفاده نکنید.
برای راهنمایی درباره افزودن پشتیبانی از «تأییدیه محافظتشده Android»، به راهنمای تأییدیه محافظتشده Android مراجعه کنید.
کادر گفتگوی یکپارچه اصالتسنجی زیستسنجشی
در Android 9، سیستم ازطرف برنامه شما کادرهای گفتگوی اصالتسنجی زیستسنجشی ارائه میدهد. این قابلیت ظاهر، احساس، و جایگاه استانداردی برای کادر گفتگو ایجاد میکند و به کاربران اطمینان بیشتری میدهد که دربرابر یک بررسیکننده اطلاعات اعتباری زیستسنجشی مورداعتماد اصالتسنجی میکنند.
اگر برنامهتان از
FingerprintManager
برای نمایش کادر گفتگوی اصالتسنجی اثر انگشت به کاربران استفاده میکند، بهجای آن از
BiometricPrompt
استفاده کنید. BiometricPrompt برای نمایش دادن چارگوش گفتگوی اصالتسنجی به سیستم متکی است. همچنین رفتار خود را تغییر میدهد تا با نوع اصالتسنجی زیستسنجشی که کاربر انتخاب کرده است سازگار شود.
واحد امنیتی سختافزار
دستگاههای پشتیبانیشده که Android 9 یا بالاتر در آنها نصب شده است میتوانند «کلید StrongBox KeyMint» (قبلاً Keymaster) داشته باشند، پیادهسازی «میانافزار KeyMint» (قبلاً Keymaster) که در واحد امنیتی سختافزاری قرار دارد. این واحد شامل موارد زیر است:
- CPU خودش.
- فضای ذخیرهسازی ایمن.
- تولیدکننده اعداد تصادفی واقعی.
- سازوکارهای اضافی برای مقاومت دربرابر دستکاری بسته و بارگیری غیرمجاز برنامهها.
هنگام بررسی کلیدهای ذخیرهشده در StrongBox KeyMint، سیستم تمامیت کلید را با «محیط اجرای امن» (TEE) تأیید میکند.
برای کسب اطلاعات بیشتر درباره استفاده از StrongBox KeyMint، به واحد امنیت سختافزاری مراجعه کنید.
وارد کردن کلید امن در Keystore
Android 9 با افزودن امکان وارد کردن ایمن کلیدهای رمزگذاریشده به «انبار کلیدها» بااستفاده از قالب کلید کدبندیشده ASN.1، امنیت بیشتری برای رمزگشایی کلید فراهم میکند. سپس KeyMint کلیدهای موجود در Keystore را رمزگشایی میکند، بنابراین محتوای کلیدها هرگز بهصورت متن ساده در حافظه میزبان دستگاه ظاهر نمیشود.
درباره نحوه وارد کردن کلیدهای رمزگذاریشده بهصورت امنتر بیشتر بدانید.
طرح امضای APK با جایگزینی کلید
Android 9 از «طرح امضای APK نسخه ۳» پشتیبانی میکند. این طرح گزینه گنجاندن مدرک چرخش در بلوک امضای خود برای هر گواهینامه امضا را دارد. این قابلیت به برنامه شما امکان میدهد با پیوند دادن گواهینامههای امضای قبلی فایل APK به گواهینامهای که اکنون با آن امضا شده است، با گواهینامه امضای جدیدی امضا شود.
درباره نحوه چرخاندن کلیدها بااستفاده از
apksigner بیشتر بدانید.
گزینه مجاز کردن رمزگشایی کلید فقط در دستگاههای قفلنشده
Android 9 پرچم unlockedDeviceRequired را معرفی میکند. این گزینه تعیین میکند که آیا «انبار کلیدها» قبلاز اجازه دادن به رمزگشایی هرگونه داده درحال انتقال یا ذخیرهشده بااستفاده از کلید مشخصشده، نیاز به باز کردن قفل صفحه دارد یا نه. این نوع کلیدها برای رمزگذاری دادههای حساس برای ذخیره در دیسک، مانند دادههای بهداشتی یا سازمانی، بسیار مناسب هستند. این پرچم به کاربران اطمینان بیشتری میدهد که
دادهها درحالیکه دستگاه قفل است قابل رمزگشایی نیستند و درصورت گم شدن یا
دزدیده شدن تلفن، دادهها ایمن میمانند.
برای اینکه کلید درحالیکه دستگاه قفل است از رمزگشایی ایمن بماند، پرچم را با ارسال true به روش setUnlockedDeviceRequired() فعال کنید. پساز تکمیل این مرحله، وقتی صفحه کاربر قفل میشود، هرگونه تلاش برای رمزگشایی یا امضای داده بااستفاده از این کلید ناموفق خواهد بود. برای دسترسی به دستگاه قفلشده، باید
پین، گذرواژه، اثر انگشت، یا عامل مطمئن دیگری وارد کنید.
پشتیبانی از رمزگذاری قدیمی
دستگاههای Android 9 که با Keymaster 4 عرضه میشوند از «الگوریتم رمزگذاری داده سهگانه» یا Triple DES پشتیبانی میکنند. اگر برنامه شما با سیستمهای قدیمی که به Triple DES نیاز دارند تعاملپذیری دارد، هنگام رمزگذاری اطلاعات اعتباری حساس از این نوع رمز استفاده کنید.
برای کسب اطلاعات بیشتر درباره نحوه ایمنتر کردن برنامهتان، به امنیت برای توسعهدهندگان Android مراجعه کنید.
منسوخ شدن WPS
«راهاندازی حفاظتشده Wi-Fi» (WPS) بهدلایل امنیتی منسوخ شده است.
نسخههای پشتیبان Android
Android 9 عملکرد جدید و گزینههای توسعهدهنده مرتبط با پشتیبانگیری و بازیابی را اضافه میکند. جزئیات این تغییرات در بخشهای زیر آمده است.
پشتیبانگیریهای رمزگذاری سمت کارخواه
Android 9 از رمزگذاری پشتیبانگیریهای Android با رمز سمت کارخواه پشتیبانی میکند. این پشتیبانی بهطور خودکار زمانی فعال میشود که شرایط زیر برقرار باشد:
- کاربر پشتیبانگیری را بااستفاده از Android 9 یا بالاتر فعال کرده است.
- کاربر برای دستگاهش قفل صفحه تنظیم کرده است که برای باز کردن قفل به پین، الگو، یا گذرواژه نیاز دارد.
وقتی این اقدام حریم خصوصی فعال باشد، برای بازیابی دادهها از پشتیبانگیریهای انجامشده توسط دستگاه کاربر، پین، الگو، یا گذرواژه دستگاه لازم است. برای کسب اطلاعات بیشتر درباره فناوری پشت این ویژگی، به مقاله سفید خدمات Google Cloud Key Vault مراجعه کنید.
شرایط دستگاه موردنیاز برای پشتیبانگیری را تعریف کنید
اگر دادههای برنامهتان شامل اطلاعات حساس یا اولویتها باشد، Android 9 به شما امکان میدهد شرایط دستگاه را که تحت آن دادههای برنامهتان در نسخه پشتیبان کاربر گنجانده میشود تعریف کنید، برای مثال، زمانی که رمزگذاری سمت مشتری فعال است یا انتقال محلی دستگاه به دستگاه درحال انجام است.
برای کسب اطلاعات بیشتر درباره پشتیبانگیری از دادهها در دستگاههای Android، به نمای کلی پشتیبانگیری دادهها مراجعه کنید.
دسترسپذیری
Android 9 بهبودهایی در چارچوب دسترسپذیری ارائه میدهد که ارائه تجربههای بهتر به کاربران برنامه شما را آسانتر میکند.
معناشناسی ناوبری
ویژگیهای اضافهشده در Android 9 تعریف نحوه پیمایش خدمات دسترسپذیری، بهویژه صفحهخوانها، از بخشی از صفحه به بخش دیگر را برای شما آسانتر میکند. این مشخصهها میتوانند به کاربرانی که اختلالات بینایی دارند کمک کنند بهسرعت در نوشتار «میانای کاربر» برنامهتان حرکت کنند و به آنها امکان دهند انتخاب کنند.
برای مثال، در برنامه خرید، صفحهخوان میتواند به کاربران کمک کند مستقیماً از یک دسته معامله به دسته بعدی پیمایش کنند، بدون اینکه صفحهخوان قبلاز رفتن به دسته بعدی مجبور باشد همه موارد موجود در یک دسته را بخواند.
عنوانهای قاب دسترسپذیری
در Android 8.1 (میانای برنامهسازی کاربردی سطح ۲۷) و پایینتر، خدمات دسترسپذیری همیشه نمیتوانند تشخیص دهند که چه زمانی بخش خاصی از صفحهنمایش بهروز شده است، مثلاً وقتی فعالیتی یک تکه را با تکه دیگری جایگزین میکند. بخشها شامل عناصر رابط کاربری گروهبندیشده منطقی و مرتبط دیداری هستند که معمولاً یک تکه را تشکیل میدهند.
در Android 9، میتوانید عنوانهای پانل دسترسپذیری یا عنوانهای قابلشناسایی بهصورت جداگانه برای این پانلها ارائه دهید. اگر پانلی عنوان پانل دسترسپذیری داشته باشد، خدمات دسترسپذیری هنگام تغییر پانل اطلاعات دقیقتری دریافت میکنند. این قابلیت به سرویسها امکان میدهد اطلاعات دقیقتری درباره آنچه در میانای کاربر تغییر کرده است به کاربر ارائه دهند.
برای مشخص کردن عنوان قاب، از
android:accessibilityPaneTitle
مشخصه استفاده کنید. همچنین میتوانید عنوان قاب واسط کاربر را که در زمان اجرا جایگزین میشود بااستفاده از setAccessibilityPaneTitle() بهروز کنید.
برای مثال، میتوانید برای ناحیه محتوای یک
Fragment شیء عنوان ارائه دهید.
پیمایش براساس عنوان
اگر برنامه شما محتوای نوشتاریای را نمایش میدهد که شامل عنوانهای منطقی است،
android:accessibilityHeading
ویژگی را برای نمونههای
View که نشاندهنده آن عنوانها است روی true تنظیم کنید. با
افزودن این سرصفحهها، به خدمات دسترسپذیری اجازه میدهید به کاربران کمک کنند
مستقیماً از یک سرصفحه به سرصفحه بعدی پیمایش کنند. هر سرویس دسترسپذیری میتواند از این قابلیت برای بهبود تجربه پیمایش رابط کاربری کاربران استفاده کند.
ناوبری و برونداد گروه
صفحهخوانها بهطور سنتی از
android:focusable ویژگی برای
تعیین زمان خواندن
ViewGroup یا مجموعهای از
View اشیا بهعنوان یک واحد استفاده میکنند. به این ترتیب،
کاربران میتوانند بفهمند که بازدیدها ازنظر منطقی با یکدیگر مرتبط هستند.
در Android 8.1 و نسخههای قدیمیتر، باید هر هدف View را در
ViewGroup بهعنوان غیرقابلتمرکز علامتگذاری کنید و خود ViewGroup را بهعنوان قابلتمرکز علامتگذاری کنید. این ترتیب باعث شد برخیاز نمونههای View بهگونهای بهعنوان قابلتمرکز علامتگذاری شوند که پیمایش با صفحهکلید را دشوارتر میکرد.
از Android 9 به بعد، میتوانید از
مشخصه android:screenReaderFocusable
بهجای مشخصه android:focusable در شرایطی استفاده کنید که
تمرکزپذیر کردن شیء View پیامدهای نامطلوبی داشته باشد. «صفحهخوانها»
کانون را روی همه عناصری که android:screenReaderFocusable
یا android:focusable روی true تنظیم شده است قرار میدهند.
کنشهای تسهیلات
Android 9 از انجام اقدامات تسهیلکننده ازطرف کاربران پشتیبانی میکند:
- تعامل با ابزارهای راهنمایی
- ویژگیهای اضافهشده در چارچوب دسترسپذیری به شما امکان میدهد به
راهنمای ابزار در میانای کاربری برنامه دسترسی داشته باشید. از
getTooltipText()برای خواندن نوشتار نکتهابزار و ازACTION_SHOW_TOOLTIPوACTION_HIDE_TOOLTIPبرای دستور دادن به نمونههایViewبرای نمایش یا پنهان کردن نکتهابزار استفاده کنید. - کنشهای عمومی اضافه شد
- Android 9 از دو کنش دستگاه اضافی در کلاس
AccessibilityServiceپشتیبانی میکند. سرویس شما میتواند به کاربران کمک کند دستگاههایشان را قفل کنند و بااستفاده از کنشهایGLOBAL_ACTION_LOCK_SCREENوGLOBAL_ACTION_TAKE_SCREENSHOTبهترتیب نماگرفت بگیرند.
جزئیات تغییر پنجره
Android 9 ردیابی بهروزرسانیهای پنجره برنامه را وقتی برنامه
چندین پنجره را بهطور همزمان بازطراحی میکند آسانتر میکند. وقتی
TYPE_WINDOWS_CHANGED
رویدادی رخ میدهد، از
getWindowChanges()
API برای تعیین نحوه تغییر پنجرهها استفاده کنید. درطول بهروزرسانی چند پنجرهای، هر پنجره مجموعه رویدادهای خود را تولید میکند.
getSource()
روش نمای ریشه پنجره مرتبط با هر رویداد را برمیگرداند.
اگر برنامهای برای اشیای
View خود عنوانهای صفحه دسترسپذیری تعریف کرده باشد، سرویس شما میتواند
وقتی «میانای کاربری» برنامه بهروزرسانی میشود آن را تشخیص دهد. وقتی رویدادی
TYPE_WINDOW_STATE_CHANGED
رخ میدهد، از انواع برگشتدادهشده توسط
getContentChangeTypes()
برای تعیین نحوه تغییر پنجره استفاده کنید. برای مثال، چارچوب میتواند
وقتی پانلی عنوان جدیدی دارد یا وقتی پانلی ناپدید شده است تشخیص دهد.
چرخش
برای حذف چرخشهای ناخواسته، حالت جدیدی اضافه کردهایم که جهت فعلی را حتی اگر موقعیت دستگاه تغییر کند ثابت میکند. کاربران میتوانند چرخش را درصورت نیاز با فشار دادن دکمهای در نوار سیستم بهصورت دستی راهاندازی کنند.
در اکثر موارد، تأثیرات سازگاری برای برنامهها حداقل است. بااینحال، اگر برنامه شما رفتار چرخش سفارشیشدهای داشته باشد یا از تنظیمات غیرمعمول گرایش صفحه استفاده کند، ممکن است با مشکلاتی مواجه شوید که قبلاً متوجه آنها نشدهاید، زیرا اولویت چرخش کاربر همیشه روی حالت عمودی تنظیم میشد. به شما توصیه میکنیم که رفتار چرخش را در همه فعالیتهای کلیدی برنامهتان بررسی کنید و مطمئن شوید که همه تنظیمات جهت صفحهنمایش شما همچنان تجربه بهینه را ارائه میدهند.
برای جزئیات بیشتر، تغییرات رفتار مرتبط را ببینید.
حالت چرخش جدید به کاربران امکان میدهد درصورت نیاز بااستفاده از دکمهای در نوار سیستم، چرخش را بهصورت دستی راهاندازی کنند.
نوشتار
Android 9 ویژگیهای مرتبط با نوشتار زیر را به پلاتفرم میآورد:
نوشتار پیشمحاسبهشده: کلاس
PrecomputedTextبا فعال کردن امکان محاسبه و ذخیره کردن اطلاعات موردنیاز ازقبل، عملکرد پرداز کردن نوشتار را بهبود میبخشد. همچنین به برنامه شما امکان میدهد چیدمان نوشتار را خارج از رشته اصلی انجام دهد.«بزرگنما»: کلاس
Magnifierابزاره پلاتفرمی است که API بزرگنمایی ارائه میدهد و امکان تجربه ویژگی بزرگنمایی یکپارچه را در همه برنامهها فراهم میکند.پیونددهی هوشمند: Android 9 کلاس
TextClassifierرا بهبود میبخشد، که از یادگیری ماشین برای شناسایی برخیاز نهادها در نوشتار انتخابشده و پیشنهاد کنشها استفاده میکند. برای مثال،TextClassifierمیتواند برنامه شما را قادر سازد تشخیص دهد که کاربر شماره تلفنی را انتخاب کرده است. برنامه شما میتواند به کاربر پیشنهاد دهد که بااستفاده از آن شماره تماس تلفنی برقرار کند. ویژگیهایTextClassifierجایگزین عملکرد کلاسLinkifyمیشود.چیدمان نوشتار: چندین روش و مشخصه راحت پیادهسازی طراحی واسط کاربر را آسانتر میکند. برای جزئیات، مستندات مرجع
TextViewرا ببینید.
تبدیل پیشازموقع ART فایلهای DEX
در دستگاههای دارای Android 9 یا بالاتر، زمان اجرای Android (ART) بااستفاده از کامپایلر پیشاززمان، فایلهای فشرده «قالب اجرایی Dalvik» (DEX) را با تبدیل فایلهای DEX در بسته برنامه به نمایش فشردهتر بهینهسازی میکند. این تغییر به برنامه شما امکان میدهد سریعتر شروع شود و فضای دیسک و RAM کمتری مصرف کند.
این بهبود بهویژه برای دستگاههای پایینرده با سرعتهای ورودی/خروجی دیسک کندتر مفید است.
ردیابی سیستم دروندستگاهی
Android 9 به شما امکان میدهد ردپاهای سیستم را از دستگاهتان ضبط کنید، سپس گزارشی از این ضبطها را با تیم توسعهتان همرسانی کنید. این گزارش از قالبهای مختلف، ازجمله HTML، پشتیبانی میکند.
با جمعآوری این ردپاها، میتوانید دادههای زمانبندی مربوط به فرایندها و رشتههای برنامهتان را ضبط کنید و انواع دیگر وضعیتهای دستگاه را که در سطح جهانی اهمیت دارند مشاهده کنید.
برای کسب اطلاعات بیشتر درباره این ابزار، به انجام ردیابی سیستم دروندستگاهی مراجعه کنید.