Android 6.0 Değişiklikleri

Android 6.0 (API düzeyi 23), yeni özelliklerin ve yeteneklerin yanı sıra aşağıdakileri de içerir: sistem değişiklikleri ve API davranışı değişiklikleri. Bu dokümanda öne çıkanlar uygulamalarınızda anlamanız ve dikkate almanız gereken önemli değişikliklerden bazılarına değineceğiz.

Daha önce Android için bir uygulama yayınladıysanız bu değişikliklerin nasıl etkilediğini öğrenin.

Çalışma Zamanı İzinleri

Bu sürümle birlikte, kullanıcıların artık doğrudan yönetmeleri için uygulama izinlerini kontrol edin. Bu model, kullanıcıların şu öğeler üzerinde daha fazla görünürlük ve kontrol elde etmesini sağlar: uygulama geliştiricilerin yükleme ve otomatik güncelleme işlemlerini kolaylaştırır. Kullanıcılar yüklü uygulamalar için izinleri tek tek verebilir veya iptal edebilir.

Android 6.0 (API düzeyi 23) veya sonraki sürümü hedefleyen uygulamalarınızda Android 6.0 (API düzeyi 23) veya sonraki sürümlerin yüklü olup olmadığını kontrol edip istekte bulunduğunuzdan emin olun. izinleri sunmanızı sağlar. Uygulamanıza izin verilip verilmediğini öğrenmek için yeni checkSelfPermission() yöntemidir. İzin istemek için yeni requestPermissions(). yöntemidir. Uygulamanız Android 6.0'ı (API düzeyi 23) hedeflemese bile yeni izin modelini inceleyelim.

Uygulamanızda yeni izin modelini desteklemeyle ilgili ayrıntılar için Sistem İzinleriyle Çalışma. Uygulama üzerindeki etkisini değerlendirmeyle ilgili ipuçları için İzin Kullanım Notları'nı inceleyin.

Doz ve Uygulamayı Beklemeye Alma

Bu sürüm, boşta kalan cihazlar ve uygulamalar için güç tasarrufu sağlayan yeni optimizasyonlar sunar. Bu özellikleri tüm uygulamaları etkilediğinden uygulamalarınızı bu yeni modlarda test etmeyi unutmayın.

  • Doz: Kullanıcı bir cihazı fişten çıkarıp ekranı kapalı halde sabit bir şekilde bırakırsa Cihaz, belirli bir süre Doz moduna geçer ve bu modda sistemi tutmaya çalışır. uyku modundan çıkar. Bu modda cihazlar kısa süreliğine normal işlemlere Böylece uygulama senkronizasyonunun gerçekleşebilmesi ve sistemin beklemedeki işlemleri gerçekleştirebilmesi için zaman tanımanız gerekir.
  • Uygulamayı Bekleme Modu: Uygulamayı Beklemeye Alma, sistemin bir uygulamanın boşta olduğunu belirlemesine olanak tanır uzun zamandır. Sistem, kullanıcı bunu yapmadığında uygulamaya belirli bir süre dokunun. Cihaz fişe takılı değilse sistem ağı devre dışı bırakır ve boşta olarak gördüğü uygulamaların senkronizasyonları ve işleri askıya alınır.

Güç tasarrufu sağlayan bu değişiklikler hakkında daha fazla bilgi edinmek için Doz ve Uygulamayı Beklemeye Alma için Optimize Etme.

Apache HTTP İstemcisini Kaldırma

Android 6.0 sürümü, Apache HTTP istemcisi desteğini kaldırıyor. Uygulamanız bu istemciyi kullanıyorsa ve Android 2.3 (API düzeyi 9) veya sonraki sürümleri hedefliyorsa HttpURLConnection sınıfını kullanın . Bu API, şeffaf sıkıştırma yoluyla ağ kullanımını azalttığı için daha verimlidir ve yanıtları önbelleğe almanın yanı sıra güç tüketimini en aza indirir. Apache HTTP API'lerini kullanmaya devam etmek için öncelikle build.gradle dosyanızda aşağıdaki derleme zamanı bağımlılığını bildirmeniz gerekir:

android {
    useLibrary 'org.apache.http.legacy'
}

SıkıcıSSL

