Android 7.0 Davranış Değişiklikleri

Yeni özelliklerin ve yeteneklerin yanı sıra Android 7.0 çeşitli sistem ve API davranışı değişikliklerini içerir. Bu doküman anlamanız ve hesaba katmanız gereken önemli değişikliklerden bazılarını vurgular. inceleyebilirsiniz.

Daha önce Android için bir uygulama yayınladıysanız uygulamanızın platformdaki bu değişikliklerden etkilenebilir.

Pil ve Bellek

Android 7.0, pil ömrünü uzatmayı amaçlayan sistem davranışı değişiklikleri içerir ve RAM kullanımını azaltır. Bu değişiklikler, uygulamanızın uygulamanızın diğer uygulamalarla etkileşim kurma biçimi gibi sistem belirli örtülü niyetlerdir.

Doz

Android 6.0 (API seviyesi 23) sürümünde sunulan Doz, pil ömrünü Kullanıcı bir cihazı fişe takmadığında CPU ve ağ etkinliklerini erteleme, hareketsiz haldeyken ve ekran kapalıyken. Android 7.0 CPU ve ağ kısıtlamalarının bir alt kümesi uygulanarak Doz'da yapılan geliştirmeler ekran kapalıyken de cihaz fişe takılı değilken Örneğin, bir mobil telefon kullanıcının cebindeyken hareket ediyorsa.

Doz'un, ilk seviye adımını nasıl uyguladığını
  pil ömrünü uzatmak için sistem etkinliği kısıtlamaları

Şekil 1. Doz'un, ilk seviye adımını nasıl uyguladığını sistem etkinliği kısıtlamalarına tabidir.

Cihaz pil gücüyle çalıştığında ve ekran belirli bir süre boyunca kapalı olduğunda cihaz Doz'a girer ve kısıtlamaların ilk alt kümesini uygular: uygulama ağ erişimini kapatır, işleri ve senkronizasyonları erteler. Cihaz belirli bir süre hareketsiz kalırsa sistem, PowerManager.WakeLock için geçerli olan Doz kısıtlamalarının kalan kısmı, AlarmManager alarm, GPS ve kablosuz ağ taraması. Her ne olursa olsun Doz kısıtlamalarının bir kısmı veya tamamı uygulanıp uygulanmadığına bakılmaksızın sistem, kısa bakım dönemleri için cihaz (bunlar için uygulamalara izin verilir) ağ erişimini vardır ve ertelenen işleri/senkronizasyonları yürütebilir.

Doz'un ikinci bir seviyeyi nasıl uyguladığını gösteren resim
  cihaz belirli bir süre hareketsiz kaldıktan sonra sistem etkinliği kısıtlamaları

Şekil 2. Doz'un ikinci bir seviyeyi nasıl uyguladığını gösteren resim cihaz belirli bir süre boyunca hareketsiz kaldıktan sonra sistem etkinliği kısıtlamaları uygulanır.

Ekran etkinleştirildiğinde veya cihaz prize takıldığında Doz ayarından çıktığını ve bu işleme kısıtlamalarını kaldırır. Ek davranış uygulamanızı önceki sürüme uyarlama konusundaki önerileri ve en iyi uygulamaları etkiler Android 6.0'da (API düzeyi 23) kullanıma sunulan Doze sürümü, Doz ve Uygulamayı Beklemeye Alma için optimize etme. Yine de Firebase Cloud Messaging (FCM) kullanmak gibi gönderip alabilir ve mevcut durumunuza uyum sağlamak için güncellemeleri planlamaya ek Doz davranışı.

Svelte Projesi: Arka Plan Optimizasyonları

Android 7.0, her ikisinin de optimize edilmesine yardımcı olmak için üç örtülü yayını kaldırır ve güç tüketimini gösterir. Bu değişiklik gereklidir çünkü bu yayınları dinlemek üzere kaydedilmiş uygulamaları görebilirsiniz. Bu yayınların kaldırılması, cihaza önemli ölçüde ve kullanıcı deneyimini iyileştiriyor.

Mobil cihazlarda, hareket etme gibi sık sık bağlantı değişiklikleri yaşanıyor Kablosuz ve mobil veri arasında. Şu anda uygulamalar gizli CONNECTIVITY_ACTION yayını için bir alıcı kaydederek manifest'ini kullanabilirsiniz. Birçok uygulama bu yayını almak için kaydolduğundan, tek bir uygulama ağ anahtarı, hepsinin uyanmasına ve yayını şu saatte işlemesine neden olabilir: bir kez.

