مهاجرت به اندروید 8.0

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

  1. از سازگاری با اندروید 8.0 اطمینان حاصل کنید

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

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

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

از سازگاری با اندروید 8.0 اطمینان حاصل کنید

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

از سازگاری گام به گام با اندروید 8.0 اطمینان حاصل کنید

دستگاهی را با Android 8.0 آماده کنید

انجام تست سازگاری

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

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

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

تغییر دهید خلاصه مرجع بیشتر
به‌روزرسانی‌های مکان پس‌زمینه کمتر اگر برنامه شما به‌روزرسانی‌های مکان را از یک سرویس پس‌زمینه دریافت می‌کند، در مقایسه با نسخه‌های قدیمی‌تر Android، به‌روزرسانی‌های کمتری را در Android 8.0 (سطح API 26) دریافت می‌کند. به طور خاص، یک سرویس پس‌زمینه نمی‌تواند به‌روزرسانی‌های مکان را بیش از چند بار در ساعت دریافت کند. با این حال، در حالی که برنامه شما در پیش زمینه است، نرخ به روز رسانی مکان بدون تغییر است. محدودیت های موقعیت مکانی پس زمینه
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 8.0 (سطح API 26)، همچنین به تغییرات رفتار Android 8.0 مراجعه کنید.

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

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

Android 8.0 علاوه بر ارائه API های جدید، برخی تغییرات رفتاری را هنگام به روز رسانی targetSdkVersion خود به 26 معرفی می کند. از آنجایی که برخی از تغییرات رفتاری ممکن است برای جلوگیری از شکستگی نیاز به تغییر کد داشته باشند، ابتدا باید بدانید که برنامه شما چگونه ممکن است هنگام تغییر targetSdkVersion توسط بررسی همه تغییرات رفتاری برای برنامه‌هایی که Android 8.0 را هدف قرار می‌دهند .

توجه: مراحلی که در بالا برای اطمینان از سازگاری پلتفرم توضیح داده شد، پیش نیاز هدف قرار دادن برنامه شما برای Android 8.0 است، بنابراین مطمئن شوید که ابتدا آن مراحل را کامل کرده اید.

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

Android 8.0 SDK را دریافت کنید

می‌توانید بسته‌های SDK را برای ساخت برنامه خود با Android 8.0 (سطح API 26) با استفاده از آخرین نسخه Android Studio دریافت کنید (Android Studio 3.0+ توصیه می‌شود). Android Studio نسخه 3.0 و بالاتر شامل ابزارهایی برای کمک به شما با ویژگی‌های Android 8.0 مانند نمادهای تطبیقی ​​و فونت‌های قابل دانلود است . اگر هنوز به آن ویژگی‌ها نیاز ندارید، می‌توانید از نسخه پایدار Android Studio 2.3.3 برای ساخت برنامه خود با Android 8.0 و استفاده از APIهای جدید استفاده کنید.

برای راه‌اندازی هر یک از نسخه‌های Android Studio، این مراحل را دنبال کنید:

  1. Android Studio را راه اندازی کنید و با کلیک روی Tools > SDK Manager، SDK Manager را باز کنید.
  2. در برگه SDK Platforms ، Show Package Details را علامت بزنید. در زیر پیش‌نمایش اندروید 8.0 موارد زیر را بررسی کنید:
    • Android SDK Platform 26
    • Google APIs Intel x86 Atom System Image (فقط برای شبیه ساز مورد نیاز است)
  3. به برگه ابزار SDK بروید و همه مواردی را که به‌روزرسانی‌های موجود دارند بررسی کنید (روی هر کادر انتخابی که خط تیره را نشان می‌دهد کلیک کنید. ). این باید شامل آخرین نسخه موارد زیر باشد که مورد نیاز است:
    • Android SDK Build-Tools 26.0.0
    • Android SDK Platform-Tools 26.0.0
    • شبیه ساز اندروید 26.0.0
  4. برای نصب تمام بسته های SDK انتخاب شده روی 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 26) محدودیت‌های جدیدی را برای گیرنده‌های پخش معرفی می‌کند، باید هر گیرنده پخشی را که برای اهداف پخش ضمنی ثبت شده‌اند حذف کنید. گذاشتن آنها در محل برنامه شما را در زمان ساخت یا زمان اجرا خراب نمی کند، اما وقتی برنامه شما روی اندروید 8.0 اجرا می شود، تاثیری ندارند.

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

برای این محدودیت جدید استثناهایی وجود دارد. برای فهرستی از پخش‌های ضمنی که هنوز در برنامه‌هایی که Android 8.0 را هدف قرار می‌دهند کار می‌کنند، به استثناهای پخش ضمنی مراجعه کنید.

برنامه اندروید 8.0 خود را تست کنید

با تکمیل آماده سازی های بالا، می توانید برنامه خود را بسازید و سپس آن را بیشتر آزمایش کنید تا مطمئن شوید هنگام هدف قرار دادن Android 8.0 (سطح API 26) به درستی کار می کند. این زمان مناسب دیگری برای مرور دستورالعمل‌های کیفیت برنامه اصلی و بهترین روش‌ها برای آزمایش است.

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

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

جدول 2. تغییرات کلیدی که وقتی targetSdkVersion روی 26 تنظیم می شود، بر برنامه ها تأثیر می گذارد.

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

برای فهرست گسترده‌تری از تغییرات رفتار در Android 8.0 (سطح API 26)، به تغییرات رفتار Android 8.0 مراجعه کنید.

برای بررسی ویژگی‌ها و APIهای جدید موجود با Android 8.0 (سطح API 26)، به ویژگی‌ها و APIهای Android 8.0 مراجعه کنید.