انتقال به Android 8.0

Android 8.0 (سطح API‏ ۲۶) تغییرات رفتاری و همچنین ویژگی‌ها و APIهای جدیدی را معرفی می‌کند که می‌توانید در برنامه‌هایتان از آن‌ها بهره ببرید. این سند نمای کلی‌ای از مراحل انتقال برنامه‌هایتان به Android 8.0 را در دو مرحله کلیدی ارائه می‌دهد:

  1. اطمینان از سازگاری با Android 8.0

    بررسی کنید که برنامه‌تان در نسخه جدید پلاتفرم کاملاً کاربردی باشد. در این مرحله، از میاناهای برنامه‌سازی کاربردی جدید استفاده نمی‌کنید یا targetSdkVersion برنامه‌تان را تغییر نمی‌دهید، اما ممکن است تغییرات جزئی لازم باشد.

  2. به‌روزرسانی نسخه هدف و استفاده از ویژگی‌های Android 8.0

    وقتی آماده بودید از ویژگی‌های جدید پلاتفرم استفاده کنید، targetSdkVersion را به ۲۶ به‌روز کنید، بررسی کنید که برنامه همچنان طبق انتظار کار می‌کند، و سپس استفاده از میاناهای برنامه‌سازی کاربردی جدید را شروع کنید.

اطمینان از سازگاری با Android 8.0

هدف در اینجا این است که مطمئن شوید برنامه فعلی‌تان همان‌طور که هست در Android 8.0 (میانای برنامه‌سازی کاربردی سطح ۲۶) کار می‌کند. چون برخی‌از تغییرات پلاتفرم ممکن است بر نحوه رفتار برنامه‌تان تأثیر بگذارد، ممکن است لازم باشد برخی‌از تنظیمات را تغییر دهید، اما نیازی نیست از میاناهای برنامه‌سازی کاربردی جدید استفاده کنید یا targetSdkVersion خود را تغییر دهید.

اطمینان از سازگاری با Android 8.0 گام‌به‌گام

آماده کردن دستگاه دارای Android نسخه ۸.۰

انجام آزمایش سازگاری

در بیشتر موارد، آزمایش سازگاری با Android 8.0 (سطح API‏ ۲۶) مستلزم همان نوع آزمایشی است که هنگام آماده شدن برای انتشار برنامه‌تان انجام می‌دهید. اکنون زمان خوبی برای مرور دستورالعمل‌های کیفیت برنامه اصلی و روال‌های مطلوب برای آزمایش است.

بااین‌حال، جنبه دیگری برای آزمایش وجود دارد: Android 8.0 تغییراتی را در پلاتفرم Android معرفی می‌کند که می‌تواند بر رفتار برنامه شما تأثیر بگذارد یا برنامه را به‌طور کامل خراب کند، حتی اگر targetSdkVersion خود را تغییر ندهید. به همین دلیل، مهم است که تغییرات کلیدی را در جدول ۱ مرور کنید و هرگونه اصلاحی را که برای تطبیق با تغییرات اعمال می‌کنید آزمایش کنید.

جدول ۱. تغییرات کلیدی که بر همه برنامه‌های در حال اجرا در دستگاه‌های Android 8.0 تأثیر می‌گذارد.

تغییر خلاصه مرجع بیشتر
به‌روزرسانی‌های مکان پس‌زمینه‌ای با دفعات کمتر اگر برنامه‌تان به‌روزرسانی‌های مکان را از سرویس پس‌زمینه‌ای دریافت می‌کند، در Android نسخه ۸.۰ (سطح میانای برنامه‌سازی کاربردی ۲۶) درمقایسه با نسخه‌های قدیمی‌تر Android، به‌روزرسانی‌ها را با بسامد کمتری دریافت می‌کند. به‌طور مشخص، سرویس پس‌زمینه‌ای نمی‌تواند به‌روزرسانی‌های مکان را بیشتر از چند بار در ساعت دریافت کند. بااین‌حال، وقتی برنامه‌تان در پیش‌زمینه است، نرخ به‌روزرسانی‌های مکان تغییر نمی‌کند. محدودیت‌های مکان پس‌زمینه‌ای
net.hostname دیگر پشتیبانی نمی‌شود استعلام خصوصیت سیستم net.hostname نتیجه‌ای پوچ تولید می‌کند. هیچ‌کدام
استثنای جدید از send(DatagramPacket) اگر روش connect(InetAddress, int) که قبلاً اجرا شده است ناموفق باشد، روش send(DatagramPacket) SocketException را برمی‌گرداند. تغییرات رفتاری: اتصال شبکه و HTTP(S)
NullPointerException مناسب از روش‌های AbstractCollection AbstractCollection.removeAll(null) و AbstractCollection.retainAll(null) اکنون همیشه NullPointerException را برمی‌گردانند؛ قبلاً، وقتی مجموعه خالی بود، NullPointerException برگردانده نمی‌شد. این تغییر باعث می‌شود رفتار با اسناد مطابقت داشته باشد. تغییرات رفتاری: مدیریت مجموعه
NullPointerException مناسب از Currency.getDisplayName(null) فراخوانی Currency.getDisplayName(null) NullPointerException را برمی‌گرداند. تغییرات رفتار: زبان‌های محلی و بین‌المللی‌سازی

