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.
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.
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:
- Android 7.0 (API düzeyi 24) ve sonraki sürümleri hedefleyen uygulamalar
CONNECTIVITY_ACTION
, şu koşulda yayın yapar: yayın alıcısını manifest dosyasında bildirmesi gerekir. Uygulamalarda kaydolurlarsaCONNECTIVITY_ACTION
yayınları alContext.registerReceiver()
ileBroadcastReceiver
ve bu bağlam hâlâ geçerlidir. - Sistem artık
ACTION_NEW_PICTURE
veyaACTION_NEW_VIDEO
yayınları göndermiyor. Bu optimizasyon Yalnızca Android 7.0'ı hedefleyen uygulamaları değil, tüm uygulamaları etkiler.
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:
-
Gizli dosyaların dosya izinleri artık sahibi tarafından rahatlatılmamalı,
ve bunu yapmak için
MODE_WORLD_READABLE
ve/veyaMODE_WORLD_WRITEABLE
, bir öğeyi tetikleyecekSecurityException
.Not: Bu kısıtlama henüz tam olarak uygulanmamıştır. Uygulamalar, kendi özel dizinlerindeki izinleri yerel API'ler veya
File
API. Ancak, gizli dizin izinlerinin gevşetilmesini teşvik etmeyin. -
file://
URI'larının paket alanının dışına geçirilmesi, yolda geri bildirimde bulunur. Bu nedenle, doğru cevaplarıfile://
URI tetikleyicisi aFileUriExposedException
. bir gizli dosyanın içeriğiFileProvider
kullanıyor. -
DownloadManager
artık gizli olarak paylaşımda bulunamayacak depolanan dosyaları dosya adına göre gösterir. Eski uygulamalar,COLUMN_LOCAL_FILENAME
erişimi için erişilemez yol. Uygulama hedefleme Android 7.0 veya sonraki sürümler birSecurityException
tetiklerken erişmeye çalışıyorCOLUMN_LOCAL_FILENAME
. İndirme konumunu herkese açık bir konuma ayarlayan eski uygulamalar kullanarakDownloadManager.Request.setDestinationInExternalFilesDir()
veyaDownloadManager.Request.setDestinationInExternalPublicDir()
yine de dosyaya şuradan erişebilir: ancakCOLUMN_LOCAL_FILENAME
, yöntemi kesinlikle önerilmez. Bir dosyaya erişmenin tercih edilen yoluDownloadManager
tarafından maruz kalanContentResolver.openFileDescriptor()
.
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.
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
velibandroid_runtime.so
satıcısındangetJNIEnv
:AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h> AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or JavaVM::AttachCurrentThread from <jni.h>.
- Gizli
property_get
yerine__system_property_get
kullanınlibcutils.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
adresindekiSSL_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 birIllegalArgumentException
- 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()
vecreateAndInitializeUser()
yöntemleri kullanımdan kaldırıldı; yeni Bunların yeriniDevicePolicyManager.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öntemnull
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çinENCRYPTION_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ğinlockNow()
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ıkWRITE_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ıkTransactionTooLargeExceptions
değerini yeniden fırlatıyor sessizce günlüğe kaydetmek veya engellemek yerineRuntimeExceptions
olarak. Bir çok fazla verinin bir yerde saklandığıActivity.onSaveInstanceState()
, Bu daActivityThread.StopInfo
ürününün Uygulamanız Android 7.0'ı hedeflediğindeRuntimeException
. -
Bir uygulama
View
cihazınaRunnable
görev yayınlarsa veView
sistem bir pencereye bağlı değilseRunnable
göreviniView
ile sıraya alır;Runnable
göreviView
eklendi bir pencereye alınır. Bu davranış aşağıdaki hataları düzeltir: -
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ınSTATUS_PENDING_USER_ACTION
. bu kullanıcı içinPackageInstaller.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