Benzer şekilde, Android'in önceki sürümlerinde uygulamalar diğer uygulamalardan örtülü ACTION_NEW_PICTURE ve ACTION_NEW_VIDEO yayınları almak için kaydolabilir. Örneğin: Kamera. Bir kullanıcı Kamera uygulamasıyla fotoğraf çektiğinde bu uygulamalar uyanmaya başlar yayını işleme alabilir.

Android 7.0 bu sorunları gidermek için aşağıdaki uygulamaları uygular optimizasyonlar:

Uygulamanız bu amaçlardan herhangi birini kullanıyorsa bağımlılıkları kaldırmanız gerekir en kısa sürede etkinleştirmeniz gerekir. Böylece, Android 7.0 cihazları doğru bir şekilde hedefleyebilirsiniz. Android çerçevesi, modelin ilk e-postasındaki açıklığa kavuşturmak istiyoruz. Örneğin JobScheduler API, zaman çizelgesi oluşturmak için sağlam bir mekanizma sağlar bağlantı gibi koşullar belirtildiğinde ağ işlemleri sınırsız şebekelerle karşı karşıyaydık. İçerik sağlayıcılarda yapılan değişikliklere tepki vermek için JobScheduler özelliğini de kullanabilirsiniz.

Android 7.0'da (API düzeyi) arka plan optimizasyonları hakkında daha fazla bilgi için 24) ve uygulamanızı nasıl uyarlayacağınız hakkında bilgi için Arka plan Optimizasyonlar.

İzin Değişiklikleri

Android 7.0'da uygulamanızı etkileyebilecek izin değişiklikleri bulunur.

Dosya sistemi izin değişiklikleri

Gizli dosyaların güvenliğini artırmak için, Android 7.0 veya sonraki sürümleri hedefleyen uygulamaların erişimi kısıtlı (0700). Bu ayar, gizli dosyaların boyutu gibi meta verilerinin sızdırılmasını önler ya da var olmak. Bu izin değişikliğinin birden çok yan etkisi vardır:

Uygulamalar Arasında Dosya Paylaşma

Android 7.0'ı hedefleyen uygulamalar için Android çerçevesi file:// URI'lerinin açığa çıkmasını yasaklayan StrictMode API politikası iyi performans göstermenizi sağlar. Dosya URI'si içeren bir amaç uygulamanızdan ayrılırsa uygulama başarısız olur (FileUriExposedException istisna ile).

Uygulamalar arasında dosya paylaşmak için bir content:// URI'si göndermeniz gerekir URI'da geçici erişim izni verin. Bu izni vermenin en kolay yolu (FileProvider sınıfı kullanılıyor.) Okuyucu Gelirleri Yöneticisi'ni ve dosya paylaşımı konusunda Dosya Paylaşma konusuna bakın.

Yeni Erişilebilirlik Özellikleri

Android 7.0, bir platforma sahip olmalıdır. Bu değişiklikler genellikle uygulamanızda kod değişikliği gerektirmez, ancak kullanıcılara yönelik olası etkilerini değerlendirmek için bu özellikleri uygulamanızla test edin. sahip olacaksınız.

Ekran Yakınlaştırma

Android 7.0, kullanıcıların Görüntü boyutu'nu ayarlamasına olanak tanır. Bu boyut, veya ekrandaki tüm öğeleri küçülterek cihazın erişilebilirliğini iyileştirir kullanıma sunuyoruz. Kullanıcılar, minimum ekrandan daha fazla ekranı yakınlaştıramaz genişliği sw320dp, yaygın olarak kullanılan orta boyutlu bir telefon olan Nexus 4'ün genişliğidir.

Android 7.0 sistem görüntüsü çalıştıran cihazın yakınlaştırılmamış ekran boyutunu gösteren ekran
Android 7.0 sistem görüntüsü çalıştıran bir cihazın ekran boyutunu büyütmenin etkisini gösteren ekran

Şekil 3. Sağdaki ekranda, Android 7.0 sistem görüntüsünü çalıştıran bir cihazın Görüntü boyutunu artırma.

