اندروید ۱۰ ویژگیها و قابلیتهای فوقالعادهای را برای کاربران و توسعهدهندگان معرفی میکند. این سند، موارد موجود برای توسعهدهندگان را برجسته میکند.
برای کسب اطلاعات در مورد APIها، گزارش تفاوت API را بخوانید یا از مرجع API اندروید دیدن کنید - به دنبال APIهایی باشید که "در سطح API 29 اضافه شدهاند". همچنین حتماً تغییرات رفتاری اندروید 10 (برای برنامههایی که API سطح 29 را هدف قرار میدهند و برای همه برنامهها ) و همچنین تغییرات حریم خصوصی را بررسی کنید تا در مورد حوزههایی که تغییرات پلتفرم ممکن است بر برنامههای شما تأثیر بگذارد، اطلاعات کسب کنید.
پیشرفتهای امنیتی
اندروید ۱۰ تعدادی ویژگی امنیتی را معرفی میکند که در بخشهای بعدی خلاصهای از آنها ارائه شده است.
بهبود پنجرههای احراز هویت بیومتریک
اندروید ۱۰ بهبودهای زیر را در پشتیبانی از احراز هویت بیومتریک معرفی میکند:
- بررسی قابلیت احراز هویت بیومتریک.
- یک مکانیزم جایگزین که به کاربر اجازه میدهد در صورت عدم امکان احراز هویت با استفاده از ورودی بیومتریک خود، با استفاده از پین، الگو یا رمز عبور دستگاه خود احراز هویت کند.
- یک راهنما که به سیستم میگوید پس از احراز هویت کاربر با استفاده از یک روش بیومتریک ضمنی، نیازی به تأیید کاربر نداشته باشد. برای مثال، میتوانید به سیستم بگویید که پس از احراز هویت کاربر با استفاده از احراز هویت چهره، دیگر نیازی به تأیید کاربر نباشد.
اجرای کد DEX تعبیهشده مستقیماً از APK
از اندروید ۱۰ به بعد، میتوانید به پلتفرم بگویید که کد DEX تعبیهشده را مستقیماً از فایل APK برنامه شما اجرا کند. این گزینه میتواند در صورتی که مهاجمی موفق به دستکاری کد کامپایلشده محلی روی دستگاه شود، به جلوگیری از حمله کمک کند.
برای اطلاعات بیشتر، به اجرای کد DEX تعبیهشده مستقیماً از APK مراجعه کنید.
پشتیبانی از TLS 1.3
اندروید ۱۰ پشتیبانی از TLS 1.3 را اضافه میکند. TLS 1.3 یک بازنگری اساسی در استاندارد TLS است که شامل مزایای عملکرد و امنیت پیشرفته میشود. معیارهای ما نشان میدهد که اتصالات امن با TLS 1.3 در مقایسه با TLS 1.2 میتوانند تا ۴۰٪ سریعتر برقرار شوند.
برای جزئیات بیشتر در مورد پیادهسازی TLS 1.3 توسط ما، به بخش TLS در صفحه تغییرات رفتاری برای همه برنامهها مراجعه کنید.
API عمومی رمزگذاری
از اندروید ۱۰ به بعد، ارائهدهندهی امنیت Conscrypt یک API عمومی برای عملکرد TLS در نظر گرفته است.
مجموعه کلاسهای زیر android.net.ssl شامل متدهای استاتیک برای دسترسی به قابلیتهایی هستند که از طریق APIهای عمومی javax.net.ssl در دسترس نیستند. نام این کلاسها را میتوان به صورت جمع کلاس javax.net.ssl مربوطه استنباط کرد. به عنوان مثال، کدی که روی نمونههایی از javax.net.ssl.SSLSocket عمل میکند، میتواند به جای آن از متدهای SSLSockets استفاده کند.
ویژگیهای اتصال
اندروید ۱۰ شامل چندین پیشرفت مرتبط با شبکه و اتصال است.
API اتصال به شبکه وایفای
اندروید ۱۰ پشتیبانی از اتصالات نظیر به نظیر را اضافه میکند. این ویژگی به برنامه شما این امکان را میدهد که با استفاده از WifiNetworkSpecifier برای توصیف ویژگیهای شبکه درخواستی، از کاربر بخواهد نقطه دسترسی که دستگاه به آن متصل است را تغییر دهد. اتصال نظیر به نظیر برای اهدافی غیر از ارائه شبکه، مانند پیکربندی بوتاسترپ برای دستگاههای ثانویه مانند Chromecast و سختافزار Google Home استفاده میشود.
برای اطلاعات بیشتر، به API درخواست شبکه Wi-Fi برای اتصال نظیر به نظیر مراجعه کنید.
API پیشنهاد شبکه وایفای
اندروید ۱۰ پشتیبانی از برنامه شما را برای اتصال به یک نقطه دسترسی وایفای اضافه میکند. شما میتوانید پیشنهادهایی برای اتصال به شبکه ارائه دهید. در نهایت، پلتفرم بر اساس ورودی شما و سایر برنامهها، نقطه دسترسی مورد نظر را انتخاب میکند.
برای اطلاعات بیشتر در مورد این ویژگی، به پیشنهاد Wi-Fi مراجعه کنید.
بهبودهایی در حالتهای عملکرد بالا و تأخیر پایین وایفای
اندروید ۱۰ به شما این امکان را میدهد که برای به حداقل رساندن تأخیر، به مودم اصلی اشاره کنید.
اندروید ۱۰ API قفل وایفای را گسترش داده تا به طور مؤثر از حالت عملکرد بالا و حالت تأخیر کم پشتیبانی کند. صرفهجویی در مصرف انرژی وایفای برای حالت عملکرد بالا و تأخیر کم غیرفعال است و بسته به پشتیبانی مودم، بهینهسازی بیشتر تأخیر ممکن است در حالت تأخیر کم فعال شود.
حالت کم تأخیر فقط زمانی فعال میشود که برنامهای که قفل را دریافت میکند در پیشزمینه اجرا شود و صفحه نمایش روشن باشد. حالت کم تأخیر به ویژه برای برنامههای بازی موبایل در لحظه مفید است.
جستجوی تخصصی در DNS resolver
اندروید ۱۰ پشتیبانی بومی برای جستجوی تخصصی DNS با استفاده از جستجوی متن ساده و حالت DNS-over-TLS اضافه میکند. پیش از این، تحلیلگر DNS پلتفرم فقط از رکوردهای A و AAAA پشتیبانی میکرد که امکان جستجوی فقط آدرسهای IP مرتبط با یک نام را فراهم میکردند، اما از هیچ نوع رکورد دیگری پشتیبانی نمیکردند. API DnsResolver ، وضوح عمومی و ناهمزمان را ارائه میدهد و شما را قادر میسازد SRV ، NAPTR و سایر انواع رکورد را جستجو کنید. توجه داشته باشید که تجزیه پاسخ به برنامه واگذار شده است.
برای برنامههای مبتنی بر NDK، به android_res_nsend مراجعه کنید.
اتصال آسان وایفای
اندروید ۱۰ به شما این امکان را میدهد که از Easy Connect برای ارائه اعتبارنامههای Wi-Fi به یک دستگاه همتا، به عنوان جایگزینی برای WPS که منسوخ شده است، استفاده کنید. برنامهها میتوانند Easy Connect را با استفاده از اینتنت ACTION_PROCESS_WIFI_EASY_CONNECT_URI در جریان راهاندازی و ارائه خود ادغام کنند.
برای اطلاعات بیشتر در مورد این ویژگی، به Wi-Fi Easy Connect مراجعه کنید.
API اتصال Wi-Fi Direct
کلاسهای WifiP2pConfig و WifiP2pManager API در اندروید ۱۰ بهروزرسانی شدهاند تا از قابلیتهای برقراری اتصال سریع به Wi-Fi Direct با استفاده از اطلاعات از پیش تعیینشده پشتیبانی کنند. این اطلاعات از طریق یک کانال جانبی مانند بلوتوث یا NFC به اشتراک گذاشته میشوند.
نمونه کد زیر نحوه ایجاد یک گروه با استفاده از اطلاعات از پیش تعیین شده را نشان میدهد:
کاتلین
val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager val channel = manager.initialize(this, mainLooper, null) // prefer 5G band for this group val config = WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build() // create a non-persistent group on 5GHz manager.createGroup(channel, config, null)
جاوا
WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); Channel channel = manager.initialize(this, getMainLooper(), null); // prefer 5G band for this group WifiP2pConfig config = new WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build(); // create a non-persistent group on 5GHz manager.createGroup(channel, config, null);
برای پیوستن به یک گروه با استفاده از اعتبارنامهها، manager.createGroup() را با موارد زیر جایگزین کنید:
کاتلین
manager.connect(channel, config, null)
جاوا
manager.connect(channel, config, null);
کانالهای اتصالگرای بلوتوث LE (CoC)
اندروید ۱۰ به برنامه شما این امکان را میدهد که از اتصالات BLE CoC برای انتقال جریانهای داده بزرگتر بین دو دستگاه BLE استفاده کند. این رابط، بلوتوث و مکانیک اتصال را برای سادهسازی پیادهسازی، انتزاعی میکند.
ویژگیهای تلفن
اندروید ۱۰ شامل چندین بهبود مرتبط با تلفن است.
بهبود کیفیت تماس
اندروید ۱۰ قابلیتی را اضافه کرده است که به موجب آن میتوان اطلاعاتی در مورد کیفیت تماسهای مداوم IP Multimedia Subsystem (IMS)، از جمله کیفیت ورودی و خروجی شبکه، در دستگاههایی که از این ویژگی پشتیبانی میکنند، جمعآوری کرد.
غربالگری تماس و شناسه تماس گیرنده
اندروید ۱۰ ابزاری را در اختیار برنامه شما قرار میدهد تا تماسهایی که در دفترچه آدرس کاربر نیستند را به عنوان تماسهای اسپم شناسایی کند و تماسهای اسپم را به طور بیصدا از طرف کاربر رد کند. اطلاعات مربوط به این تماسهای مسدود شده به عنوان تماسهای مسدود شده در گزارش تماس ثبت میشوند تا شفافیت بیشتری برای کاربر در هنگام از دست دادن تماسها فراهم شود. استفاده از این API نیاز به دریافت مجوزهای READ_CALL_LOG از کاربر را برای ارائه قابلیت غربالگری تماس و شناسه تماسگیرنده از بین میبرد.
API سرویس تغییر مسیر تماس
اندروید ۱۰ نحوه مدیریت اهداف تماس را تغییر میدهد. پخش NEW_OUTGOING_CALL منسوخ شده و با API CallRedirectionService جایگزین شده است. API CallRedirectionService رابطهایی را برای شما فراهم میکند تا تماسهای خروجی انجام شده توسط پلتفرم اندروید را تغییر دهید. به عنوان مثال، برنامههای شخص ثالث ممکن است تماسها را لغو کرده و آنها را از طریق VoIP تغییر مسیر دهند.
بهبودهایی در ایجاد فایلها در حافظه خارجی
علاوه بر معرفی فضای ذخیرهسازی محدود (scoped storage )، اندروید ۱۰ قابلیتهای زیر را در رابطه با فضای ذخیرهسازی خارجی اضافه کرده است:
- شما میتوانید از پرچم
IS_PENDINGبرای دادن دسترسی انحصاری به یک فایل رسانهای هنگام نوشتن آن روی دیسک به برنامه خود استفاده کنید. - اگر از محل خاصی که فایلها باید در آن ذخیره شوند آگاه هستید، میتوانید به سیستم راهنمایی ارائه دهید تا فایلهای تازه نوشته شده را در آن ذخیره کند.
- هر دستگاه ذخیرهسازی خارجی یک نام درایو منحصر به فرد دارد.
رسانه و گرافیک
اندروید ۱۰ ویژگیها و APIهای جدید رسانهای و گرافیکی زیر را معرفی میکند:
اشتراک گذاری ورودی صدا
اندروید ۱۰ قابلیتی را اضافه کرده است که دو برنامه میتوانند ورودی صدا را به طور همزمان به اشتراک بگذارند. برای اطلاعات کامل، به بخش «اشتراکگذاری ورودی صدا» مراجعه کنید.
ضبط پخش صدا
اندروید ۱۰ به یک برنامه این امکان را میدهد که پخش صدا را از برنامههای دیگر ضبط کند. برای اطلاعات کامل، به ضبط پخش مراجعه کنید.
نوار جستجو در اعلانهای MediaStyle
از اندروید ۱۰ به بعد، اعلانهای MediaStyle یک نوار جستجو (seekbar) نمایش میدهند. نوار جستجو، پیشرفت پخش را از PlaybackState.getPosition() نشان میدهد و در برخی موارد میتوان از نوار جستجو برای جستجوی مکانی در برنامه پخش استفاده کرد. ظاهر و رفتار نوار جستجو توسط این قوانین کنترل میشود:
- اگر یک
MediaSessionفعال وجود داشته باشد و مدت زمان آن (که توسطMediaMetadata.METADATA_KEY_DURATIONمشخص میشود) بزرگتر از صفر باشد، نوار جستجو ظاهر میشود. این بدان معناست که این نوار برای استریمهای نامشخص مانند پخش زنده و پخش رادیویی ظاهر نمیشود. - اگر جلسه
ACTION_SEEK_TOپیادهسازی کند، کاربر میتواند نوار جستجو را برای کنترل محل پخش بکشد.
رابط برنامهنویسی MIDI بومی
رابط برنامهنویسی کاربردی MIDI بومی اندروید (AMidi) به توسعهدهندگان برنامهها این امکان را میدهد که دادههای MIDI را با کد C/C++ ارسال و دریافت کنند، که این امر باعث ادغام بیشتر با منطق صوتی/کنترلی C/C++ آنها و به حداقل رساندن نیاز به JNI میشود.
برای اطلاعات بیشتر، به Android Native MIDI API مراجعه کنید.
بهبودهای MediaCodecInfo
اندروید ۱۰ روشهایی را به MediaCodecInfo اضافه میکند که اطلاعات بیشتری در مورد یک کدک نشان میدهد.
برای اطلاعات بیشتر، به کدکهای رسانه مراجعه کنید.
API حرارتی
وقتی دستگاهها خیلی گرم میشوند، ممکن است CPU و/یا GPU را تحت فشار قرار دهند و این میتواند برنامهها و بازیها را به روشهای غیرمنتظرهای تحت تأثیر قرار دهد. برنامههایی که از گرافیک پیچیده، محاسبات سنگین یا فعالیت شبکهای مداوم استفاده میکنند، بیشتر احتمال دارد با مشکلاتی مواجه شوند و این مشکلات میتوانند در دستگاههای مختلف بر اساس چیپست و فرکانس هسته، سطح ادغام و همچنین بستهبندی و شکل ظاهری دستگاه متفاوت باشند.
در اندروید ۱۰، برنامهها و بازیها میتوانند از یک API حرارتی برای نظارت بر تغییرات دستگاه استفاده کنند و برای حفظ مصرف انرژی کمتر و بازیابی دمای عادی، اقداماتی انجام دهند. برنامهها یک شنونده (listener) در PowerManager ثبت میکنند که از طریق آن سیستم وضعیت حرارتی مداوم را از خفیف و متوسط تا شدید، بحرانی، اضطراری و خاموش شدن گزارش میدهد.
وقتی دستگاه گزارش استرس حرارتی میدهد، برنامهها و بازیها میتوانند با متوقف کردن فعالیتهای جاری برای کاهش مصرف برق به روشهای مختلف، به شما کمک کنند. برای مثال، برنامههای پخش جریانی میتوانند وضوح/نرخ بیت یا ترافیک شبکه را کاهش دهند، یک برنامه دوربین میتواند فلش یا بهبود فشرده تصویر را غیرفعال کند، یک بازی میتواند نرخ فریم یا موزاییککاری چندضلعی را کاهش دهد، یک برنامه رسانهای میتواند صدای بلندگو را کاهش دهد و یک برنامه نقشه میتواند GPS را خاموش کند.
رابط برنامهنویسی کاربردی حرارتی به یک لایه HAL جدید برای دستگاه نیاز دارد - این لایه در حال حاضر در دستگاههای پیکسل با اندروید ۱۰ پشتیبانی میشود و ما در حال همکاری با شرکای سازنده دستگاه خود هستیم تا در اسرع وقت پشتیبانی گستردهای را برای این اکوسیستم فراهم کنیم.
دوربین و تصاویر
اندروید ۱۰ ویژگیهای جدید زیر را در رابطه با دوربین و تصویر معرفی میکند:
پشتیبانی از دوربین تک رنگ
اندروید ۹ (سطح API 28) برای اولین بار قابلیت دوربین تک رنگ را معرفی کرد. اندروید ۱۰ چندین پیشرفت را به پشتیبانی از دوربین تک رنگ اضافه میکند:
- پشتیبانی از فرمت جریان Y8 برای بهبود کارایی حافظه.
- پشتیبانی از ضبط DNG خام تک رنگ.
- معرفی شمارشهای MONO و NIR CFA برای تمایز بین دوربینهای تک رنگ معمولی و دوربینهای مادون قرمز نزدیک.
شما میتوانید از این ویژگی برای گرفتن یک تصویر تک رنگ اصلی استفاده کنید. یک دستگاه چند دوربینه منطقی میتواند از یک دوربین تک رنگ به عنوان یک دوربین فرعی فیزیکی برای دستیابی به کیفیت تصویر بهتر در نور کم استفاده کند.
قالب عمق پویا
از اندروید ۱۰ به بعد، دوربینها میتوانند دادههای عمق یک تصویر را با استفاده از یک طرحواره جدید به نام قالب عمق پویا (DDF) در یک فایل جداگانه ذخیره کنند. برنامهها میتوانند هم تصویر JPG و هم فراداده عمق آن را درخواست کنند و با استفاده از این اطلاعات، هرگونه تاری که میخواهند را در پردازش پس از پردازش و بدون تغییر دادههای تصویر اصلی اعمال کنند.
برای مطالعه مشخصات این قالب، به قالب عمق پویا مراجعه کنید.
فرمت فایل تصویری با راندمان بالا
فرمت فایل تصویری با راندمان بالا (HEIF) یک فرمت استاندارد تصویر و ویدیو است که در مقایسه با سایر فرمتهای فایل، کدگذاری با کیفیت بالاتر و حجم فایل کمتری را ارائه میدهد.
برای اطلاعات بیشتر در مورد فرمت فایل، به HEIC مراجعه کنید.
پیشرفتها در دوربینهای چندگانه
اندروید ۱۰ ادغام چندین دوربین در یک دوربین منطقی واحد را بهبود بخشیده است، ویژگیای که در اندروید ۹ (سطح API ۲۸) معرفی شد. موارد زیر به API Camera2 اضافه شدهاند:
isSessionConfigurationSupported(SessionConfiguration sessionConfig)— به شما امکان میدهد تا بررسی کنید که آیا پیکربندی جلسهی ارسالی میتواند برای ایجاد یک جلسهی ضبط دوربین استفاده شود یا خیر.LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID— به شما امکان میدهد شناسه دوربین فیزیکی فعال پشتیبان یک دستگاه دوربین منطقی را تعیین کنید. میتوانید از شناسههای برگردانده شده برای درخواست جریانهای منطقی و جریانهای فیزیکی زیردوربین برای دستیابی به بهرهوری بهتر برق استفاده کنید.
API سرویسهای دسترسیپذیری
اندروید ۱۰ ویژگیها و APIهای جدید سرویس دسترسیپذیری زیر را معرفی میکند:
پرچم کلید ورودی AccessibilityNodeInfo
از اندروید ۱۰ به بعد، میتوانید isTextEntryKey() فراخوانی کنید تا مشخص شود که آیا AccessibilityNodeInfo داده شده، نشان دهنده یک کلید ورودی متن است که بخشی از صفحه کلید یا صفحه کلید است یا خیر.
بازخورد گفتاری در مورد دیالوگ دسترسیپذیری
در مواردی که کاربران برای شروع یک سرویس دسترسی نیاز به اجرای میانبر دسترسی داشته باشند، اندروید ۱۰ در صورت درخواست سرویس، امکان همراهی کادر محاورهای با یک پیام تبدیل متن به گفتار را فراهم میکند.
میانبر دسترسی هنگام فعال بودن پیمایش اشارهای
وقتی ویژگی ناوبری حرکتی در اندروید ۱۰ فعال باشد، دکمه دسترسی قابل مشاهده یا انتخاب نیست. برای دسترسی به منوی سرویسهای دسترسی، کاربران باید یکی از حرکات زیر را انجام دهند:
- با دو انگشت به بالا بکشید.
- با دو انگشت به بالا بکشید و نگه دارید.
میانبر دسترسی برای صفحه کلیدهای فیزیکی
در اندروید ۱۰، کاربران میتوانند با فشار دادن کلیدهای Control+Alt+Z، میانبر دسترسی را روی صفحهکلید فیزیکی فعال کنند.
بهبود کنترلر کیبورد نرم افزاری
در اندروید ۱۰، سرویسهای دسترسی میتوانند درخواست کنند که صفحهکلید نرمافزاری حتی زمانی که دستگاه یک صفحهکلید سختافزاری متصل را شناسایی میکند، نمایش داده شود. کاربران میتوانند این رفتار را لغو کنند.
زمانهای دسترسی تعریفشده توسط کاربر
اندروید ۱۰ API مربوط به getRecommendedTimeoutMillis() را معرفی میکند. این متد از وقفههای تعریفشده توسط کاربر برای عناصر رابط کاربری تعاملی و غیرتعاملی پشتیبانی میکند. مقدار بازگشتی تحت تأثیر تنظیمات کاربر و APIهای سرویس دسترسی قرار میگیرد.
بهبودهای تکمیل خودکار
اندروید ۱۰ شامل بهبودهای زیر در سرویس تکمیل خودکار است.
درخواستهای تکمیل خودکار مربوط به سازگاری
میتوانید از پرچم FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST برای تعیین اینکه آیا درخواست تکمیل خودکار از طریق حالت سازگاری ایجاد شده است یا خیر، استفاده کنید.
ذخیره نام کاربری و رمز عبور به صورت همزمان
شما میتوانید با استفاده از پرچم SaveInfo.FLAG_DELAY_SAVE از مواردی که یک برنامه از چندین فعالیت برای نمایش نام کاربری، رمز عبور و سایر فیلدها استفاده میکند، پشتیبانی کنید.
تعامل کاربر با رابط کاربری ذخیره
شما میتوانید با تنظیم یک شنوندهی اکشن روی کادر محاورهای و تغییر میزان نمایش نمای ریموت رمز عبور مربوطه، فیلد رمز عبور را در کادر محاورهای ذخیره، نمایش داده و پنهان کنید.
پشتیبانی از بهروزرسانی مجموعه دادهها
قابلیت تکمیل خودکار میتواند رمزهای عبور موجود را بهروزرسانی کند. برای مثال، اگر کاربری از قبل رمز عبوری را ذخیره کرده باشد و رمز عبور جدیدی را ذخیره کند، قابلیت تکمیل خودکار به جای ذخیره رمز عبور جدید، از کاربر میخواهد که رمز عبور موجود را بهروزرسانی کند.
بهبودهای طبقهبندی میدان
اندروید ۱۰ شامل بهبودهای زیر در API طبقهبندی فیلدها است.
سازندهی UserData.Builder
سازندهی UserData.Builder تغییر کرده است تا با الگوی Builder بهتر همتراز شود.
اجازه دهید یک مقدار به چندین نوع شناسه دسته بندی نگاشت شود
هنگام استفاده از UserData.Builder در اندروید ۱۰، اکنون میتوانید یک مقدار را به چندین نوع شناسه دستهبندی نگاشت کنید. در نسخههای قبلی، اگر یک مقدار بیش از یک بار اضافه میشد، یک استثنا ایجاد میشد.
پشتیبانی بهبود یافته برای شماره کارتهای اعتباری
طبقهبندی فیلد اکنون میتواند اعداد چهار رقمی را به عنوان چهار رقم آخر شماره کارت اعتباری تشخیص دهد.
پشتیبانی از طبقهبندی فیلدهای خاص برنامه
اندروید ۱۰ FillResponse.setUserData() را اضافه کرده است که به شما امکان میدهد دادههای کاربر مختص برنامه را برای مدت زمان جلسه تنظیم کنید. این به سرویس تکمیل خودکار کمک میکند تا انواع فیلدهای دارای محتوای مختص برنامه را تشخیص دهد.
رابط کاربری و کنترلهای سیستم
اندروید ۱۰ بهبودهای رابط کاربری زیر را ارائه میدهد:
پشتیبانی از کلاهکهای JVMTI PopFrame
اندروید ۱۰ پشتیبانی از قابلیت can_pop_frames را در پیادهسازی JVMTI اندروید اضافه کرده است. هنگام اشکالزدایی، این ویژگی به شما امکان میدهد تا پس از توقف در یک نقطه توقف و تنظیم توابع محلی، سراسری یا پیادهسازی یک تابع، توابع را دوباره اجرا کنید. برای اطلاعات بیشتر، به صفحه مرجع Pop Frame اوراکل مراجعه کنید.
API کنترل سطح
اندروید ۱۰ یک رابط برنامهنویسی کاربردی (API) به نام SurfaceControl برای دسترسی سطح پایین به کامپوزیتور سیستم (System-compositor) ( SurfaceFlinger ) ارائه میدهد. برای اکثر کاربران، SurfaceView روش صحیح استفاده از کامپوزیتور است. رابط برنامهنویسی کاربردی SurfaceControl میتواند در موارد خاصی مفید باشد، به عنوان مثال:
- هماهنگسازی چندین سطح
- تعبیه سطح با فرآیند متقاطع
- مدیریت طول عمر سطح پایین
رابط برنامهنویسی SurfaceControl هم در قالب SDK و هم در قالب NDK موجود است. پیادهسازی NDK شامل یک رابط برنامهنویسی کاربردی (API) برای تبادل دستی بافرها با کامپوزیتور است. این یک جایگزین برای کاربرانی است که با محدودیتهای BufferQueue مواجه شدهاند.
تشخیص رندر هنگ کرده در WebView
اندروید ۱۰ کلاس انتزاعی WebViewRenderProcessClient را معرفی میکند که برنامهها میتوانند از آن برای تشخیص عدم پاسخگویی یک WebView استفاده کنند. برای استفاده از این کلاس:
- زیرکلاس خودتان را تعریف کنید و متدهای
onRenderProcessResponsive()وonRenderProcessUnresponsive()آن را پیادهسازی کنید. - یک نمونه از
WebViewRenderProcessClientخود را به یک یا چند شیءWebViewمتصل کنید. - اگر
WebViewاز کار بیفتد، سیستم متدonRenderProcessUnresponsive()کلاینت را فراخوانی میکند وWebViewوWebViewRenderProcessارسال میکند. (اگرWebViewتکپردازشی باشد، پارامترWebViewRenderProcessبرابر با null است.) برنامه شما میتواند اقدام مناسبی انجام دهد، مانند نمایش یک کادر محاورهای به کاربر که میپرسد آیا میخواهد فرآیند رندرینگ را متوقف کند یا خیر.
اگر WebView همچنان پاسخگو نباشد، سیستم به صورت دورهای (نه بیش از هر پنج ثانیه یک بار) onRenderProcessUnresponsive() را فراخوانی میکند، اما هیچ اقدام دیگری انجام نمیدهد. اگر WebView دوباره پاسخگو شود، سیستم فقط یک بار onRenderProcessResponsive() را فراخوانی میکند.
پنلهای تنظیمات
اندروید ۱۰ پنلهای تنظیمات (Settings Panels) را معرفی میکند، یک API که به برنامهها اجازه میدهد تنظیمات را در متن برنامه خود به کاربران نشان دهند. این امر باعث میشود کاربران برای استفاده از برنامه نیازی به مراجعه به تنظیمات برای تغییر مواردی مانند NFC یا داده تلفن همراه نداشته باشند.