برای فهرست گسترده‌تری از تغییرات رفتاری در Android نسخه ۸.۰ (سطح میانای برنامه‌سازی کاربردی ۲۶)، تغییرات رفتاری Android نسخه ۸.۰ را نیز ببینید.

نسخه هدف را به‌روز کنید و از ویژگی‌های Android 8.0 استفاده کنید

این بخش توضیح می‌دهد که چگونه با به‌روزرسانی targetSdkVersion به ۲۶ و افزودن ویژگی‌های جدید موجود در Android 8.0، پشتیبانی کامل از Android 8.0 (سطح API‏ ۲۶) را فعال کنید.

Android 8.0 علاوه‌بر ارائه میاناهای برنامه‌سازی کاربردی جدید، برخی‌از تغییرات رفتاری را نیز معرفی می‌کند وقتی targetSdkVersion خود را به ۲۶ به‌روزرسانی می‌کنید. چون برخی‌از تغییرات رفتاری ممکن است برای جلوگیری از خرابی به تغییرات کد نیاز داشته باشند، ابتدا باید با مرور همه تغییرات رفتاری برای برنامه‌هایی که Android نسخه ۸.۰ را هدف قرار می‌دهند، متوجه شوید که برنامه‌تان هنگام تغییر targetSdkVersion چگونه تحت‌تأثیر قرار می‌گیرد.

توجه: مراحل شرح‌داده‌شده در بالا برای اطمینان از سازگاری پلاتفرم پیش‌نیاز هدف‌یابی برنامه‌تان برای Android نسخه ۸.۰ است، بنابراین حتماً ابتدا آن مراحل را تکمیل کنید.

به‌روزرسانی نسخه هدف و استفاده از ویژگی‌های Android 8.0 به‌صورت گام‌به‌گام

دریافت کیت توسعه نرم‌افزار Android 8.0

می‌توانید بسته‌های کیت توسعه نرم‌افزار را برای ساختن برنامه‌تان با Android 8.0 (سطح API‏ ۲۶) بااستفاده از جدیدترین نسخه استودیو Android (استودیو Android نسخه ۳.۰+ توصیه می‌شود) دریافت کنید. «استودیو Android» نسخه ۳.۰ به بالا شامل ابزارهایی است که به شما در استفاده از ویژگی‌های Android 8.0 کمک می‌کند، ازجمله نمادهای تطبیق‌پذیر و قلم‌های بارگیری‌شدنی. اگر هنوز به این ویژگی‌ها نیاز ندارید، می‌توانید از نسخه پایدار Android Studio ‫۲.۳.۳ برای ساختن برنامه‌تان با Android 8.0 و استفاده از میاناهای برنامه‌سازی کاربردی جدید استفاده کنید.

برای راه‌اندازی با هریک از نسخه‌های «استودیو Android»، این مراحل را دنبال کنید:

  1. Android Studio را راه‌اندازی کنید و با کلیک کردن روی ابزارها > مدیر SDK، «مدیر SDK» را باز کنید.
  2. در برگه پلاتفرم‌های کیت توسعه نرم‌افزار، نمایش جزئیات بسته را علامت بزنید. در نسخه‌های پایین‌تر از پیش‌نمایش Android 8.0، موارد زیر را بررسی کنید:
    • Android SDK Platform 26
    • Google APIs Intel x86 Atom System Image (فقط برای شبیه‌ساز لازم است)
  3. به برگه ابزارهای کیت توسعه نرم‌افزار بروید و همه مواردی را که به‌روزرسانی برای آن‌ها دردسترس است علامت بزنید (روی هر چارگوش انتخابی که خط تیره نشان می‌دهد کلیک کنید). این موارد باید شامل جدیدترین نسخه‌های موارد زیر باشد که موردنیاز است:
    • Android SDK Build-Tools 26.0.0
    • Android SDK Platform-Tools 26.0.0
    • Android Emulator 26.0.0
  4. برای نصب همه بسته‌های کیت توسعه نرم‌افزار انتخاب‌شده، روی OK (تأیید) کلیک کنید.

اکنون آماده‌اید تا ساختن با Android 8.0 را شروع کنید.

پیکربندی ساخت را به‌روز کنید

compileSdkVersion، targetSdkVersion، و نسخه «کتابخانه پشتیبانی» را به جدیدترین بازبینی‌های دردسترس به‌روز کنید، برای مثال:

android {
  compileSdkVersion 26

  defaultConfig {
    targetSdkVersion 26
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

گیرنده‌های رویداد ثبت‌شده را از فایل مانیفست بردارید

چون Android 8.0 (سطح API‏ ۲۶) محدودیت‌های جدیدی برای گیرنده‌های رویداد ثبت‌شده معرفی می‌کند، باید هر گیرنده رویداد ثبت‌شده‌ای را که برای هدف‌های همه‌فرستی غیرصریح ثبت شده است بردارید. اگر آن‌ها را در جای خود رها کنید، برنامه‌تان در زمان ساخت یا زمان اجرا خراب نمی‌شود، اما وقتی برنامه‌تان در Android 8.0 اجرا می‌شود، هیچ تأثیری ندارند.

همه‌فرستی‌هایی که فقط برنامه شما می‌تواند به آن‌ها پاسخ دهد—هدف‌های همه‌فرستی صریح و همه‌فرستی‌هایی که به‌طور خاص به نام بسته برنامه شما ارسال می‌شوند—در Android 8.0 به همان شکل قبلی کار می‌کنند.

این محدودیت جدید استثناهایی دارد. برای فهرست همه‌فرستی‌های غیرصریحی که هنوز در برنامه‌هایی که Android نسخه ۸.۰ را هدف قرار می‌دهند کار می‌کنند، به استثناهای همه‌فرستی غیرصریح مراجعه کنید.

آزمایش برنامه Android 8.0

با تکمیل آماده‌سازی‌های بالا، می‌توانید برنامه‌تان را بسازید و سپس آن را بیشتر آزمایش کنید تا مطمئن شوید هنگام هدف‌یابی Android نسخه ۸.۰ (سطح میانای برنامه‌سازی کاربردی ۲۶) به‌درستی کار می‌کند. این زمان مناسب دیگری برای مرور دستورالعمل‌های کیفیت برنامه اصلی و روال‌های مطلوب برای آزمایش است.

وقتی برنامه‌تان را با targetSdkVersion تنظیم‌شده روی ۲۶ می‌سازید، تغییرات پلاتفرم خاصی وجود دارد که باید از آن‌ها مطلع باشید. برخی‌از این تغییرات می‌تواند به‌طور قابل‌توجهی بر رفتار برنامه‌تان تأثیر بگذارد یا حتی برنامه‌تان را کاملاً ازکار بیندازد، حتی اگر ویژگی‌های جدیدی را در Android 8.0 پیاده‌سازی نکنید.

جدول ۲ فهرستی از این تغییرات را به‌همراه پیوندهایی برای اطلاعات بیشتر ارائه می‌دهد.

جدول ۲. تغییرات کلیدی که بر برنامه‌ها تأثیر می‌گذارد وقتی targetSdkVersion روی ۲۶ تنظیم شده باشد.

تغییر خلاصه مرجع بیشتر
حریم خصوصی ‫Android نسخه ۸.۰ (سطح میانای برنامه‌سازی کاربردی ۲۶) از استفاده از ویژگی‌های سیستم net.dns1،‏ net.dns2،‏ net.dns3، یا net.dns4 پشتیبانی نمی‌کند. تغییرات رفتار: حریم خصوصی
بخش‌های قابل‌نوشتن و قابل‌اجرا اعمال شد برای کتابخانه‌های بومی، Android 8.0 (سطح API‏ ۲۶) این قانون را اعمال می‌کند که داده‌ها نباید قابل‌اجرا باشند و کد نباید قابل‌نوشتن باشد. تغییرات رفتار: کتابخانه‌های بومی
اعتبارسنجی بخش و سرایند ELF پیونددهنده پویا مقادیر بیشتری را در سرصفحه ELF و سرصفحه‌های بخش بررسی می‌کند و اگر نامعتبر باشند، ناموفق می‌شود. تغییرات رفتار: کتابخانه‌های بومی
اعلان‌ها برنامه‌هایی که نسخه Android 8.0 (سطح میانای برنامه‌سازی کاربردی ۲۶) کیت توسعه نرم‌افزار را هدف قرار می‌دهند باید یک یا چند کانال اعلان را برای پست کردن اعلان‌ها به کاربران پیاده‌سازی کنند. نمای کلی میانای برنامه‌سازی کاربردی: اعلان‌ها
روش List.sort() پیاده‌سازی‌های این روش ممکن است دیگر Collections.sort() را فراخوانی نکنند، یا برنامه‌تان به‌دلیل سرریز پشته استثنایی را ایجاد کند. تغییرات رفتار: مدیریت مجموعه
روش Collections.sort() در پیاده‌سازی‌های «فهرست»، Collections.sort() اکنون ConcurrentModificationException را برمی‌گرداند. تغییرات رفتار: مدیریت مجموعه

برای فهرست گسترده‌تری از تغییرات رفتاری در Android نسخه ۸.۰ (سطح API‏ ۲۶)، تغییرات رفتاری Android نسخه ۸.۰ را ببینید.

برای کاوش ویژگی‌ها و میاناهای برنامه‌سازی کاربردی جدید دردسترس در Android 8.0 (سطح میانای برنامه‌سازی کاربردی ۲۶)، ویژگی‌ها و میاناهای برنامه‌سازی کاربردی Android 8.0 را ببینید.