Android, OpenSSL'den BoringSSL kitaplığını açar. Uygulamanızda Android NDK kullanıyorsanız şifreleme kitaplıklarına karşı bağlantı vermeyin NDK API'nin parçası olmayan libcrypto.so ve libssl.so gibi. Bu kitaplıklar herkese açık API'ler değildir ve sürümler ile cihazlarda haber verilmeden değiştirilebilir veya bozulabilir. Ayrıca kendinizi güvenlik açıklarına maruz bırakabilirsiniz. Bunun yerine, Java kriptografi API'lerini JNI aracılığıyla çağırmak veya bir kriptografi kitaplığını kullanabilirsiniz.

Donanım Tanımlayıcısına Erişim

Android bu sürümden itibaren kullanıcılara daha fazla veri koruması sağlamak için cihazın yerel donanım tanımlayıcısına programatik erişimi kaldırır. 360.000 metre uzunluğunda olmalıdır. İlgili içeriği oluşturmak için kullanılan WifiInfo.getMacAddress() ve BluetoothAdapter.getAddress() yöntem artık 02:00:00:00:00:00 sabit değerini döndürüyor.

Bluetooth ve kablosuz ağ taramalarını kullanarak yakındaki harici cihazların donanım tanımlayıcılarına erişmek için uygulamanızda artık ACCESS_FINE_LOCATION veya ACCESS_COARSE_LOCATION izinleri:

Not: Android 6.0 (API düzeyi 23) çalıştıran bir cihaz, veya Bluetooth taraması varsa, işlem harici cihazlar tarafından rastgele hale getirilmiş bir MAC adresinden gelen bir adrestir.

Bildirimler

Bu sürüm, Notification.setLatestEventInfo() yöntemini kaldırır. Şunu kullanın: Notification.Builder sınıfını kullanın. Bir bildirimi tekrar tekrar kullanıyorsanız Notification.Builder örneğini yeniden kullanın. Şunu çağırın: Almak için build() yöntem Notification örneği güncelledi.

adb shell dumpsys notification komutu artık bildirim metninizi yazdırmıyor. Metni yazdırmak için adb shell dumpsys notification --noredact komutunu kullanın bir bildirim nesnesi ekler.

Ses Yöneticisi Değişiklikleri

AudioManager aracılığıyla ses düzeyini doğrudan ayarlama veya belirli akışların sesini kapatma sınıfı artık desteklenmiyor. setStreamSolo() yöntemi kullanımdan kaldırıldığı için requestAudioFocus() yöntemini kullanın. Aynı şekilde, setStreamMute() yöntemi desteği sonlandırıldı; bunun yerine adjustStreamVolume() yöntemini çağırın ve yön değerini aktarın ADJUST_MUTE veya ADJUST_UNMUTE.

Metin Seçimi

Kayan araç çubuğundaki yeni metin seçimi özelliklerini gösteren ekran

Kullanıcılar uygulamanızda metin seçtiğinde artık Bir tablodaki Kes, Kopyala ve Yapıştır kayan araç çubuğu. Kullanıcı etkileşimi uygulaması, bağlamsal işlem çubuğu için Bağımsız görünümler için bağlamsal işlem modunu etkinleştirme.

Metin seçiminde kayan araç çubuğu uygulamak için mevcut reklam ayarlarınızda aşağıdaki değişiklikleri yapın: uygulamalar:

  1. View veya Activity nesnenizde Şu kişilerden ActionMode arama: startActionMode(Callback) - startActionMode(Callback, ActionMode.TYPE_FLOATING).
  2. Mevcut ActionMode.Callback uygulamanızı alın ve uzatın Bunun yerine ActionMode.Callback2.
  3. Geçersiz kıl onGetContentRect(). içerik Rect nesnesinin koordinatlarını sağlama yöntemi (metin seçimi dikdörtgen gibi) tıklayın.
  4. Dikdörtgen konumlandırması artık geçerli değilse ve geçersiz kılınacak tek öğe buysa invalidateContentRect() yöntemini çağırın.

kullanıyorsanız Android Destek Kitaplığı düzeltmesi 22.2; kayan araç çubuklarının geriye dönük uyumluluğa ve appcompat'a, ActionMode nesnelerin kontrolünü ele geçirerek varsayılandır. Bu, kayan araç çubuklarının görüntülenmesini engeller. Etkinleştirmek için ActionMode desteği AppCompatActivity, telefon et getDelegate(), ardından telefon et Döndürülen: setHandleNativeActionModesEnabled() AppCompatDelegate nesnesini sorgulayın ve girişi ayarlayın parametresini false olarak ayarlayın. Bu çağrı, ActionMode nesnenin kontrolünü şuraya döndürür: bilmek zorundasınız. Android 6.0 (API düzeyi 23) çalıştıran cihazlarda, çerçeve Çalışan cihazlarda ActionBar veya kayan araç çubuğu modları Android 5.1 (API düzeyi 22) veya önceki sürümlerde yalnızca ActionBar modları desteklenir.