برای مثال، فرض کنید کاربری مرورگر وب را باز میکند در حالی که دستگاهش در حالت هواپیما است. قبل از اندروید ۱۰، برنامه فقط میتوانست یک پیام عمومی نمایش دهد که از کاربر میخواست برای بازیابی اتصال، تنظیمات را باز کند. با اندروید ۱۰، برنامه مرورگر میتواند یک پنل درونخطی نمایش دهد که تنظیمات کلیدی اتصال مانند حالت هواپیما، وایفای (شامل شبکههای نزدیک) و داده تلفن همراه را نشان میدهد. با استفاده از این پنل، کاربران میتوانند بدون ترک برنامه، اتصال را بازیابی کنند.
برای نمایش یک پنل تنظیمات، یک اینتنت با یکی از اکشنهای Settings.Panel زیر اجرا کنید:
کاتلین
val panelIntent = Intent(Settings.Panel.settings_panel_type) startActivityForResult(panelIntent)
جاوا
Intent panelIntent = new Intent(Settings.Panel.settings_panel_type); startActivityForResult(panelIntent);
settings_panel_type میتواند یکی از موارد زیر باشد:
-
ACTION_INTERNET_CONNECTIVITY - تنظیمات مربوط به اتصال به اینترنت، مانند حالت هواپیما، Wi-Fi و داده تلفن همراه را نشان میدهد.
-
ACTION_WIFI - تنظیمات وایفای را نشان میدهد، اما سایر تنظیمات اتصال را نشان نمیدهد . این برای برنامههایی که برای انجام آپلودها یا دانلودهای بزرگ به اتصال وایفای نیاز دارند مفید است.
-
ACTION_NFC - تمام تنظیمات مربوط به ارتباط میدان نزدیک (NFC) را نشان میدهد.
-
ACTION_VOLUME - تنظیمات صدا را برای همه جریانهای صوتی نشان میدهد.
اشتراکگذاری بهبودها
اندروید ۱۰ بهبودهای متعددی در زمینه اشتراکگذاری ارائه میدهد:
API اشتراکگذاری میانبرها
رابط برنامهنویسی کاربردی (API) میانبرهای اشتراکگذاری (Sharing Shortcuts API) جایگزین رابطهای برنامهنویسی کاربردی اشتراکگذاری مستقیم (Direct Share APIs) میشود.
به جای بازیابی نتایج به صورت واکنشی بر اساس تقاضا، API میانبرهای اشتراکگذاری به برنامهها اجازه میدهد تا اهداف اشتراکگذاری مستقیم را از قبل منتشر کنند. ShortcutManager اینگونه کار میکند. از آنجایی که دو API مشابه هستند، ما API ShortcutInfo را گسترش دادهایم تا استفاده از هر دو ویژگی آسانتر شود. با API میانبرهای اشتراکگذاری، میتوانید مستقیماً دستهها یا افراد را به یک هدف اشتراکگذاری اختصاص دهید. اهداف اشتراکگذاری در سیستم باقی میمانند تا زمانی که همان برنامه آنها را بهروزرسانی کند یا برنامه حذف نصب شود.
مکانیزم قدیمیتر اشتراکگذاری مستقیم هنوز کار میکند، اما برنامههایی که از آن استفاده میکنند، اولویت پایینتری نسبت به برنامههایی دارند که از API میانبرهای اشتراکگذاری استفاده میکنند.
ShortcutInfo.Builder متدهایی را برای ارائه اطلاعات بیشتر در مورد هدف اشتراکگذاری اضافه و بهبود میبخشد.
اهداف سهم مستقیم
شما میتوانید یک میانبر پویا را به عنوان یک هدف اشتراکگذاری مستقیم منتشر کنید. به بخش انتشار اهداف اشتراکگذاری مستقیم مراجعه کنید.
ShortcutManagerCompat یک API جدید AndroidX است که سازگاری معکوس با API قدیمی DirectShare را فراهم میکند. این روش ترجیحی برای انتشار اهداف اشتراکگذاری است.
پیشنمایش متن
وقتی یک برنامه محتوای متنی را به اشتراک میگذارد، میتواند پیشنمایش اختیاری از محتوا را در رابط کاربری Sharesheet نشان دهد.
به افزودن پیشنمایشهای متن غنی مراجعه کنید
بیشتر بدانید
برای اطلاعات بیشتر در مورد نحوه اشتراکگذاری دادهها توسط برنامهها، به ارسال دادههای ساده به برنامههای دیگر و دریافت دادههای ساده از برنامههای دیگر مراجعه کنید.
تم تاریک
اندروید ۱۰ یک تم تاریک ارائه میدهد که هم برای رابط کاربری سیستم اندروید و هم برای برنامههای در حال اجرا روی دستگاه اعمال میشود. برای اطلاعات کامل، به تم تاریک مراجعه کنید.
انواع خدمات پیشزمینه
اندروید ۱۰ ویژگی مانیفست XML foregroundServiceType را معرفی میکند که میتوانید آن را در تعریف چندین سرویس خاص بگنجانید. اگرچه به ندرت مناسب است، اما میتوان چندین نوع سرویس پیشزمینه را به یک سرویس خاص اختصاص داد.
جدول زیر انواع مختلف سرویسهای پیشزمینه و سرویسهایی را که اعلان یک نوع خاص در آنها مناسب است، نشان میدهد:
| نوع سرویس پیشزمینه | مثالی از مورد استفاده برای سرویسی که باید این نوع را اعلام کند |
|---|---|
connectedDevice | نظارت بر یک ردیاب تناسب اندام پوشیدنی |
dataSync | دانلود فایلها از یک شبکه |
location | ادامه دادن یک اقدام آغاز شده توسط کاربر |
mediaPlayback | یک کتاب صوتی، پادکست یا موسیقی پخش کنید |
mediaProjection | ضبط ویدیو از صفحه نمایش دستگاه در مدت زمان کوتاه |
phoneCall | مدیریت تماسهای تلفنی مداوم |
کاتلین
اندروید ۱۰ شامل بهروزرسانیهای زیر برای توسعه کاتلین است.
حاشیهنویسیهای قابلیت تهیسازی برای APIهای libcore
اندروید ۱۰ پوشش حاشیهنویسیهای مربوط به nullability را در SDK برای APIهای libcore بهبود میبخشد. این حاشیهنویسیها به توسعهدهندگان برنامه که از تحلیل nullability کاتلین یا جاوا در اندروید استودیو استفاده میکنند، این امکان را میدهد که هنگام تعامل با این APIها، اطلاعات مربوط به nullness را دریافت کنند.
معمولاً نقض قرارداد nullability در کاتلین منجر به خطاهای کامپایل میشود. برای اطمینان از سازگاری با کد موجود شما، فقط حاشیهنویسیهای @RecentlyNullable و @RecentlyNonNull اضافه میشوند. این بدان معناست که نقض nullability منجر به هشدار به جای خطا میشود.
علاوه بر این، هرگونه حاشیهنویسی @RecentlyNullable یا @RecentlyNonNull که در اندروید ۹ اضافه شده بودند، به ترتیب به @Nullable و @NonNull تغییر میکنند. این بدان معناست که در اندروید ۱۰ و بالاتر، نقض nullability به جای هشدار منجر به خطا میشود.
برای اطلاعات بیشتر در مورد تغییرات حاشیهنویسی، به بخش «Android Pie SDK اکنون با کاتلین سازگارتر است» در وبلاگ توسعهدهندگان اندروید مراجعه کنید.
ان دی کی
اندروید ۱۰ شامل تغییرات NDK زیر است.
اشکالزدایی بهبود یافته از مالکیت توصیفگر فایل
اندروید ۱۰ قابلیت fdsan را اضافه کرده است که به شما کمک میکند مشکلات مربوط به مالکیت توصیفگر فایل را راحتتر پیدا و برطرف کنید.
اشکالات مربوط به سوء مدیریت مالکیت توصیفگر فایل، که معمولاً به صورت استفاده پس از بستن و دوبار بستن ظاهر میشوند، مشابه اشکالات تخصیص حافظه استفاده پس از آزادسازی و آزادسازی دوبار هستند، اما تشخیص و رفع آنها بسیار دشوارتر است. fdsan تلاش میکند تا با اعمال مالکیت توصیفگر فایل، سوء مدیریت توصیفگر فایل را شناسایی و/یا از آن جلوگیری کند.
برای اطلاعات بیشتر در مورد خرابیهای مربوط به این مشکلات، به بخش «خطا شناسایی شده توسط fdsan» مراجعه کنید. برای اطلاعات بیشتر در مورد fdsan، به صفحه Googlesource در مورد fdsan مراجعه کنید.
الف TLS
برنامههایی که با استفاده از NDK با حداقل سطح API 29 ساخته شدهاند، میتوانند به جای emutls از ELF TLS استفاده کنند. پشتیبانی از لینکر پویا و ایستا برای پشتیبانی از این روش مدیریت متغیرهای محلی نخ اضافه شده است.
برای برنامههایی که برای API سطح ۲۸ و پایینتر ساخته شدهاند، بهبودهایی برای libgcc/compiler-rt پیادهسازی شده است تا برخی از مشکلات emutls را برطرف کند.
برای اطلاعات بیشتر، به تغییرات اندروید برای توسعهدهندگان NDK مراجعه کنید.
زمان اجرا
اندروید ۱۰ شامل تغییر زمان اجرای زیر است.
راهاندازی جمعآوری زباله مبتنی بر Mallinfo
وقتی اشیاء کوچک جاوا در پلتفرم به اشیاء بزرگ در هیپ C++ ارجاع میدهند، اشیاء C++ اغلب فقط زمانی قابل بازیابی هستند که شیء جاوا جمعآوری و مثلاً نهایی شده باشد. در نسخههای قبلی، پلتفرم اندازه بسیاری از اشیاء C++ مرتبط با اشیاء جاوا را تخمین میزد. این تخمین همیشه دقیق نبود و گاهی اوقات منجر به افزایش قابل توجه استفاده از حافظه میشد، زیرا پلتفرم در زمان لازم در جمعآوری زبالهها (garbage collect) شکست میخورد.
در اندروید ۱۰، زبالهروب (GC) اندازه کل حافظه هیپ اختصاص داده شده توسط تابع system malloc() را ردیابی میکند و تضمین میکند که تخصیصهای بزرگ malloc() همیشه در محاسبات مربوط به راهاندازی GC لحاظ شوند. برنامههایی که تعداد زیادی از تخصیصهای C++ را با اجرای جاوا در هم میآمیزند، ممکن است در نتیجه افزایش فرکانس جمعآوری زباله را تجربه کنند. سایر برنامهها ممکن است کاهش کمی را تجربه کنند.
تست و اشکالزدایی
اندروید ۱۰ شامل بهبودهای زیر برای آزمایش و اشکالزدایی است.
بهبودهایی برای ردیابی سیستم روی دستگاه
از اندروید ۱۰، میتوانید هنگام انجام ردیابی سیستمی روی دستگاه، محدودیتهایی برای اندازه و مدت زمان ردیابی تعیین کنید. وقتی هر یک از مقادیر را مشخص میکنید، سیستم یک ردیابی طولانی انجام میدهد و به طور دورهای بافر ردیابی را در فایل مقصد کپی میکند تا ردیابی ضبط شود. ردیابی زمانی کامل میشود که به محدودیتهای اندازه یا مدت زمانی که مشخص کردهاید برسید.
از این پارامترهای اضافی برای آزمایش موارد استفاده متفاوت از آنچه که با ردیابی استاندارد آزمایش میکنید، استفاده کنید. به عنوان مثال، ممکن است در حال تشخیص یک اشکال عملکردی باشید که فقط پس از اجرای طولانی مدت برنامه شما رخ میدهد. در این حالت، میتوانید یک ردیابی طولانی را در طول یک روز کامل ثبت کنید و سپس زمانبندی CPU، فعالیت دیسک، رشتههای برنامه و سایر دادههای موجود در گزارش را تجزیه و تحلیل کنید تا به شما در تعیین علت اشکال کمک کند.
در اندروید ۱۰ و بالاتر، فایلهای ردیابی با فرمتی ذخیره میشوند که میتوانند با Perfetto ، یک پروژه متنباز برای ابزار دقیق عملکرد و ردیابی، باز شوند. میتوانید فایلهای ردیابی Perfetto را به فرمت Systrace تبدیل کنید .
بهبودهای طبقهبند متن
اندروید ۱۰ قابلیت طبقهبندی متن اضافی را در رابط TextClassifier ارائه میدهد.
تشخیص زبان
متد detectLanguage() مشابه متدهای طبقهبندی موجود قبلی عمل میکند. این متد یک شیء TextLanguage.Request دریافت میکند و یک شیء TextLanguage برمیگرداند.
اشیاء TextLanguage شامل فهرستی از جفتهای مرتب هستند. هر جفت شامل یک زبان و یک امتیاز اطمینان مربوطه برای طبقهبندی است.
اقدامات پیشنهادی برای مکالمه
متد suggestConversationActions() مشابه متدهای طبقهبندی موجود عمل میکند. این متد یک شیء ConversationActions.Request دریافت کرده و یک شیء ConversationActions برمیگرداند.
اشیاء ConversationActions شامل فهرستی از اشیاء ConversationAction هستند. هر شیء ConversationAction شامل یک اقدام پیشنهادی بالقوه و امتیاز اطمینان آن است.
پاسخها/اقدامات هوشمند در اعلانها
اندروید ۹ قابلیت نمایش پاسخهای پیشنهادی در یک اعلان را معرفی کرد. اندروید ۱۰ این قابلیت را با قابلیت گنجاندن اقدامات پیشنهادی مبتنی بر قصد، گسترش میدهد. علاوه بر این، این پلتفرم قادر است این پیشنهادات را به صورت خودکار تولید کند. برنامهها همچنان میتوانند پیشنهادات خود را ارائه دهند یا از پیشنهادات تولید شده توسط سیستم انصراف دهند. API مورد استفاده برای تولید این پاسخها بخشی از TextClassifier است و همچنین مستقیماً در اندروید ۱۰ در اختیار توسعهدهندگان قرار گرفته است. لطفاً برای اطلاعات بیشتر ، بخش مربوط به بهبودهای TextClassifier را مطالعه کنید.
اگر برنامه شما پیشنهادات خودش را ارائه میدهد، پلتفرم هیچ پیشنهاد خودکاری ایجاد نمیکند. اگر نمیخواهید اعلانهای برنامه شما هیچ پاسخ یا اقدام پیشنهادی را نمایش دهند، میتوانید با استفاده از setAllowGeneratedReplies() و setAllowSystemGeneratedContextualActions() از پاسخها و اقدامات تولید شده توسط سیستم انصراف دهید.