Cihaz yoğunluğu değiştiğinde, sistem, çalışan uygulamaları şu yöntemleri kullanabilirsiniz:

  • API düzeyi 23 veya altını hedefleyen uygulamalar tüm arka plan süreçlerine dönüştürmenizi sağlar. Bu, bir kullanıcı Ayarlar ekranını açmak ve Görüntü boyutu ayarı varsa sistem uygulamayı aynı bu şekilde çalışır. Uygulamanın herhangi bir ön planı varsa yapılandırma değişikliği ile ilgili bu işlemleri bkz. Kullanım Çalışma Zamanı Değişiklikleri: Cihazın yönü değişmiş gibi.
  • Bir uygulama Android 7.0'ı hedefliyorsa tüm işlemleri (ön plan ve arka plan) düzenleme değişikliği bkz. Kullanım Çalışma Zamanı Değişiklikleri.

Çoğu uygulamanın, kullanıcı tercihine bağlı olarak Android en iyi uygulamalarını izliyor. Kontrol edilmesi gereken belirli noktalar:

  • Uygulamanızı ekran genişliği sw320dp olan bir cihazda test edin ve yeterli düzeyde performans gösterdiğinden emin olun.
  • Cihaz yapılandırması değiştiğinde, yoğunluğa bağlı tüm öğeleri güncelleyin önbellekteki bit eşlemler veya ağ. Uygulama duraklatılmış durumdan devam ettirildiğinde yapılandırma değişikliklerini kontrol edin durumu.

    Not: Yapılandırmaya bağlı verileri önbelleğe alırsanız uygun ekran gibi alakalı meta verileri eklemek iyi bir fikirdir piksel yoğunluğunu belirleyebilirsiniz. Bu meta verileri kaydetmek şunları yapmanıza olanak tanır: bir yapılandırma sonrasında önbelleğe alınan verileri yenilemeniz gerekip gerekmediğine karar verir unutmayın.

  • Piksel birimleriyle ölçeklenmedikleri için, boyutları piksel birimleriyle belirtmekten kaçının: ekran yoğunluğuna dokunun. Bunun yerine, boyutları yoğunluktan bağımsız piksel (dp) birimleri

Kurulum Sihirbazı'nda Görme Ayarları

Android 7.0'ın Karşılama ekranında Görüş Ayarları yer alır. Kullanıcılar burada yeni bir cihazda aşağıdaki erişilebilirlik ayarlarını yapın: Büyütme hareketi, Yazı tipi boyutu, Görüntü boyutu ve TalkBack. Bu değişiklik Farklı ekran ayarlarıyla ilgili hataların görünürlüğünü artırır. Alıcı: etkisini değerlendirebilmek için, uygulamalarınızı bu özellikle emin olun. Ayarları şurada bulabilirsiniz: Ayarlar > Erişilebilirlik.

Platform Kitaplıklarına Bağlanan NDK Uygulamaları

Android 7.0'dan itibaren sistem, uygulamaların dinamik olarak bağlanmasını engeller. Bu da uygulamanızın kilitlenmesine neden olabilir. Bu değişiklik Davranış, platform güncellemeleri genelinde tutarlı bir uygulama deneyimi oluşturmayı amaçlar farklı cihazlar kullanabilirsiniz. Kodunuz amaçlı bir üçüncü taraf statik kitaplığının otomatik olarak yapabiliyor. Bu nedenle, tüm geliştiriciler Android 7.0 çalıştıran cihazlarda uygulamalarının kilitlenmemesini sağlayabilir. Uygulamanızda yerel kod olmadan yalnızca herkese açık NDK API'lerini kullanmalısınız.

Uygulamanız özel platforma erişmeye üç farklı şekilde çalışabilir API'ler:

  • Uygulamanız özel platform kitaplıklarına doğrudan erişiyor. Güncellemeniz gerekiyor uygulamanızı bu kitaplıkların kendi kopyasını içerecek şekilde veya herkese açık NDK API'lerini kullanacak şekilde ayarlayın.
  • Uygulamanız, özel platforma erişen bir üçüncü taraf kitaplığı kullanıyor kitaplıklar. Uygulamanızın özel kitaplıklara erişmediğinden emin olsanız bile bu senaryo için uygulamanızı yine de test etmeniz gerekir.
  • Uygulamanız, APK'sında bulunmayan bir kitaplığa referans veriyor. Örneğin, Bu durum, kendi OpenSSL kopyanızı kullanmaya çalıştıysanız ancak uygulamanızın APK'sıyla birlikte paketlemeyi unuttunuz. Uygulama, sürümlerde normal şekilde çalışabilir libcrypto.so içeren Android platformu. Ancak uygulama Android'in bu kitaplığı içermeyen sonraki sürümlerinde kilitlenebilir (ör. Android 6.0 ve sonraki sürümler). Bu sorunu düzeltmek için tüm APK'nızla NDK olmayan kitaplıklarınızı ekleyin.