Tarayıcı Yer İşareti Değişiklikleri

Bu sürüm, genel yer işaretleri için desteği kaldırır. İlgili içeriği oluşturmak için kullanılan android.provider.Browser.getAllBookmarks() android.provider.Browser.saveBookmark() yöntemleri kaldırıldı. Benzer şekilde, READ_HISTORY_BOOKMARKS ve WRITE_HISTORY_BOOKMARKS izinleri kaldırılır. Uygulamanız Android 6.0 (API düzeyi 23) veya sonraki bir sürümü hedefliyorsa uygulamayın yer işaretlerine kaydedin veya yer işareti izinlerini kullanın. Bunun yerine, uygulamanızın Yer işareti verilerini dahili olarak kullanabilirsiniz.

Android Anahtar Deposu Değişiklikleri

Bu sürümle Android Anahtar Deposu sağlayıcısı artık desteklenmiyor Dinamik Arama Ağı Reklamları. ECDSA hâlâ desteklenmektedir.

Kullanımda olmayan anahtarlar, güvenli kilit ekranı olduğunda artık silinmeyecek Devre dışı bırakıldığında ya da sıfırlandığında (örneğin, kullanıcı veya Cihaz Yöneticisi tarafından). Gereken anahtarlar aktif olmayan verilerin şifrelenmesi bu etkinlikler sırasında silinir.

Kablosuz Bağlantı ve Ağ İletişimi Değişiklikleri

Bu sürümde, Wi-Fi ve ağ iletişimi API'lerinde aşağıdaki davranış değişiklikleri yapılmıştır.

  • Uygulamalarınız artık yalnızca WifiConfiguration nesnenin durumunu değiştirebilir bu nesneleri oluşturmanız gerekir. Bu verileri değiştiremez veya silebilirsiniz. Kullanıcı veya diğer uygulamalar tarafından oluşturulan WifiConfiguration nesne.
  • Önceden, bir uygulama enableNetwork() disableAllOthers=true ayarı, cihazın diğer ağlarla bağlantısı kesildi: Hücresel veri kullanıyor. Bu sürümde, cihazın bu tür diğer ağlarla bağlantısı artık kesilmeyecektir. Eğer uygulamanızın targetSdkVersion değeri “20” veya daha düşük, seçili konuma sabitlendi Kablosuz ağ. Uygulamanızın targetSdkVersion değeri “21” veya daha yüksekse çoklu ağ API'leri (ör. openConnection(), bindSocket() ve yeni bindProcessToNetwork() yöntemini kullanın).

Kamera Hizmeti Değişiklikleri

Bu sürümde, kamera hizmetinde paylaşılan kaynaklara erişim modeli değiştirildi önceki "ilk gelen alır, ilk hizmet alır" erişim modelinden, yüksek öncelikli olduğu bir erişim modeline geçiş yaptık. tercih edilir. Hizmet davranışında yapılan değişiklikler şunlardır:

  • Kamerayı açma ve yapılandırma da dahil olmak üzere kamera alt sistem kaynaklarına erişim "önceliği" temel alınarak verilir. Başvuru süreci Kullanıcının görebildiği veya ön plandaki etkinliklere genellikle daha yüksek öncelik verilir. Bu da kamera kaynağının ve daha güvenilir şekilde kullanmanızı sağlar.
  • Düşük öncelikli uygulamaların etkin kamera istemcileri, önceliği daha yüksek olduğunda "çıkarılabilir" uygulama kamerayı kullanmaya çalışıyor. Kullanımdan kaldırılan Camera API'de bunun sonucunda onError() müşteriyi çağrıştırıyor. Camera2 API'sinde, onDisconnected() tahliye edilen müşteri adına çağrı yapılır.
  • Uygun kamera donanımına sahip cihazlarda ayrı uygulama işlemleri bağımsız olarak açıp aynı anda ayrı kamera cihazlarını kullanıyor olabilir. Bununla birlikte, çok işlemli kullanım aynı anda erişimin önemli ölçüde azalmasına neden olduğu, Google Ads'in açık kamera cihazlarının tümü kamera hizmeti tarafından algılanır ve bunlara izin verilmez. Bu değişiklik başka bir uygulama doğrudan olmadığında bile daha düşük önceliğe sahip müşterilerin "çıkarılmasına" neden olabilir. erişmeye çalışıyor.
  • Geçerli kullanıcının değiştirilmesi, önceki kullanıcı hesabına ait uygulamalarda etkin kamera istemcilerinin kullanılmasına neden olur saldırıya uğrayacaktır. Kameraya erişim, geçerli cihaz kullanıcısına ait kullanıcı profilleriyle sınırlıdır. Pratikte bu, örneğin bir "Misafir" hesabının, hizmeti kullanmayı bırakamayacağı anlamına gelir. kullanıcı farklı bir hesaba geçiş yaptığında kamera alt sistemini kullanan işlemler.

