Android 8.0'a Taşıma

Android 8.0 (API düzeyi 26), davranış değişikliklerinin yanı sıra uygulamalarınızda yararlanabileceğiniz yeni özellikler ve API'ler sunar. Bu belgede, uygulamalarınızı Android 8.0'a taşımayla ilgili iki temel aşamaya genel bir bakış sunulmaktadır:

  1. Android 8.0 ile uyumluluğu sağlama

    Uygulamanızın, platformun yeni sürümünde tüm işlevlerinin çalıştığını doğrulayın. Bu aşamada yeni API'ler kullanmıyor veya uygulamanızın targetSdkVersion değerini değiştirmiyorsunuz ancak küçük değişiklikler yapmanız gerekebilir.

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

    Platformun yeni özelliklerinden yararlanmaya hazır olduğunuzda targetSdkVersion sürümünüzü 26 olarak 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

Amaç, mevcut uygulamanızın Android 8.0'da (API düzeyi 26) olduğu gibi çalıştığından emin olmaktır. Bazı platform değişiklikleri, uygulamanızın davranışını etkileyebileceğinden bazı düzenlemeler yapmanız gerekebilir ancak yeni API'ler kullanmanız veya targetSdkVersion'nizi değiştirmeniz gerekmez.

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

Android 8.0 yüklü bir cihazı hazırlama

Uyumluluk testi yapma

Android 8.0 (API düzeyi 26) ile uyumluluğu test etmek, çoğunlukla uygulamanızı yayınlamaya hazırlanırken yaptığınız test türüyle aynıdır. Bu, Temel Uygulama Kalitesi Yönergeleri ve Test İçin En İyi Uygulamalar'ı incelemek için iyi bir zamandır.

Ancak testin başka bir yönü de vardır: Android 8.0, Android platformunda targetSdkVersion'nizi değiştirmeseniz bile uygulamanızın davranışını etkileyebilecek veya uygulamayı tamamen bozabilecek değişiklikler yapar. Bu nedenle, 1. tabloda yer alan ö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 plan hizmetinden konum güncellemeleri alıyorsa Android 8.0'da (API düzeyi 26) güncellemeleri Android'in eski sürümlerine kıyasla daha seyrek alır. Özellikle, arka plan hizmetleri saatte birkaç kereden fazla konum güncellemesi alamaz. Ancak uygulamanız ön plandayken konum güncellemelerinin hızı değişmez. Arka Planda Konum Sınırlamaları
net.hostname artık desteklenmiyor net.hostname sistem mülküne sorgu gönderdiğinizde null sonuç döndürülür. Yok
send(DatagramPacket) tarafından gönderilen yeni istisna Daha önce yürütülen connect(InetAddress, int) yöntemi başarısız olursa send(DatagramPacket) yöntemi bir SocketException uygular. 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 bir NullPointerException oluşturur; daha önce koleksiyon boşken NullPointerException oluşturulmuyordu. Bu değişiklik, davranışın belgelerle tutarlı olmasını sağlar. Davranış Değişiklikleri: Koleksiyon işleme
Currency.getDisplayName(null) tarihinden itibaren geçerli olan doğru NullPointerException Currency.getDisplayName(null) çağrıldığında NullPointerException gönderilir. Davranış Değişiklikleri: Yerel ayarlar ve uluslararası hale getirme

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 başlıklı makaleyi de inceleyin.

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

Bu bölümde, targetSdkVersion sürümünüzü 26'ya güncelleyerek ve Android 8.0'da kullanılabilen yeni özellikleri ekleyerek Android 8.0 (API seviyesi 26) için tam desteğin nasıl etkinleştirileceği açıklanmaktadır.

targetSdkVersion sürümünüzü 26'ya güncellediğinizde Android 8.0, size yeni API'ler sunmanın yanı sıra bazı davranış değişiklikleri de sunar. Bazı davranış değişiklikleri, kesintileri önlemek için kod değişiklikleri gerektirebileceğinden, targetSdkVersion değerini değiştirdiğinizde uygulamanızın nasıl etkilenebileceğini anlamak için öncelikle Android 8.0'i hedefleyen uygulamalar için davranış değişikliklerinin tümünü inceleyin.

Not: Yukarıda açıklanan ve platform uyumluluğunu sağlamak için gerekli olan adımlar, uygulamanızı Android 8.0'u hedefleyerek yayınlamak 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ı edinme

Uygulamanızı Android 8.0 (API seviyesi 26) ile derlemek için Android Studio'nun en son sürümünü (Android Studio 3.0 ve sonraki sürümler önerilir) kullanarak SDK paketlerini edinebilirsiniz. Android Studio 3.0 ve sonraki sürümler, uyarlanabilir simgeler ve indirilebilir yazı tipleri gibi Android 8.0 özelliklerinde size yardımcı olacak araçlar içerir. Bu özelliklere henüz ihtiyacınız yoksa 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 bölümünde aşağıdakileri kontrol edin:
    • Android SDK Platform 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 (tire gösteren her onay kutusunu tıklayın). Bu, gerekli olan aşağıdaki öğelerin en son sürümlerini içermelidir:
    • Android SDK Derleme Araçları 26.0.0
    • Android SDK Platform-Tools 26.0.0
    • Android Emulator 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ırma

Android 8.0 (API seviyesi 26), yayın alıcıları için yeni sınırlamalar getirdiğinden, örtülü yayın intent'leri için kayıtlı tüm yayın alıcılarını kaldırmanız gerekir. Bu kodları kaldırmak, uygulamanızı derleme veya çalıştırma aşamasında bozmaz ancak uygulamanız Android 8.0'da çalışırken bu kodların hiçbir etkisi olmaz.

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

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

Android 8.0 uygulamanızı test etme

Yukarıdaki hazırlıklar tamamlandığında, uygulamanızı derleyebilir ve ardından Android 8.0'ı (API seviyesi 26) hedeflerken düzgün çalıştığından emin olmak için daha ayrıntılı bir şekilde test edebilirsiniz. Bu, Temel Uygulama Kalitesi Yönergeleri ve Testle ilgili en iyi uygulamaları incelemek için iyi bir zamandır.

Uygulamanızı targetSdkVersion 26 olarak ayarlayarak oluşturduğunuzda dikkat etmeniz gereken belirli platform değişiklikleri vardır. Bu değişikliklerin bazıları, Android 8.0'da yeni özellikler uygulamasanız bile uygulamanızın davranışını önemli ölçüde etkileyebilir veya uygulamanızı tamamen bozabilir.

Tablo 2'de, daha fazla bilginin bağlantılarını içeren bu değişikliklerin listesi 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ılmasını desteklemez. Davranış Değişiklikleri: Gizlilik
Yazılabilir ve Yürütülebilir Segmentler Zorunlu Kılınıyor 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 başlığında ve bölüm başlıklarında daha fazla değeri kontrol eder ve geçersiz değerler varsa 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 gönderebilmek için bir veya daha fazla bildirim kanalı uygulamalıdır. API'ye Genel Bakış: Bildirimler
List.sort() yöntemi Bu yöntemin uygulamaları artık Collections.sort() yöntemini çağıramayabilir veya uygulamanız yığın taşması nedeniyle istisna uygulayabilir. Davranış Değişiklikleri: Koleksiyon işleme
Collections.sort() yöntemi Liste uygulamalarında Collections.sort() artık ConcurrentModificationException hatası veriyor. Davranışla İlgili Değişiklikler: Koleksiyon işleme

Android 8.0 (API düzeyi 26)'taki davranış değişikliklerinin daha kapsamlı bir listesi için Android 8.0 Davranış Değişiklikleri başlıklı makaleyi inceleyin.

Android 8.0 (API düzeyi 26) ile sunulan yeni özellikleri ve API'leri keşfetmek için Android 8.0 Özellikleri ve API'leri başlıklı makaleyi inceleyin.