Android 6.0 (API seviyesi 23), yeni özellikler ve becerilerin yanı sıra çeşitli sistem değişiklikleri ve API davranışı değişiklikleri içerir. Bu dokümanda, uygulamalarınızda anlamanız ve hesaba katmanız gereken bazı önemli değişiklikler vurgulanmaktadır.
Daha önce Android için uygulama yayınladıysanız, platformdaki bu değişikliklerin uygulamanızı etkileyeceğini unutmayın.
Çalışma Zamanı İzinleri
Bu sürümde, kullanıcıların çalışma zamanında uygulama izinlerini doğrudan yönetebildikleri yeni bir izin modeli kullanıma sunuluyor. Bu model, uygulama geliştiricileri için yükleme ve otomatik güncelleme işlemlerini kolaylaştırırken kullanıcılara izinler üzerinde daha fazla görünürlük ve kontrol sağlar. Kullanıcılar yüklü uygulamalar için ayrı ayrı izin verebilir veya izinleri iptal edebilir.
Android 6.0 (API düzeyi 23) veya sonraki sürümleri hedefleyen uygulamalarınızda, çalışma zamanında izinleri kontrol edip istekte bulunduğunuzdan emin olun. Uygulamanıza izin verilip verilmediğini öğrenmek için yeni checkSelfPermission()
yöntemini çağırın. İzin istemek için yeni
requestPermissions()
yöntemini çağırın. Uygulamanız Android 6.0'ı (API düzeyi 23) hedeflemiyor olsa bile uygulamanızı yeni izin modeliyle test etmeniz gerekir.
Uygulamanızda yeni izin modelini desteklemeyle ilgili ayrıntılar için Sistem İzinleriyle Çalışma bölümüne bakın. Uygulamanız üzerindeki etkinin nasıl değerlendirileceğiyle ilgili ipuçları için İzin Kullanım Notları'na bakın.
Doz ve Uygulamayı Beklemeye Alma
Bu sürümde, boşta olan cihazlar ve uygulamalar için yeni güç tasarrufu optimizasyonları sunulmaktadır. Bu özellikler tüm uygulamaları etkilediğinden, uygulamalarınızı bu yeni modlarda test etmeyi unutmayın.
- Doz: Kullanıcı cihazın fişini çekip ekranı kapalıyken sabit bir süre bırakırsa cihaz belirli bir süre Doz moduna geçer ve burada sistemi uyku durumunda tutmaya çalışır. Bu modda cihazlar kısa süreliğine düzenli olarak normal şekilde çalışmaya devam eder. Böylece uygulama senkronizasyonu gerçekleştirilebilir ve sistem bekleyen işlemleri gerçekleştirebilir.
- Uygulamayı Beklemeye Alma: Uygulamayı Beklemeye Alma özelliği, kullanıcı etkin olarak kullanmadığında uygulamanın boşta olup olmadığını belirlemesine olanak tanır. Bu tespiti, kullanıcı belirli bir süre boyunca uygulamaya dokunmadığında sistem yapar. Cihaz fişe takılı değilse sistem, ağ erişimini devre dışı bırakır ve boşta olarak gördüğü uygulamaların senkronizasyonlarını ve işlerini askıya alır.
Güç tasarrufu sağlayan bu değişiklikler hakkında daha fazla bilgi edinmek için Doz ve Uygulamayı Beklemeye Alma özelliklerini optimize etme sayfasına bakın.
Apache HTTP İstemcisini Kaldırma
Android 6.0 sürümü, Apache HTTP istemcisi desteğini kaldırmıştır. Uygulamanız bu istemciyi kullanıyorsa ve Android 2.3 (API düzeyi 9) veya sonraki sürümleri hedefliyorsa bunun yerine HttpURLConnection
sınıfını kullanın. Bu API, şeffaf sıkıştırma ve yanıt önbelleğe alma yoluyla ağ kullanımını azalttığı ve güç tüketimini en aza indirdiği için daha verimlidir. Apache HTTP API'lerini kullanmaya devam etmek için önce build.gradle
dosyanızda aşağıdaki derleme süresi bağımlılığını tanımlamanız gerekir:
android { useLibrary 'org.apache.http.legacy' }
BoringSSL
Android, OpenSSL'den BoringSSL kitaplığına taşınıyor. Uygulamanızda Android NDK'yı kullanıyorsanız libcrypto.so
ve libssl.so
gibi NDK API'sinin parçası olmayan şifreleme kitaplıklarına bağlantı vermeyin. Bu kitaplıklar, herkese açık API'ler değildir ve farklı sürümlerde ve cihazlarda haber verilmeksizin değiştirilebilir veya bozulabilir.
Ayrıca, güvenlik açıklarına maruz kalabilirsiniz. Bunun yerine, yerel kodunuzu JNI aracılığıyla Java kriptografi API'lerini çağıracak veya seçtiğiniz bir şifreleme kitaplığına statik olarak bağlantı verecek şekilde değiştirin.
Donanım Tanımlayıcıya Erişim
Android, kullanıcılara daha fazla veri koruması sağlamak amacıyla bu sürümden itibaren kablosuz bağlantı ve Bluetooth API'lerini kullanan uygulamalar için cihazın yerel donanım tanımlayıcısına programatik erişimi kaldırıyor. WifiInfo.getMacAddress()
ve BluetoothAdapter.getAddress()
yöntemleri artık 02:00:00:00:00:00
değerinde sabit bir değer döndürüyor.
Bluetooth ve kablosuz ağ taramaları aracılığıyla yakındaki harici cihazların donanım tanımlayıcılarına erişmek için uygulamanızın artık ACCESS_FINE_LOCATION
veya ACCESS_COARSE_LOCATION
izinlerine sahip olması gerekir:
Not: Android 6.0 (API düzeyi 23) çalıştıran bir cihaz arka planda kablosuz ağ veya Bluetooth taraması başlattığında, işlem harici cihazlar tarafından rastgele bir MAC adresinden kaynaklanmış olarak görülebilir.
Bildirimler
Bu sürüm, Notification.setLatestEventInfo()
yöntemini kaldırır. Bildirimler oluşturmak için bunun yerine Notification.Builder
sınıfını kullanın. Bir bildirimi tekrar tekrar güncellemek için Notification.Builder
örneğini yeniden kullanın. Güncellenmiş Notification
örneklerini almak için build()
yöntemini çağırın.
adb shell dumpsys notification
komutu artık bildirim metninizi yazdırmaz.
Bir bildirim nesnesindeki metni yazdırmak için adb shell dumpsys notification --noredact
komutunu kullanın.
AudioManager Değişiklikleri
AudioManager
sınıfı aracılığıyla ses düzeyini doğrudan ayarlama veya belirli akışları yoksayma artık desteklenmemektedir. setStreamSolo()
yöntemi kullanımdan kaldırıldığı için bunun yerine requestAudioFocus()
yöntemini çağırmalısınız. Benzer şekilde, setStreamMute()
yöntemi de kullanımdan kaldırılmıştır. Bunun yerine, adjustStreamVolume()
yöntemini çağırın ve ADJUST_MUTE
veya ADJUST_UNMUTE
yön değerine iletin.
Metin Seçimi
![Kayan bir araç çubuğundaki yeni metin seçimi özelliklerini gösteren ekran](https://developer.android.google.cn/static/images/android-6.0/text-selection.gif?authuser=5&hl=tr)
Kullanıcılar uygulamanızda metin seçtiğinde, artık Kes, Kopyala ve Yapıştır gibi metin seçimi işlemlerini bir kayan araç çubuğunda gösterebilirsiniz. Kullanıcı etkileşimi uygulaması, Bağımsız görünümler için bağlamsal işlem modunu etkinleştirme bölümünde açıklandığı gibi, bağlamsal işlem çubuğunun uygulanmasına benzerdir.
Metin seçimi için kayan araç çubuğu uygulamak üzere mevcut uygulamalarınızda aşağıdaki değişiklikleri yapın:
View
veyaActivity
nesnenizdestartActionMode(Callback)
olanActionMode
çağrılarınızıstartActionMode(Callback, ActionMode.TYPE_FLOATING)
olarak değiştirin.- Bunun yerine, mevcut
ActionMode.Callback
uygulamanızı alıpActionMode.Callback2
kapsamını genişletin. - Görünümde içerik
Rect
nesnesinin koordinatlarını (metin seçimi dikdörtgeni gibi) sağlamak içinonGetContentRect()
yöntemini geçersiz kılın. - 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.
Android Support Library düzeltmesinin 22.2 sürümünü kullanıyorsanız, kayan araç çubuklarının geriye dönük uyumlu olmadığını ve appcompat öğesinin varsayılan olarak ActionMode
nesnelerini kontrol ettiğini unutmayın. Bu, kayan araç çubuklarının görüntülenmesini engeller. AppCompatActivity
öğesinde ActionMode
desteğini etkinleştirmek için getDelegate()
yöntemini, ardından döndürülen AppCompatDelegate
nesnesinde setHandleNativeActionModesEnabled()
çağrısı yaparak giriş parametresini false
olarak ayarlayın. Bu çağrı, ActionMode
nesnelerinin denetimini çerçeveye döndürür. Çerçevenin ActionBar
veya kayan araç çubuğu modlarını desteklemesine olanak tanıyan Android 6.0 (API düzeyi 23) sürümünü çalıştıran cihazlarda, Android 5.1 (API düzeyi 22) veya önceki sürümleri çalıştıran cihazlarda ise yalnızca ActionBar
modları desteklenir.
Tarayıcı Yer İşareti Değişiklikleri
Bu sürüm genel yer işaretleri desteğini kaldırır. android.provider.Browser.getAllBookmarks()
ve android.provider.Browser.saveBookmark()
yöntemleri kaldırılmıştır. Benzer şekilde READ_HISTORY_BOOKMARKS
ve WRITE_HISTORY_BOOKMARKS
izinleri de kaldırılır. Uygulamanız Android 6.0 (API düzeyi 23) veya sonraki bir sürümü hedefliyorsa global sağlayıcıdaki yer işaretlerine erişmeyin veya yer işareti izinlerini kullanmayın. Bunun yerine, uygulamanız yer işareti
verilerini dahili olarak depolamalıdır.
Android Anahtar Deposu Değişiklikleri
Bu sürümle birlikte, Android Anahtar Deposu sağlayıcısı artık Dinamik Arama Ağı Reklamlarını desteklememektedir. ECDSA desteklenmektedir.
Aktif olmayan şifreleme gerektirmeyen anahtarlar, güvenli kilit ekranı devre dışı bırakıldığında veya sıfırlandığında (ör. kullanıcı veya cihaz yöneticisi tarafından) artık silinmez. Kullanımda olmayan verilerin şifrelenmesi gereken anahtarlar bu etkinlikler sırasında silinir.
Kablosuz Ağ ve Ağ İletişimi Değişiklikleri
Bu sürümde, kablosuz ağ ve ağ iletişimi API'lerinde aşağıdaki davranış değişiklikleri tanıtılmaktadır.
- Uygulamalarınız artık
WifiConfiguration
nesnelerinin durumunu yalnızca bu nesneleri siz oluşturduysanız değiştirebilir. Kullanıcı veya diğer uygulamalar tarafından oluşturulanWifiConfiguration
nesnelerini değiştirmenize veya silmenize izin verilmez. -
Daha önce, bir uygulama
disableAllOthers=true
ayarıylaenableNetwork()
özelliğini kullanarak cihazı belirli bir kablosuz ağa bağlanmaya zorlarsa cihazın hücresel veri gibi diğer ağlarla bağlantısı kesilirdi. Bu sürümde, cihazın diğer ağlarla olan bağlantısı artık kesilmez. UygulamanızıntargetSdkVersion
değeri“20”
veya daha düşükse seçili kablosuz ağa sabitlenir. UygulamanızıntargetSdkVersion
değeri“21”
veya daha yüksekse ağ trafiğinin seçilen ağda gönderildiğinden emin olmak için çoklu ağ API'lerini (openConnection()
,bindSocket()
ve yenibindProcessToNetwork()
yöntemi gibi) kullanın.
Kamera Hizmeti Değişiklikleri
Bu sürümde, kamera hizmetindeki paylaşılan kaynaklara erişim modeli, önceki "ilk gelen alır" erişim modelinden, yüksek öncelikli işlemlerin tercih edildiği bir erişim modeline dönüştürüldü. Hizmet davranışında yapılan değişiklikler şunlardır:
- Kamera cihazı açma ve yapılandırma da dahil olmak üzere kamera alt sistemi kaynaklarına erişim izni, istemci uygulama işleminin "önceliğine" göre verilir. Kullanıcı tarafından görülebilen veya ön plan etkinlikleri olan uygulama süreçlerine genellikle daha yüksek öncelik verilir. Bu da kamera kaynağı edinme ve kullanımını daha güvenilir hale getirir.
- Daha yüksek öncelikli bir uygulama kamerayı kullanmaya çalıştığında, daha düşük öncelikli uygulamalar için etkin kamera istemcileri "çıkarılabilir". Kullanımdan kaldırılan
Camera
API'de bu durum, çıkarılan istemci içinonError()
çağrısına yol açar.Camera2
API'deonDisconnected()
, çıkarılan istemci için çağrılıyor. - Uygun kamera donanımına sahip cihazlarda, ayrı uygulama işlemleri ayrı kamera cihazlarını aynı anda bağımsız olarak açıp kullanabilir. Ancak aynı anda erişimin açık kamera cihazlarından herhangi birinin performansında veya becerilerinde önemli düşüşlere neden olduğu çok işlemli kullanım alanları artık kamera hizmeti tarafından tespit edilir ve bunlara izin verilmez. Bu değişiklik, aynı kamera cihazına doğrudan erişmeye çalışan başka bir uygulama olmasa bile daha düşük öncelikli istemcilerde "çıkarılmasına" neden olabilir.
- Mevcut kullanıcının değiştirilmesi, önceki kullanıcı hesabına ait uygulamalardaki etkin kamera istemcilerinin çıkarılmasına neden olur. 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, kullanıcı farklı bir hesaba geçiş yaptığında kamera alt sistemini kullanan işlemlerden ayrılamayacağı anlamına gelir.
Süre
ART çalışma zamanı artık newInstance()
yöntemi için erişim kurallarını doğru şekilde uyguluyor. Bu değişiklik, Dalvik'in önceki sürümlerde erişim kurallarını yanlış kontrol ettiği bir sorunu düzeltmektedir.
Uygulamanız newInstance()
yöntemini kullanıyorsa ve erişim kontrollerini geçersiz kılmak istiyorsanız giriş parametresi true
olarak ayarlanmış şekilde setAccessible()
yöntemini çağırın. Uygulamanız v7 appcompat kitaplığını veya v7 geri dönüşüm kitaplığını kullanıyorsa bu kitaplıkların en yeni sürümlerini kullanacak şekilde uygulamanızı güncellemeniz gerekir. Aksi takdirde, XML'den başvurulan tüm özel sınıfların, sınıf kurucularının erişilebilir olacak şekilde güncellendiğinden emin olun.
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ı (
genel hata 6670) anlıyor ve soname
ile arama uygulanmaya başladı. Bozuk DT_NEEDED
girişleri (genellikle derleme makinesinin dosya sistemindeki mutlak yollar) içeren daha önce çalışan uygulamalar yüklendiğinde başarısız olabilir.
dlopen(3) RTLD_LOCAL
işareti artık doğru şekilde uygulanmış. Varsayılan değer RTLD_LOCAL
olduğundan, açıkça RTLD_LOCAL
kullanmayan dlopen(3)
çağrıları etkilenecektir (uygulamanız açık bir şekilde RTLD_GLOBAL
kullanmadığı sürece). RTLD_LOCAL
ile birlikte, daha sonra dlopen(3)
çağrılarıyla yüklenen kitaplıklarda (DT_NEEDED
girişlerine referans vermek yerine) semboller kullanıma sunulmaz.
Android'in önceki sürümlerinde, uygulamanız sistemden metin konumlarını içeren bir paylaşılan kitaplığı yüklemesini istediyse sistem bir uyarı gösteriyordu ancak yine de kitaplığın yüklenmesine izin veriyordu.
Uygulamanızın hedef SDK sürümü 23 veya üzeriyse bu sürümden itibaren sistem bu kitaplığı reddeder. Bir kitaplığın yüklenemediğini tespit etmenize yardımcı olmak için uygulamanız, dlopen(3)
hatasını günlüğe kaydetmeli ve dlerror(3)
çağrısının döndürdüğü sorun açıklaması metnini içermelidir. Metin taşıma işlemlerini ele alma hakkında daha fazla bilgi edinmek için bu kılavuza bakın.
APK Doğrulaması
Platformda artık APK'lar daha sıkı bir şekilde doğrulanıyor. Bir dosya, manifest dosyasında tanımlanmışsa ancak APK'nın kendisinde bulunmuyorsa APK bozuk olarak kabul edilir. İçeriklerden herhangi biri kaldırılırsa APK yeniden imzalanmalıdır.
USB Bağlantısı
USB bağlantı noktasından yapılan cihaz bağlantıları artık varsayılan olarak yalnızca şarj moduna ayarlıdır. Cihaza ve içeriğine USB bağlantısı üzerinden erişmek için kullanıcılar bu tür etkileşimlere açıkça izin vermelidir. 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çermektedir:
- Kişisel bağlamda iş iletişim bilgileri. Google Çevirici
Arama Kaydı'nda artık kullanıcı geçmiş aramaları görüntülediğinde iş kişileri gösteriliyor.
setCrossProfileCallerIdDisabled()
true
olarak ayarlandığında, Google Çevirici Arama Kaydı'ndaki iş profili kişileri gizlenir. İş kişileri, yalnızcasetBluetoothContactSharingDisabled()
öğesinifalse
olarak ayarlarsanız Bluetooth üzerinden cihazlarda özel kişilerle birlikte görüntülenebilir. Varsayılan olaraktrue
değerine ayarlanmıştır. - Kablosuz yapılandırmasının kaldırılması: Bir Profil Sahibi tarafından eklenen kablosuz yapılandırmaları (örneğin,
addNetwork()
yöntemine yapılan çağrılar) artık o iş profili silinirse kaldırılmaktadır. - Kablosuz yapılandırması tam kilitleme:
WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN
değeri sıfır değilse etkin bir Cihaz Sahibi tarafından oluşturulan herhangi bir kablosuz ağ yapılandırması artık değiştirilemez veya silinemez. Kullanıcı yine de kendi kablosuz ağ yapılandırmalarını oluşturabilir ve değiştirebilir. Etkin Cihaz Sahipleri, kendileri tarafından oluşturulmayanlar da dahil olmak üzere tüm kablosuz ağ yapılandırmalarını düzenleme veya kaldırma ayrıcalığına sahiptir. - Google Hesabı ekleyerek cihaz politikası denetleyiciyi indirme: Cihaz politikası denetleyici (DPC) uygulaması aracılığıyla yönetim gerektiren bir Google hesabı, yönetilen bağlam dışındaki bir cihaza eklendiğinde, hesap ekleme akışı artık kullanıcıdan uygun WPC'yi yüklemesini ister. Bu davranış aynı zamanda Ayarlar > Hesaplar aracılığıyla ve ilk cihaz kurulum sihirbazında eklenen hesaplar için de geçerlidir.
- Belirli
DevicePolicyManager
API davranışlarında yapılan değişiklikler:setCameraDisabled()
yönteminin çağrılması yalnızca arayan kullanıcı için kamerayı etkiler. Yönetilen profilden çağrılması birincil kullanıcıda çalışan kamera uygulamalarını etkilemez.- Ek olarak,
setKeyguardDisabledFeatures()
yöntemi artık hem Profil Sahipleri hem de Cihaz Sahipleri tarafından kullanılabilir. - Profil Sahibi şu tuş koruyucu kısıtlamalarını belirleyebilir:
- Profilin üst kullanıcısı için tuş koruyucu ayarlarını etkileyen
KEYGUARD_DISABLE_TRUST_AGENTS
veKEYGUARD_DISABLE_FINGERPRINT
. KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS
; yalnızca yönetilen profildeki uygulamalar tarafından oluşturulan bildirimleri etkiler.
- Profilin üst kullanıcısı için tuş koruyucu ayarlarını etkileyen
DevicePolicyManager.createAndInitializeUser()
veDevicePolicyManager.createUser()
yöntemleri kullanımdan kaldırılmıştır.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 değerine ayarlıdır. SHA-1, geriye dönük uyumluluk için hâlâ desteklense de gelecekte kaldırılacaktır.EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM
artık yalnızca SHA-256'yı kabul ediyor.- Android 6.0'da (API düzeyi 23) mevcut olan cihaz başlatıcı API'leri kaldırıldı.
EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS
kaldırıldığında, fabrika ayarlarına sıfırlanmış bir cihazın NFC dokundurma temel hazırlığı programatik olarak açılamaz.- Yönetilen cihazın NFC temel hazırlığı sırasında cihaz sahibinin uygulamasına veri aktarmak için artık
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
extra özelliğini kullanabilirsiniz. - Android for Work API'leri; İş profilleri, destek katmanı ve benzeri M çalışma zamanı izinleri için optimize edilmiştir. Yeni
DevicePolicyManager
izin API'leri, M öncesi uygulamaları etkilemez. - Kullanıcılar bir
ACTION_PROVISION_MANAGED_PROFILE
veyaACTION_PROVISION_MANAGED_DEVICE
amacı ile başlatılan kurulum akışının eşzamanlı kısmından çıktığında sistem artıkRESULT_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ının adıNetworkStats
olarak değiştirildi.
- Veri Kullanımı:
- Genel ayarlarda yapılan değişiklikler:
- Bu ayarlar artık
setGlobalSettings()
üzerinden yapılamaz:BLUETOOTH_ON
DEVELOPMENT_SETTINGS_ENABLED
MODE_RINGER
NETWORK_PREFERENCE
WIFI_ON
- Bu genel ayarlar artık
setGlobalSettings()
aracılığıyla ayarlanabilir:
- Bu ayarlar artık