Çalışma zamanı

ART çalışma zamanı artık newInstance() yöntemini çağırın. Bu değişikliği, Dalvik'in önceki sürümlerde erişim kurallarını yanlış bir şekilde kontrol etmesiyle ilgili sorunu düzeltir. Uygulamanız newInstance() yöntem ve siz erişim kontrollerini geçersiz kılmak istiyorsanız Girişe sahip setAccessible() yöntemi parametresi true olarak ayarlandı. Uygulamanız v7 appcompat Library veya v7 geri dönüşüm görünümü kitaplığı uygulamanızı bu kitaplıkların en yeni sürümlerine uyacak şekilde güncellemeniz gerekir. Aksi durumda XML'den başvurulan tüm özel sınıflar, sınıf oluşturucularının erişilebilir olması için güncellenir.

Bu sürüm, dinamik bağlayıcının davranışını günceller. Dinamik bağlayıcı artık bir kitaplığın soname ve yolu arasındaki fark ( herkese açık hata 6670) ve soname ile arama artık yardımcı olur. Daha önce çalışan ve DT_NEEDED girişi hatalı olan uygulamalar (genellikle derleme makinesinin dosya sistemindeki mutlak yollar) yüklendikten sonra başarısız olabilir.

dlopen(3) RTLD_LOCAL işareti artık doğru bir şekilde uygulanmıştır. Lütfen RTLD_LOCAL varsayılan değerdir. Bu nedenle, dlopen(3) için yapılan ve açıkça kullanılmamış olan çağrılar RTLD_LOCAL bu durumdan etkilenecek (uygulamanız açıkça RTLD_GLOBAL kullanmadığı sürece). Entegre RTLD_LOCAL, semboller dlopen(3) (DT_NEEDED girişleriyle referans alınmadan).

Android'in önceki sürümlerinde, uygulamanız sistemin paylaşılan bir kitaplık yüklemesini istediyse sistem bir uyarı görüntüledi, ancak yine de kitaplığın yüklenmesine izin verdi. Bu sürümden itibaren uygulamanızın hedef SDK sürümü 23 ise sistem bu kitaplığı reddeder veya daha yüksek olabilir. Bir kitaplığın yüklenemediğini tespit etmenize yardımcı olmak için uygulamanız, dlopen(3) hatasını sorun ve dlerror(3) çağrısının sonuçları. Metin yer değiştirme işleminin ele alınması hakkında daha fazla bilgi için şuraya bakın: kılavuzu inceleyin.

APK Doğrulama

Platform artık APK'lar için daha sıkı doğrulama gerçekleştiriyor. Bir dosya aşağıdaki durumlarda bozuk olarak değerlendirilir: manifest dosyasında belirtilmesini, ancak APK'nın kendisinde mevcut olmadığını belirtmek isteriz. Aşağıdaki durumlardan biri geçerliyse APK yeniden imzalanmalıdır: kaldırılır.

USB Bağlantısı

USB bağlantı noktası üzerinden yapılan cihaz bağlantıları artık varsayılan olarak yalnızca şarj moduna ayarlıdır. Erişmek için bir USB bağlantısı üzerinden cihaza ve içeriğe izin veriyorsa, kullanıcılar bu tür içeriklere etkileşimleridir. Uygulamanız USB bağlantı noktası üzerinden cihazla kullanıcı etkileşimlerini destekliyorsa etkileşimin açıkça etkinleştirilmesi gerektiğini unutmayın.

