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 iki temel aşamada taşıma adımlarına 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 yapmanız 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 cihazı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 davranış şeklini etkileyebileceği için bazı ayarlamalar yapılması gerekebilir ancak yeni API'ler kullanmanız veya targetSdkVersion öğenizi değiştirmeniz gerekmez.

Adım adım Android 8.0 ile 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ı yükleme talimatlarını uygulayın.
  • İsterseniz Android Emülatör için Android 8.0 sistem görüntüsünü indirebilirsiniz. SDK Yöneticisi'nde Android 8.0 altında Google API'leri Intel x86 Atom Sistem Görüntüsü olarak listelenir.

    Not: Android 8.0 sistem görüntüsünü 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 uyumluluğun test edilmesi, uygulamanızı yayınlamaya hazırlanırken yaptığınız test türüyle aynı işlemi gerektirir. Bu, Temel Uygulama Kalitesi Yönergeleri'ni ve Testlerle İlgili En İyi Uygulamaları incelemek için iyi bir zamandır.

Ancak test etmenin bir yönü daha vardır: Android 8.0'da, targetSdkVersion özelliğini değiştirmeseniz bile Android 8.0'da uygulamanızın davranışını etkileyebilecek veya uygulamayı tamamen bozabilecek değişiklikler yapılmıştır. Bu nedenle, Tablo 1'deki önemli değişiklikleri incelemeniz ve 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
Daha seyrek arka planda konum güncellemeleri Uygulamanız, arka plandaki bir hizmetten konum güncellemesi alıyorsa Android'in eski sürümlerine kıyasla Android 8.0 (API düzeyi 26) sürümlerinde daha az güncelleme alır. Özellikle, arka planda çalışan bir hizmet saatte en fazla birkaç kez konum güncellemesi alabilir. 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) tarihinden itibaren yeni istisna Daha önce yürütülen connect(InetAddress, int) yöntemi başarısız olursa send(DatagramPacket) yöntemi bir SocketException bildirir. 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ıyor; daha önce koleksiyon boşken NullPointerException atılmıyordu. Bu değişiklik, davranışı dokümanlarla tutarlı hale getirir. Davranış Değişiklikleri: Koleksiyonları işleme
Currency.getDisplayName(null) adlı satıcıdan uygun NullPointerException Currency.getDisplayName(null) çağrılırsa 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 cihazınızı 26'ya güncelleyip Android 8.0'da sunulan yeni özellikleri ekleyerek Android 8.0 (API düzeyi 26) için nasıl tam desteğin etkinleştirileceği açıklanmaktadır.

Android 8.0, yeni API'ler sunmanın yanı sıra targetSdkVersion cihazınızı 26 olarak güncellediğinizde bazı davranış değişiklikleri de sunar. Bazı davranış değişikliklerinin bozulmaması için kod değişikliği gerektirmesi nedeniyle, öncelikle Android 8.0'ı hedefleyen uygulamalarla ilgili tüm davranış değişikliklerini inceleyerek, targetSdkVersion değişikliği yaptığınızda 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 Android Studio'nun en yeni sürümünü (Android Studio 3.0 ve sonraki sürümler önerilir) kullanarak SDK paketlerini alabilirsiniz. Android Studio 3.0 ve sonraki sürümler, Android 8.0'ın uyarlanabilir simgeler ve indirilebilir yazı tipleri gibi özellikleri konusunda size yardımcı olacak araçlar içerir. Henüz bu özelliklere ihtiyaç duymuyorsanız Android 8.0 ile uygulamanızı oluşturmak ve yeni API'leri kullanmak 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 güncellemesi olan tüm öğeleri işaretleyin (kısa çizgi gösteren tüm onay kutularını 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'
    // }
}

Yayın alıcılarını manifest dosyanızdan 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ı olan tüm yayın alıcılarını kaldırmanız gerekir. Bunları yerinde bırakmak, uygulamanızı derleme zamanında veya çalışma zamanında kesintiye uğratmaz ancak Android 8.0 üzerinde çalıştığında 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 Dolaylı Yayın İstisnaları bölümüne bakın.

Android 8.0 uygulamanızı test etme

Yukarıdaki hazırlıklar tamamlandıktan sonra uygulamanızı derleyip Android 8.0'ı (API düzeyi 26) hedeflerken düzgün çalıştığından emin olmak için daha ayrıntılı testler yapabilirsiniz. Temel Uygulama Kalitesi Yönergeleri ve Test İçin En İyi Uygulamaları incelemek için yine iyi bir zamandır.

Uygulamanızı targetSdkVersion 26 değerine ayarlı olarak geliştirirken dikkat etmeniz 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, hatta uygulamanızı tamamen bozabilir.

Tablo 2'de, bu değişikliklerin bir listesi ve daha fazla bilgi için bağlantılar verilmiştir.

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
Yazılabilir ve Yürütülebilir Segmentler Zorunlu Kılındı Android 8.0 (API düzeyi 26), yerel kitaplıklarda verilerin yürütülememesi 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 başlığı ve bölüm üst bilgilerindeki daha fazla değeri 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 hatası veriyor. Davranış Değişiklikleri: Koleksiyonları 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 bölümüne bakın.