Uygulamalar, NDK'ya dahil olmayan yerel kitaplıkları kullanmamalıdır. Bunun nedeni, bu sürümler Android'in farklı sürümleri arasında değişebilir veya kaldırılabilir. İlgili içeriği oluşturmak için kullanılan örneğin OpenSSL'den BoringSSL'ye geçişi bu tür bir değişikliğe örnek olarak gösterilebilir. Ayrıca, emin olmak için Google'ın platform kitaplıkları ile ilgili NDK'ya dahil olduğundan, farklı cihazlarda farklı seviyelerde uyumluluk.

Bu kısıtlamanın şu anda üzerinde oluşturabileceği etkiyi azaltmak amacıyla, önemli kullanım alanları olan bir kitaplıklar grubudur. libandroid_runtime.so, libcutils.so, libcrypto.so ve libssl.so geçici olarak API düzeyi 23'ü hedefleyen uygulamalar için Android 7.0 (API düzeyi 24) veya daha düşük. Uygulamanız bu kitaplıklardan birini yüklüyorsa logcat bir uyarı oluşturur ve hedef cihazda bir durum mesajı gösterilir. Bunları görüyorsanız uygulamanızı, bu uyarıların kendi kopyalarını içerecek şekilde güncellemeniz gerekir ya da yalnızca genel NDK API'lerini kullanın. Android'in gelecek sürümleri özel kitaplıkların kullanımını tamamen kısıtlayabilir ve bunun sonucunda kilitlenmesine neden olabilir.

Tüm uygulamalar, herkese açık veya geçici olarak erişilebilir durumda olmamalıdır. Sonuç, System.loadLibrary ve dlopen(3) geri döndü NULL oluşturur ve uygulamanızın kilitlenmesine neden olabilir. Sitenizin özel platform API'lerinin kullanımını kaldırmak ve uygulamalarınızı kapsamlı bir şekilde test etmek için uygulama kodu . Şu durumda: uygulamanızın özel kitaplık kullanıp kullanmadığından emin değilseniz çalışma zamanı hatasını tanımlamak için logcat'i kontrol edebilirsiniz.

Aşağıdaki tabloda, bir uygulamasına bağlı olarak, android:targetSdkVersion seviyesindedir.

Kütüphaneler Hedef API düzeyi Dinamik bağlayıcı aracılığıyla çalışma zamanı erişimi Android 7.0 (API düzeyi 24) davranışı Gelecekteki Android platformu davranışı
NDK Herkese Açık Tümü Erişilebilir Beklendiği gibi çalışıyor Beklendiği gibi çalışıyor
Özel (geçici olarak erişilebilen özel kütüphaneler) 23 veya daha küçük Geçici olarak erişilebilir Beklendiği gibi çalışıyor ancak bir logcat uyarısı alıyorsunuz. Çalışma zamanı hatası
Özel (geçici olarak erişilebilen özel kütüphaneler) 24 veya üzeri Kısıtlanmış Çalışma zamanı hatası Çalışma zamanı hatası
Gizli (diğer) Tümü Kısıtlanmış Çalışma zamanı hatası Çalışma zamanı hatası

Uygulamanızın özel kitaplık kullanıp kullanmadığını kontrol etme

Özel kitaplıkların yüklenmesiyle ilgili sorunları tanımlamanıza yardımcı olmak için logcat, uyarı veya çalışma zamanı hatası oluştu. Örneğin, uygulamanız API düzeyi 23 veya Android 7.0 çalıştıran bir cihazda özel kitaplığa erişmeye çalıştığında aşağıdakine benzer bir uyarı görebilirsiniz:

03-21 17:07:51.502 31234 31234 W linker  : library "libandroid_runtime.so"
("/system/lib/libandroid_runtime.so") needed or dlopened by
"/data/app/com.popular-app.android-2/lib/arm/libapplib.so" is not accessible
for the namespace "classloader-namespace" - the access is temporarily granted
as a workaround for http://b/26394120

Bu logcat uyarıları, bir özel platform API'sini kaplar, ancak uygulamanızın kilitlenmesine neden olmaz. Uygulama hedef API düzeyi 24 veya üstünü hedefler ancak logcat aşağıdakini oluşturur çalışma zamanı hatası nedeniyle uygulamanız kilitlenebilir:

java.lang.UnsatisfiedLinkError: dlopen failed: library "libcutils.so"
("/system/lib/libcutils.so") needed or dlopened by
"/system/lib/libnativeloader.so" is not accessible for the namespace
"classloader-namespace"
  at java.lang.Runtime.loadLibrary0(Runtime.java:977)
  at java.lang.System.loadLibrary(System.java:1602)

Uygulamanızda üçüncü taraf kitaplıkları kullanılıyorsa bu logcat çıkışlarını da görebilirsiniz API'lere dinamik olarak bağlanan bir API'dir. Readelf aracı Android 7.0DK, dinamik olarak bağlantılı tüm paylaşılan öğeleri içeren bir liste oluşturmanıza olanak tanır belirli bir .so dosyasının kitaplığını oluşturmak için şu komutu çalıştırın:

aarch64-linux-android-readelf -dW libMyLibrary.so

Uygulamanızı güncelleme

Bu tür hataları düzeltmek ve hatalarla karşılaşmanızı önlemek için uygulamanızın gelecekteki platform güncellemelerinde kilitlenmediğinden emin olun:

  • Uygulamanızda özel platform kitaplıkları kullanılıyorsa bunu aşağıdakileri içerecek şekilde güncellemeniz gerekir: bu kitaplıkların kendi kopyasına erişebilir veya herkese açık NDK API'lerini kullanabilir.
  • Uygulamanız gizli simgelere erişen bir üçüncü taraf kitaplığı kullanıyorsa kütüphaneyi güncellemek için kitaplığın yazarına yetki verir.
  • NDK olmayan tüm kitaplıklarınızı APK'nızla paketlediğinizden emin olun.
  • getJavaVM ve libandroid_runtime.so satıcısından getJNIEnv:
    AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
    AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
    JavaVM::AttachCurrentThread from <jni.h>.
    
  • Gizli property_get yerine __system_property_get kullanın libcutils.so simgesi. Bunun için __system_property_get uygulamasını kullanın şunları içerir:
    #include <sys/system_properties.h>
    

    Not: Sistem özelliklerinin kullanılabilirliği ve içeriği: CTS ile test edilmemiştir. Bu sorunu çözmek için sahip olmayabilir.

  • libcrypto.so adresindeki SSL_ctrl sembolünün yerel sürümünü kullanın. Örneğin, libcyrpto.a adresini dosyanızı veya .so dosyanızı yükleyin veya BoringSSL/OpenSSL'den dinamik olarak bağlantılı libcrypto.so sürümünü dahil edip APK'nızda paketleyin.

Android for Work

Android 7.0, Android for Work'ü hedefleyen uygulamalarla ilgili, aşağıdakileri de içeren değişiklikler içermektedir. sertifika yükleme değişiklikleri, şifre sıfırlama, ikincil kullanıcı erişim ve cihaz tanımlayıcılarına erişim. Birden çok kişi için kullanıyorsanız, bu değişiklikleri inceleyip yardımcı olur.

  • DPC'nin ayarlayabilmesi için önce yetki verilmiş bir sertifika yükleyici yüklemeniz gerekir somut olarak ortaya koyar. Android 7.0'ı (API düzeyi 24) hedefleyen profil ve cihaz sahibi uygulamaları için: cihaz politikasından önce yetki verilmiş sertifika yükleyiciyi yüklemeniz gerekir denetleyici (DPC) çağrıları DevicePolicyManager.setCertInstallerPackage() Yükleyici yüklü değilse, sistem bir IllegalArgumentException
  • Cihaz yöneticileri için şifre sıfırlama kısıtlamaları artık profile uygulanıyor sahip olanlar. Cihaz yöneticileri artık kullanamayacakları Şifreleri temizlemek veya değiştirmek için DevicePolicyManager.resetPassword() ve önceden ayarlanmışlardır. Cihaz yöneticileri yine şifre belirleyebilir, ancak Şifre, PIN veya desen olmadığında.
  • Cihaz ve profil sahipleri, kısıtlamalar olsa bile hesapları yönetebilir ayarlandı. Cihaz sahipleri ve profil sahipleri, Hesap Yönetimi API'lerini çağırabilir DISALLOW_MODIFY_ACCOUNTS kullanıcı kısıtlaması uygulanmış olsa bile.
  • Cihaz sahipleri ikincil kullanıcıları daha kolay yönetebilir. Cihaz şu durumda: DISALLOW_ADD_USER kısıtlaması, cihaz sahibi modunda çalışıyor. otomatik olarak ayarlanır. Bu işlem, kullanıcıların yönetilmeyen ikincil oluşturmasını engeller yardımcı olur. Ayrıca, CreateUser() ve createAndInitializeUser() yöntemleri kullanımdan kaldırıldı; yeni Bunların yerini DevicePolicyManager.createAndManageUser() yöntemi alır.
  • Cihaz sahipleri, cihaz tanımlayıcılarına erişebilir. Cihaz sahibi Bir cihazın Wi-Fi MAC adresi: DevicePolicyManager.getWifiMacAddress() Kablosuz bağlantı etkinleştirildiğinde bu yöntem null değerini döndürür.
  • İş Modu ayarı, iş uygulamalarına erişimi kontrol eder. İş modu kapalıyken sistem başlatıcı, iş uygulamalarını devre dışı bırakarak kullanılamadığını belirtir. Etkinleştiriliyor çalışma modu tekrar normal davranışı geri yükler.
  • İstemci sertifika zinciri ve CA sertifikasını, zincir artık güvenilir kimlik bilgileri depolama alanına yüklü değil. Bu, uygulamalar istemciyi almaya çalıştığında KeyChain.getCertificateChain() sonucunu etkilemez daha sonra tekrar deneyin. Gerekirse CA sertifikası yüklenmelidir Güvenilir kimlik bilgileri deposuna, ayrıca .crt veya .cer dosya uzantısı altında DER kodlamalı biçim.
  • Android 7.0'dan itibaren parmak izi kaydı ve depolama alanı yönetilmektedir kullanıcı başına hesaplanır. Profil sahibinin Device Policy İstemcisi (DPC) API düzeyini hedefliyorsa 23 (veya daha eski) bir sürümü içeriyorsa kullanıcı, Android 7.0 (API düzeyi 24) çalıştıran bir cihazda cihaz üzerinde hâlâ parmak izi ayarlayabiliyorum, ancak iş uygulamaları cihazın parmak izine eriş. DPC, API düzeyi 24 ve üstünü hedeflediğinde kullanıcı Ayarlar > Güvenlik > İş profili güvenliği.
  • Yeni bir şifreleme durumu (ENCRYPTION_STATUS_ACTIVE_PER_USER) DevicePolicyManager.getStorageEncryptionStatus() tarafından şu kullanıcıya iade edildi: şifrelemenin etkin olduğunu ve şifreleme anahtarının belirtir. Yeni durum yalnızca DPC, API Düzeyi 24 ve üstünü hedefliyorsa döndürülür. Önceki API seviyelerini hedefleyen uygulamalar için ENCRYPTION_STATUS_ACTIVE döndürülmez. Şifreleme anahtarı kullanıcıya veya profile özel olsa bile.
  • Android 7.0'da, normal koşullarda tüm bir iş profili varsa, cihaz ayrı bir iş zorluğu olabilir. Cihazın tamamını etkilemek yerine, yöntemleri yalnızca iş profili için geçerlidir. (Bu tür yöntemlerin tam listesi DevicePolicyManager.getParentProfileInstance() dokümanlarında bulabilirsiniz.) Örneğin, DevicePolicyManager.lockNow(), yalnızca iş profilini kilitler. tüm cihaz kilitleniyor. Bu yöntemlerin her biri için eski işlevi, DevicePolicyManager; bu ebeveyni şu şekilde edinebilirsiniz: DevicePolicyManager.getParentProfileInstance() aranıyor. Örneğin, bir grup insanın üst örneğin lockNow() yöntemi kullanıldığında cihazın tamamı kilitlenir.

Ek Açıklama Saklama

Android 7.0, ek açıklamaların görünürlüğünün yoksayılmasına neden olan bir hatayı düzeltmektedir. Bu sorun, çalışma zamanının olmaması gereken ek açıklamalara erişmesini sağladı yapabiliyorsunuz. Bu ek açıklamalar şunları içeriyordu:

  • VISIBILITY_BUILD: Yalnızca derleme sırasında görünür olacak şekilde tasarlanmıştır.
  • VISIBILITY_SYSTEM: Çalışma zamanında görünür olması için tasarlanmıştır, ancak yalnızca temel bir sistemdir.

Uygulamanız bu davranıştan yola çıktıysa lütfen ek açıklamalara saklama politikası ekleyerek kullanılabilir durumda olması gerekir. Bunu @Retention(RetentionPolicy.RUNTIME) kullanarak yapabilirsiniz.

TLS/SSL Varsayılan Yapılandırma Değişiklikleri

Android 7.0, varsayılan TLS/SSL yapılandırmasında aşağıdaki değişiklikleri yapar HTTPS ve diğer TLS/SSL trafiği için uygulamalar tarafından kullanılır:

  • RC4 şifre paketleri artık devre dışı bırakıldı.
  • CHACHA20-POLY1305 şifre paketleri artık etkindir.

RC4'ün varsayılan olarak devre dışı bırakılması, HTTPS veya TLS/SSL'de kesintilere neden olabilir modern şifre paketleri için anlaşmaya varmadığında geçerli bir bağlantı sağlar. Tercih edilen düzeltme, sunucunun daha güçlü ve güvenli bir şekilde ve daha modern şifre paketleri ile protokoller. İdeal olarak TLSv1.2 ve AES-GCM etkinleştirilmelidir ve İletim Gizliliği şifre paketleri (ECDHE) etkinleştirilip tercih edilir.

Alternatif olarak, uygulamayı sunucuyla iletişim kurmak için özel bir SSLSocketFactory kullanacak şekilde değiştirebilirsiniz. İlgili içeriği oluşturmak için kullanılan fabrika ayarları SSLSocket sağlayacak şekilde tasarlanmalıdır sunucunun gerektirdiği şifre paketlerinden bazılarına sahip örnekler ek olarak etkinleştirildiğinden emin olun.

Not: Bu değişiklikler WebView ile ilgili değildir.

Android 7.0'ı hedefleyen uygulamalar

Bu davranış değişiklikleri yalnızca şu hedeflemeyi hedefleyen uygulamalar için geçerlidir: Android 7.0 (API düzeyi 24) veya sonraki sürümler. Android 7.0, Google Analytics 7.0 ve sonraki sürümler için ya da targetSdkVersion uygulamasını Android 7.0 veya sonraki bir sürüme ayarlamak için değişiklik yapmanız gerekir ve kendi uygulamalarını bu davranışları doğru şekilde desteklemesi için kullanabilirsiniz.

Serileştirme Değişiklikleri

Android 7.0 (API düzeyi 24), varsayılan değerin hesaplanmasındaki bir hatayı düzeltti SeriVersionUID'nin spesifikasyonla eşleşmediği durumlarda kullanın.

Serializable uygulayan sınıflar ve özellikle bir serialVersionUID alanı belirtmezseniz varsayılan SeriVersionUID'sinde istisnaya neden olacak bir değişiklik sınıfındaki örnekleri, seri durumdan çıkarılmaya çalışıldığında seri numaralı veya daha önceki bir sürümü hedefleyen bir uygulama tarafından serileştirilmiş sürümünü değil. Hata mesajı şuna benzer:

local class incompatible: stream classdesc serialVersionUID = 1234, local class serialVersionUID = 4567

Bu sorunların düzeltilmesi için şuraya bir serialVersionUID alanı eklenmesi gerekir: hata mesajındaki stream classdesc serialVersionUID değerine sahip tüm etkilenen sınıflar (ör. 1234 inç bu bilgilerden yararlanabilirsiniz. Bu değişiklik ve Android'in tüm sürümlerinde çalışır.

Düzeltilen hata, statik başlatıcı yöntemleri, ör. <clinit>. Kaynak: bir statik başlatıcı yönteminin mevcudiyetini sınıfı, söz konusu sınıf için hesaplanan varsayılan SeriVersionUID değerini etkiler. Hata düzeltmesinden önce hesaplama, üst sınıfın bir yoksa statik başlatıcıyı da kullanabilirsiniz.

Daha net bir ifadeyle, bu değişiklik API düzeyleri 23 veya daha düşük, serialVersionUID alanı veya sınıfı olan sınıflar bu yöntemi kullanabilirsiniz.

Diğer Önemli Noktalar

  • Bir uygulama Android 7.0'da çalışıyor ancak daha düşük bir API düzeyini hedefliyorsa Kullanıcı görüntü boyutunu değiştirirse uygulama işlemi sonlandırılır. Uygulama bu senaryoyla sorunsuz bir şekilde başa çıkabilmelidir. Aksi halde kilitlenir. Kullanıcı, Son Çağrılar'dan geri yüklediğinde.

    Doğrulamanın gerçekleşip gerçekleşmediğine ilişkin bu davranışın ortaya çıkmamasını sağlayabilir. Aynı kilitlenmeye neden olarak bunu yapabilirsiniz uygulama manuel olarak sonlandırıldığında kullanılabilir.

    Android 7.0 (API düzeyi 24) ve sonraki sürümleri hedefleyen uygulamalar otomatik olarak uygulanmaz yoğunluk değişiklikleri nedeniyle öldürülenler; ancak yine de kötü amaçlı yazılıma yapılandırma değişiklikleridir.

  • Android 7.0'daki uygulamalar yapılandırma değişikliklerini, ve sonraki başlatmalarda kilitlenmemesi gerekir. Uygulama davranışını doğrulayabilirsiniz yazı tipi boyutunu değiştirerek (Ayar > Görüntülü Reklam Ağı > Yazı tipi boyutu) ve ardından geri yükleme Son Kullanılanlar'dan da uygulamayı deneyebilirsiniz.
  • Android'in önceki sürümlerindeki bir hata nedeniyle sistem, yazımı işaretlemedi katı mod ihlali olarak ana iş parçacığındaki bir TCP soketine bağlayabilirsiniz. Android 7.0 bu hatayı düzeltir. Bu davranışı gösteren uygulamalar artık android.os.NetworkOnMainThreadException yayınlıyor. Ana iş parçacığı üzerinde ağ işlemleri gerçekleştirmek genellikle kötü bir fikirdir çünkü bu işlemler genellikle ANR'lere ve gecikmelere neden olan yüksek bir gecikmeye yol açar.
  • Debug.startMethodTracing() yöntem ailesi artık varsayılan olarak çıktıyı paylaşılan depolama alanında pakete özgü dizinde depolama, üst düzey yerine SD kartın. Dolayısıyla, uygulamaların bu API'leri kullanmak için artık WRITE_EXTERNAL_STORAGE izni istemesine gerek yoktur.
  • Birçok platform API'si, gönderilen büyük yükleri kontrol etmeye başladı Binder işlem genelinde ve sistem artık TransactionTooLargeExceptions değerini yeniden fırlatıyor sessizce günlüğe kaydetmek veya engellemek yerine RuntimeExceptions olarak. Bir çok fazla verinin bir yerde saklandığı Activity.onSaveInstanceState(), Bu da ActivityThread.StopInfo ürününün Uygulamanız Android 7.0'ı hedeflediğinde RuntimeException.
  • Bir uygulama View cihazına Runnable görev yayınlarsa ve View sistem bir pencereye bağlı değilse Runnable görevini View ile sıraya alır; Runnable görevi View eklendi bir pencereye alınır. Bu davranış aşağıdaki hataları düzeltir:
    • Bir uygulama, View üzerinde amaçlanan dışında bir ileti dizisinden içerik yayınlamışsa penceresinin kullanıcı arayüzü iş parçacığına ayarlanırsa Runnable sonuç olarak yanlış iş parçacığında çalışabilir.
    • Runnable görevi döngüye girerse uygulama Runnable görevini açığa çıkarabilir.
  • Android 7.0 yüklü bir uygulamada DELETE_PACKAGES. izni bir paketi silmeye çalışıyor ancak bu paket farklı bir uygulama tarafından yüklenmişti sistem kullanıcının onayını gerektirir. Bu senaryoda, uygulamaların STATUS_PENDING_USER_ACTION. bu kullanıcı için PackageInstaller.uninstall().
  • Crypto adlı JCA sağlayıcısı kullanımdan kaldırıldı çünkü SHA1PRNG algoritması şifreleme açısından zayıftır. Uygulamalar artık Bu sağlayıcı artık geçerli olmadığı için türetme anahtarlarına (güvenli olmayan şekilde) SHA1PRNG kullanılabilir. Daha fazla bilgi için bloga bakın post "Kripto" Güvenliği Android'de sağlayıcı desteği sonlandırıldı K