Android 8.0'a Taşıma

Android 8.0 (API düzeyi 26), uygulamalarınızda yararlanabileceğiniz yeni özelliklerin ve API'lerin yanı sıra davranış değişiklikleri de sunar. Bu dokümanda, uygulamalarınızı Android 8.0'a taşıma adımlarına iki temel aşamada genel bir bakış sunulmaktadır:

  1. Android 8.0 ile uyumluluğu sağlama

    Uygulamanızın, platformun yeni sürümünde tamamen işlevsel olduğunu doğrulayın. Bu aşamada yeni API'ler kullanmaz veya uygulamanızın targetSdkVersion politikasını değiştirmezsiniz, ancak küçük değişiklikler yapılması gerekebilir.

  2. Hedef sürümünüzü güncelleme ve Android 8.0 özelliklerini kullanma

    Platformun yeni özelliklerinden yararlanmaya hazır olduğunuzda targetSdkVersion sürümünüzü 26'ya güncelleyin, uygulamanın beklendiği gibi çalışmaya devam ettiğini doğrulayın ve ardından yeni API'leri kullanmaya başlayın.

Android 8.0 ile uyumluluğu sağlama

Buradaki amaç, mevcut uygulamanızın Android 8.0'da (API düzeyi 26) olduğu gibi çalışmasını sağlamaktır. Bazı platform değişiklikleri uygulamanızın çalışma şeklini etkileyebileceği için bazı ayarlamalar yapmanız gerekebilir ancak yeni API'ler kullanmanız veya targetSdkVersion öğenizi değiştirmeniz gerekmez.

Adım adım Android 8.0 uyumluluğu sağlama

Android 8.0 çalıştıran bir cihazı hazırlama

  • Uyumlu bir cihazınız varsa (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P veya Nexus Player) cihazınızı yeniden yükleme talimatlarını uygulayın.
  • İsterseniz Android Emülatör için Android 8.0 sistem görüntüsünü de indirebilirsiniz. SDK Yöneticisi'nde Android 8.0 altında Google API'leri Intel x86 Atom Sistem Görüntüsü olarak listelenmiştir.

    Not: Android 8.0 sistem resmini, Android Studio 3.0 ve sonraki sürümlerden indirebilirsiniz. Daha fazla bilgi için aşağıdaki Android 8.0 SDK'sını edinme bölümüne bakın.

Uyumluluk testi yapma

Çoğunlukla, Android 8.0 (API düzeyi 26) ile uyumluluk testi, uygulamanızı yayınlamaya hazırlanırken gerçekleştirdiğiniz test türünü içerir. Bu, Temel Uygulama Kalitesi Yönergeleri ve Test İçin En İyi Uygulamaları incelemek için iyi bir zamandır.

Ancak testin bir yönü daha vardır: Android 8.0, Android platformunda, targetSdkVersion uygulamanızı değiştirmeseniz bile uygulamanızın davranışını etkileyebilecek veya uygulamayı tamamen bozabilecek değişiklikler sunmaktadır. Bu nedenle, Tablo 1'deki önemli değişiklikleri incelemeniz ve bu değişikliklere uyum sağlamak için uyguladığınız düzeltmeleri test etmeniz önemlidir.

Tablo 1. Android 8.0 cihazlarda çalışan tüm uygulamaları etkileyen önemli değişiklikler.

Değişim Özet Daha fazla referans
Arka planda konum güncellemelerinin daha seyrek gösterilmesi Uygulamanız bir arka plan hizmetinden konum güncellemeleri alıyorsa Android'in eski sürümlerine kıyasla Android 8.0 (API düzeyi 26) üzerinde daha az güncelleme alır. Özellikle arka plan hizmeti, konum güncellemelerini saatte birkaç kezden fazla alamaz. Ancak uygulamanız ön plandayken konum güncelleme hızı değişmez. Arka Planda Konum Sınırları
net.hostname artık desteklenmiyor net.hostname sistem özelliğini sorgulamak boş sonuç üretir. Yok
send(DatagramPacket) için yeni istisna Önceden yürütülen connect(InetAddress, int) yöntemi başarısız olursa send(DatagramPacket) yöntemi bir SocketException atar. Davranış Değişiklikleri: Ağ ve HTTP(S) bağlantısı
AbstractCollection yöntemden uygun NullPointerException AbstractCollection.removeAll(null) ve AbstractCollection.retainAll(null) artık her zaman NullPointerException atıyordu; daha önce, koleksiyon boşken NullPointerException atılmıyordu. Bu değişiklik, davranışı dokümanlarla tutarlı hâle getirir. Davranış Değişiklikleri: Koleksiyonları işleme
Currency.getDisplayName(null) sitesinden uygun NullPointerException Currency.getDisplayName(null) çağrıldığında NullPointerException atılır. Davranış Değişiklikleri: Yerel ayarlar ve uluslararasılaştırma

Android 8.0'daki (API düzeyi 26) davranış değişikliklerinin daha kapsamlı bir listesi için Android 8.0 Davranış Değişiklikleri konusuna da bakın.

Hedef sürümünüzü güncelleyin ve Android 8.0 özelliklerini kullanın

Bu bölümde, targetSdkVersion uygulamanızı 26 sürümüne güncelleyerek ve Android 8.0'da bulunan yeni özellikleri ekleyerek Android 8.0 (API düzeyi 26) için nasıl tam desteği etkinleştireceğiniz açıklanmaktadır.

Android 8.0, size yeni API'ler sunmanın yanı sıra targetSdkVersion sürümünüzü 26 olarak güncellediğinizde bazı davranış değişiklikleri de uygular. Bazı davranış değişiklikleri, bozulmayı önlemek için kod değişikliği gerektirebileceğinden öncelikle Android 8.0'ı hedefleyen uygulamalar için tüm davranış değişikliklerini inceleyerek targetSdkVersion değişikliğinin uygulamanızın nasıl etkilenebileceğini anlamalısınız.

Not: Platform uyumluluğunu sağlamak için yukarıda açıklanan adımlar, uygulamanızı Android 8.0'a hedeflemek için ön koşuldur. Bu nedenle, önce bu adımları tamamladığınızdan emin olun.

Hedef sürümü güncelleme ve Android 8.0 özelliklerini adım adım kullanma

Android 8.0 SDK'sını edinin

Uygulamanızı Android 8.0 (API düzeyi 26) ile oluşturmak için SDK paketlerini Android Studio'nun en son sürümünü kullanarak edinebilirsiniz (Android Studio 3.0 ve sonraki sürümleri önerilir). Android Studio 3.0 ve sonraki sürümler, uyarlanabilir simgeler ve indirilebilir yazı tipleri gibi Android 8.0 özellikleri konusunda size yardımcı olacak araçlar içerir. Henüz bu özelliklere ihtiyacınız yoksa Android 8.0 ile uygulamanızı oluşturmak ve yeni API'lerden yararlanmak için Android Studio 2.3.3'ün kararlı sürümünü kullanabilirsiniz.

Android Studio'nun herhangi bir sürümünü kurmak için aşağıdaki adımları uygulayın:

  1. Android Studio'yu başlatın ve Araçlar > SDK Yöneticisi'ni tıklayarak SDK Yöneticisi'ni açın.
  2. SDK Platformları sekmesinde Paket Ayrıntılarını Göster'i işaretleyin. Android 8.0 Önizlemesi'nin altında aşağıdakileri kontrol edin:
    • Android SDK Platformu 26
    • Google API'leri Intel x86 Atom Sistem Görüntüsü (yalnızca emülatör için gereklidir)
  3. SDK Araçları sekmesine geçin ve kullanılabilir güncellemeleri olan tüm öğeleri işaretleyin (kısa çizgi gösteren her bir onay kutusunu tıklayın). Bu, aşağıdaki öğelerin gerekli olan en son sürümlerini içermelidir:
    • Android SDK Derleme Araçları 26.0.0
    • Android SDK Platform-Araçlar 26.0.0
    • Android Emülatör 26.0.0
  4. Seçilen tüm SDK paketlerini yüklemek için Tamam'ı tıklayın.

Artık Android 8.0 ile uygulama geliştirmeye hazırsınız.

Derleme yapılandırmanızı güncelleme

compileSdkVersion, targetSdkVersion ve Destek Kitaplığı sürümünü mevcut en son düzeltmelere güncelleyin. Örneğin:

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'
    // }
}

Manifest dosyanızdan yayın alıcılarını kaldırın

Android 8.0 (API düzeyi 26) yayın alıcıları için yeni sınırlamalar getirdiğinden, dolaylı yayın amaçları için kayıtlı tüm yayın alıcılarını kaldırmanız gerekir. Bunların yerinde bırakılması, derleme zamanında veya çalışma zamanında uygulamanızı kesintiye uğratmaz ancak Android 8.0'da çalıştığında bu durumun herhangi bir etkisi olmaz.

Yalnızca uygulamanızın yanıt verebileceği yayınlar (özellikle uygulamanızın paket adına gönderilen açık yayın amaçları ve yayınlar) Android 8.0'da aynı şekilde çalışmaya devam eder.

Bu yeni kısıtlamanın istisnaları vardır. Android 8.0'ı hedefleyen uygulamalarda çalışmaya devam eden örtülü yayınların listesi için Örtülü Yayın İstisnaları'na bakın.

Android 8.0 uygulamanızı test etme

Yukarıdaki hazırlıklar tamamlandıktan sonra, uygulamanızı derleyebilir ve ardından Android 8.0'ı (API düzeyi 26) hedeflerken düzgün çalıştığından emin olmak için daha ayrıntılı bir şekilde test edebilirsiniz. Temel Uygulama Kalitesi Yönergeleri ve Test İçin En İyi Uygulamaları incelemek için de iyi bir zaman.

targetSdkVersion 26'ya ayarlı uygulamanızı geliştirirken bilgi sahibi olmanız gereken belirli platform değişiklikleri vardır. Bu değişikliklerden bazıları, Android 8.0'da yeni özellikler uygulamasanız bile uygulamanızın davranışını önemli ölçüde etkileyebilir ve hatta uygulamanızı tamamen bozabilir.

Tablo 2'de, bu değişikliklerin bir listesi ve daha fazla bilgiye yönlendiren bağlantılar sunulmuştur.

Tablo 2. targetSdkVersion 26 olarak ayarlandığında uygulamaları etkileyen önemli değişiklikler.

Değişim Özet Daha fazla referans
Gizlilik Android 8.0 (API düzeyi 26) net.dns1, net.dns2, net.dns3 veya net.dns4 sistem özelliklerinin kullanımını desteklemez. Davranış Değişiklikleri: Gizlilik
Zorunlu Yazılabilir ve Yürütülebilir Segmentler Android 8.0 (API düzeyi 26), yerel kitaplıklar için verilerin yürütülebilir olmaması ve kodun yazılabilir olmaması gerektiği kuralını uygular. Davranış Değişiklikleri: Yerel Kitaplıklar
ELF başlığı ve bölüm doğrulaması Dinamik bağlayıcı, ELF üstbilgisi ve bölüm üst bilgilerindeki diğer değerleri kontrol eder ve geçersizse başarısız olur. Davranış Değişiklikleri: Yerel Kitaplıklar
Bildirimler SDK'nın Android 8.0 (API düzeyi 26) sürümünü hedefleyen uygulamalar, kullanıcılara bildirim yayınlamak için bir veya daha fazla bildirim kanalı uygulamalıdır. API'ye Genel Bakış: Bildirimler
List.sort() yöntemi Bu yöntemin uygulanması artık Collections.sort() yöntemini çağıramaz veya uygulamanız yığın taşması nedeniyle bir istisna atar. Davranış Değişiklikleri: Koleksiyon işleme
Collections.sort() yöntemi Liste uygulamalarında Collections.sort() artık bir ConcurrentModificationException döndürür. Davranış Değişiklikleri: Koleksiyon işleme

Android 8.0'daki (API düzeyi 26) davranış değişikliklerinin daha kapsamlı bir listesi için Android 8.0 Davranış Değişiklikleri konusuna bakın.

Android 8.0 (API seviyesi 26) ile kullanılabilen yeni özellikleri ve API'leri keşfetmek için Android 8.0 Özellikleri ve API'leri sayfasına göz atın.