Android for Work Değişiklikleri

Bu sürüm, Android for Work için aşağıdaki davranış değişikliklerini içerir:

  • Kişisel bağlamlarda iş bağlantılarınız. Google Çevirici Arama Kaydı, kullanıcı geçmiş aramaları görüntülediğinde artık iş kişilerini gösteriyor. Ayar setCrossProfileCallerIdDisabled(). true, iş profili kişilerini Google Çevirici Arama Kaydı'nda gizler. İş kişileri Bluetooth üzerinden cihazlara özel kişilerle birlikte yalnızca setBluetoothContactSharingDisabled() değerini false olarak ayarladınız. Bu seçenek varsayılan olarak true değerine ayarlanmıştır.
  • Kablosuz ağ yapılandırmasını kaldırma: Profil Sahibi tarafından eklenen kablosuz ağ yapılandırmaları (örneğin, addNetwork() yöntemi) artık söz konusu iş profili silinirse kaldırılır.
  • Kablosuz yapılandırma kilitleme: Etkin bir Cihaz Sahibi aşağıdaki durumlarda kullanıcı tarafından değiştirilemez veya silinemez WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN sıfır değildir. Kullanıcı yine de kendi kablosuz yapılandırmalarını oluşturabilir ve değiştirebilir. Etkin Cihaz Sahipler, şunlar da dahil olmak üzere herhangi bir kablosuz ağ yapılandırmalarını düzenleme veya kaldırma ayrıcalığına sahiptir: otomatik olarak kapsayabilir.
  • Google Hesabı ekleme yoluyla cihaz politikası denetleyici indirme: Bir Google Cihaz politikası denetleyici (DPC) uygulaması aracılığıyla yönetim gerektiren hesabın cihaza eklenmesi yönetilen bağlamın dışında, hesap ekleme akışı artık kullanıcıdan uygun şekilde çalışmalıdır. Bu davranış, Ayarlar > Hesaplar bölümünde ve ilk cihaz kurulum sihirbazında gösterilir.
  • Belirli DevicePolicyManager API davranışlarında değişiklikler:
    • setCameraDisabled(). yöntemi, kamerayı yalnızca arayan kullanıcı için etkiler; yönetilen profilden çağrıldığında birincil kullanıcıda çalışan kamera uygulamalarını etkileyebilir.
    • Ayrıca, setKeyguardDisabledFeatures(). yöntemi artık hem Profil Sahipleri hem de Cihaz Sahipleri tarafından kullanılabilir.
    • Profil Sahibi şu tuş koruyucu kısıtlamaları ayarlayabilir:
    • DevicePolicyManager.createAndInitializeUser() ve DevicePolicyManager.createUser() yöntemleri kullanımdan kaldırıldı.
    • setScreenCaptureDisabled() yöntemi artık belirli bir kullanıcının uygulaması ön plandayken destek yapısını da engelliyor.
    • EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM. artık varsayılan olarak SHA-256'ya ayarlıdır. SHA-1, geriye dönük uyumluluk için hâlâ destekleniyor ancak kaldırılacak ileride. EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM. artık yalnızca SHA-256'yı kabul ediyor.
    • Android 6.0'da (API düzeyi 23) bulunan cihaz başlatıcı API'leri artık kaldırılmıştır.
    • EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS çıkarıldı. Böylece NFC'yi dokundurun temel hazırlık, fabrika ayarlarına sıfırlama korumalı bir cihazın kilidini programlı bir şekilde açamaz.
    • Artık EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE uygulamasını kullanabilirsiniz yönetilen cihazın NFC temel hazırlığı sırasında cihaz sahibinin uygulamasına veri iletmesini sağlamak için kullanılır.
    • Android for Work API'leri; İş profilleri, destek katmanı ve diğerleri. Yeni DevicePolicyManager izni API'leri şunları yapmaz: M öncesi uygulamaları da etkileyebilir.
    • Kullanıcılar, ACTION_PROVISION_MANAGED_PROFILE veya ACTION_PROVISION_MANAGED_DEVICE intent, sistem şimdi bir RESULT_CANCELED sonuç kodu döndürüyor.
  • Diğer API'lerde yapılan değişiklikler:
    • Veri Kullanımı: android.app.usage.NetworkUsageStats sınıfı yeniden adlandırıldı NetworkStats.
  • Genel ayarlarda yapılan değişiklikler: