Android 16, önceki sürümlerde olduğu gibi uygulamanızı etkileyebilecek davranış değişiklikleri içerir. Aşağıdaki davranış değişiklikleri yalnızca Android 16 veya sonraki sürümleri hedefleyen uygulamalar için geçerlidir. Uygulamanız Android 16 veya sonraki sürümleri hedefliyorsa geçerli olduğu durumlarda bu davranışları destekleyecek şekilde uygulamanızı değiştirmeniz gerekir.
Uygulamanızın targetSdkVersion değerinden bağımsız olarak, Android 16'da çalışan tüm uygulamaları etkileyen davranış değişiklikleri listesini de incelemeyi unutmayın.
Kullanıcı deneyimi ve sistem arayüzü
Android 16 (API düzeyi 36), daha tutarlı ve sezgisel bir kullanıcı deneyimi oluşturmayı amaçlayan aşağıdaki değişiklikleri içerir.
Uçtan uca kapsam dışında kalma özelliği kaldırılıyor
Android 15'i (API düzeyi 35) hedefleyen uygulamalarda Android 15'te uçtan uca görünüm zorunlu kılındı. Ancak uygulamanız R.attr#windowOptOutEdgeToEdgeEnforcement değerini true olarak ayarlayarak bu zorunluluğu devre dışı bırakabilir. Android 16'yı (API düzeyi 36) hedefleyen uygulamalarda R.attr#windowOptOutEdgeToEdgeEnforcement desteği sonlandırıldı ve devre dışı bırakıldı. Uygulamanız uçtan uca ekran özelliğini devre dışı bırakamaz.
- Uygulamanız Android 16'yı (API düzeyi 36) hedefliyorsa ve Android 15 cihazda çalışıyorsa
R.attr#windowOptOutEdgeToEdgeEnforcementçalışmaya devam eder. - Uygulamanız Android 16'yı (API düzeyi 36) hedefliyorsa ve Android 16 cihazda çalışıyorsa
R.attr#windowOptOutEdgeToEdgeEnforcementdevre dışı bırakılır.
Android 16'da test için uygulamanızın uçtan uca desteklediğinden emin olun ve R.attr#windowOptOutEdgeToEdgeEnforcement kullanımını kaldırın. Böylece uygulamanız Android 15 cihazlarda da uçtan uca desteklenir. Uçtan uca desteği için Compose (Oluşturma) ve Views (Görünümler) kılavuzuna bakın.
Tahmin edilen geri gitme için taşıma veya devre dışı bırakma gerekir
对于以 Android 16(API 级别 36)或更高版本为目标平台且在搭载 Android 16 或更高版本的设备上运行的应用,预测性返回系统动画(返回主屏幕、跨任务和跨 activity)默认处于启用状态。此外,系统不再调用 onBackPressed,也不再调度 KeyEvent.KEYCODE_BACK。
如果您的应用会拦截返回事件,但您尚未迁移到预测性返回,请更新应用以使用受支持的返回导航 API,或者通过在应用的 AndroidManifest.xml 文件的 <application> 或 <activity> 标记中将 android:enableOnBackInvokedCallback 属性设置为 false 来暂时选择停用。
Elegant Font API'leri kullanımdan kaldırıldı ve devre dışı bırakıldı
Android 15'i (API düzeyi 35) hedefleyen uygulamalarda elegantTextHeight
TextView özelliği varsayılan olarak true şeklinde ayarlanır. Bu sayede, kompakt yazı tipi çok daha okunabilir bir yazı tipiyle değiştirilir. elegantTextHeight özelliğini false olarak ayarlayarak bu durumu geçersiz kılabilirsiniz.
Android 16, elegantTextHeight özelliğinin desteğini sonlandırır. Uygulamanız Android 16'yı hedeflediğinde bu özellik yoksayılır. Bu API'ler tarafından kontrol edilen "UI
fonts" desteği sonlandırılıyor. Bu nedenle, Arapça, Lao, Myanmar, Tamil, Gujarati, Kannada, Malayalam, Odia, Telugu veya Tayca dillerinde tutarlı ve gelecekte de geçerli olacak metin oluşturma için tüm düzenleri uyarlamanız gerekir.
Android 14'ü (API düzeyi 34) ve önceki sürümleri hedefleyen uygulamalarda veya elegantTextHeight özelliğini false olarak ayarlayarak varsayılan davranışı geçersiz kılan Android 15'i (API düzeyi 35) hedefleyen uygulamalarda elegantTextHeight davranışı.
Android 16'yı (API düzeyi 36) hedefleyen uygulamalar veya elegantTextHeight özelliğini false olarak ayarlayarak varsayılanı geçersiz kılmayan Android 15'i (API düzeyi 35) hedefleyen uygulamalar için elegantTextHeight davranışı.Temel işlevler
Android 16 (API düzeyi 36), Android sisteminin çeşitli temel özelliklerini değiştiren veya genişleten aşağıdaki değişiklikleri içerir.
Sabit ücretli iş planlaması optimizasyonu
Android 16'yı hedeflemeden önce, scheduleAtFixedRate geçerli bir işlem yaşam döngüsü dışında olduğu için bir görev yürütmeyi kaçırdığında, uygulama geçerli bir yaşam döngüsüne döndüğünde tüm kaçırılan yürütmeler hemen yürütülür.
Android 16'yı hedeflerken, uygulama geçerli bir yaşam döngüsüne döndüğünde en fazla bir scheduleAtFixedRate yürütme işleminin eksikliği hemen yürütülür. Bu davranış değişikliğinin uygulama performansını iyileştirmesi bekleniyor. Uygulamanızın etkilenip etkilenmediğini kontrol etmek için uygulamanızda bu davranışı test edin.
Uygulama uyumluluk çerçevesini kullanarak ve STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS uyumluluk işaretini etkinleştirerek de test yapabilirsiniz.
Cihaz form faktörleri
Android 16 (API düzeyi 36), büyük ekranlı cihazlarda gösterilen uygulamalar için aşağıdaki değişiklikleri içerir.
Uyarlanabilir düzenler
Android uygulamaları artık çeşitli cihazlarda (ör. telefonlar, tabletler, katlanabilir cihazlar, masaüstü bilgisayarlar, arabalar ve TV'ler) ve büyük ekranlardaki pencere modlarında (ör. bölünmüş ekran ve pencereli görüntüleme) çalışabildiğinden geliştiriciler, cihaz yönünden bağımsız olarak herhangi bir ekran ve pencere boyutuna uyum sağlayan Android uygulamaları oluşturmalıdır. Yön ve yeniden boyutlandırma kısıtlaması gibi paradigmalar, günümüzün çok cihazlı dünyasında çok kısıtlayıcıdır.
Yön, yeniden boyutlandırılabilirlik ve en boy oranı kısıtlamalarını yoksayma
Android 16'yı (API düzeyi 36) hedefleyen uygulamalarda, en küçük genişliği 600 dp'den büyük veya buna eşit olan ekranlarda yön, yeniden boyutlandırılabilirlik ve en boy oranı kısıtlamaları artık geçerli değildir. Uygulamalar, en boy oranından veya kullanıcının tercih ettiği yönden bağımsız olarak ekran penceresinin tamamını doldurur ve dikey sütunlar kullanılmaz.
Bu değişiklik, yeni bir standart platform davranışı sunar. Android, uygulamaların çeşitli yönlere, ekran boyutlarına ve en boy oranlarına uyum sağlamasının beklendiği bir modele doğru ilerliyor. Sabit yönlendirme veya sınırlı yeniden boyutlandırma gibi kısıtlamalar, uygulamanın uyarlanabilirliğini engeller. Mümkün olan en iyi kullanıcı deneyimini sunmak için uygulamanızı uyarlanabilir hale getirin.
Bu davranışı, uygulama uyumluluğu çerçevesini kullanarak ve UNIVERSAL_RESIZABLE_BY_DEFAULT uyumluluk işaretini etkinleştirerek de test edebilirsiniz.
Sık karşılaşılan zarar veren değişiklikler
Yön, yeniden boyutlandırma ve en-boy oranı kısıtlamalarını yoksaymak, uygulamanızın kullanıcı arayüzünü bazı cihazlarda etkileyebilir. Özellikle de dikey yönde kilitlenmiş küçük düzenler için tasarlanmış öğeler (ör. düzenlerin gerilmesi, ekran dışı animasyonlar ve bileşenler gibi sorunlar) bu durumdan etkilenebilir. En-boy oranı veya yönlendirme ile ilgili tüm varsayımlar, uygulamanızda görsel sorunlara neden olabilir. Bu sorunları önleme ve uygulamanızın uyarlanabilir davranışını iyileştirme hakkında daha fazla bilgi edinin.
Cihaz döndürmeye izin vermek, daha fazla etkinlik yeniden oluşturulmasına neden olur. Bu da düzgün şekilde korunmadığı takdirde kullanıcı durumunun kaybolmasına yol açabilir. Kullanıcı arayüzü durumunu doğru şekilde kaydetmeyi Kullanıcı arayüzü durumlarını kaydetme başlıklı makaleden öğrenebilirsiniz.
Uygulama ayrıntıları
Aşağıdaki manifest özellikleri ve çalışma zamanı API'leri, tam ekran ve çok pencereli modlarda büyük ekranlı cihazlarda yoksayılır:
screenOrientationresizableActivityminAspectRatiomaxAspectRatiosetRequestedOrientation()getRequestedOrientation()
screenOrientation, setRequestedOrientation() ve getRequestedOrientation() için aşağıdaki değerler yoksayılır:
portraitreversePortraitsensorPortraituserPortraitlandscapereverseLandscapesensorLandscapeuserLandscape
Ekranın yeniden boyutlandırılmasıyla ilgili olarak android:resizeableActivity="false",
android:minAspectRatio ve android:maxAspectRatio'ın etkisi yoktur.
Android 16'yı (API düzeyi 36) hedefleyen uygulamalarda, uygulama yönü, yeniden boyutlandırılabilirlik ve en-boy oranı kısıtlamaları büyük ekranlarda varsayılan olarak yoksayılır. Ancak tam olarak hazır olmayan her uygulama, bu davranışı geçici olarak devre dışı bırakabilir (bu da uyumluluk modunda yerleştirilme gibi önceki davranışla sonuçlanır).
İstisnalar
Android 16'daki yön, yeniden boyutlandırma ve en-boy oranı kısıtlamaları aşağıdaki durumlarda geçerli değildir:
- Oyunlar (
android:appCategorybayrağına göre) - Kullanıcıların, cihazın en boy oranı ayarlarında uygulamanın varsayılan davranışını açıkça etkinleştirmesi
sw600dpboyutundan küçük ekranlar
Geçici olarak devre dışı bırakma
Belirli bir etkinliği devre dışı bırakmak için PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY manifest özelliğini bildirin:
<activity ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
...
</activity>
Uygulamanızın çok fazla bölümü Android 16'ya hazır değilse uygulama düzeyinde aynı özelliği uygulayarak tamamen kapsam dışında kalabilirsiniz:
<application ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
Sağlık ve fitness
Android 16 (API düzeyi 36), sağlık ve fitness verileriyle ilgili aşağıdaki değişiklikleri içerir.
Sağlık ve fitness izinleri
Android 16 (API düzeyi 36) veya sonraki sürümleri hedefleyen uygulamalar için BODY_SENSORS izinleri, android.permissions.health altında daha ayrıntılı izinler kullanır. Bu izinler Health Connect tarafından da kullanılır. Android 16'dan itibaren, daha önce BODY_SENSORS veya BODY_SENSORS_BACKGROUND iznini gerektiren tüm API'ler bunun yerine ilgili android.permissions.health iznini gerektirir. Bu durum aşağıdaki veri türlerini, API'leri ve ön plan hizmeti türlerini etkiler:
- Wear OS'teki Sağlık Hizmetleri'nden
HEART_RATE_BPM - Android Sensor Manager'dan
Sensor.TYPE_HEART_RATE - Wear OS'te
ProtoLayout'denheartRateAccuracyveheartRateBpm FOREGROUND_SERVICE_TYPE_HEALTH,BODY_SENSORSyerine ilgiliandroid.permission.healthizninin gerektiği yerlerde
Uygulamanız bu API'leri kullanıyorsa ilgili ayrıntılı izinleri istemelidir:
- Nabız, SpO2 veya deri sıcaklığının kullanım sırasında izlenmesi için:
BODY_SENSORSyerineandroid.permissions.healthaltındaki ayrıntılı izni (ör.READ_HEART_RATE) isteyin. - Arka planda sensör erişimi için
BODY_SENSORS_BACKGROUNDyerine requestREAD_HEALTH_DATA_IN_BACKGROUNDkullanın.
Bu izinler, sağlık, fitness ve sağlıklı yaşam verileri için Android veri deposu olan Health Connect'ten veri okuma erişimini koruyan izinlerle aynıdır.
Mobil uygulamalar
READ_HEART_RATE ve diğer ayrıntılı izinleri kullanmaya geçen mobil uygulamalar, uygulamanın gizlilik politikasını göstermek için etkinlik bildirmelidir. Bu, Health Connect ile aynı koşuldur.
Bağlantı
Android 16 (API düzeyi 36), çevre birimi cihazlarıyla bağlantıyı iyileştirmek için Bluetooth yığınında aşağıdaki değişiklikleri içerir.
Bağlantı kaybı ve şifreleme değişikliklerini işlemek için yeni amaçlar
Daha iyi bağ kaybı yönetimi kapsamında Android 16, uygulamalara bağ kaybı ve şifreleme değişiklikleri hakkında daha fazla bilgi sağlamak için 2 yeni intent de sunar.
Android 16'yı hedefleyen uygulamalar artık:
- Uzaktan bağ kaybı algılandığında
ACTION_KEY_MISSINGintent'i alır. Bu sayede daha bilgilendirici kullanıcı geri bildirimleri sağlayabilir ve uygun işlemleri yapabilirler. - Bağlantının şifreleme durumu değiştiğinde bir
ACTION_ENCRYPTION_CHANGEintent'i alın. Şifreleme durumu değişikliği, şifreleme algoritması değişikliği ve şifreleme anahtarı boyutu değişikliği buna dahildir. Uygulamalar, daha sonraACTION_ENCRYPTION_CHANGEintent'i aldıktan sonra bağlantı başarıyla şifrelenirse bağın geri yüklendiğini dikkate almalıdır.
Farklı OEM uygulamalarında uyum sağlama
Android 16 bu yeni intent'leri kullanıma sunsa da bunların uygulanması ve yayınlanması farklı cihaz üreticilerine (OEM'ler) göre değişiklik gösterebilir. Uygulamanızın tüm cihazlarda tutarlı ve güvenilir bir deneyim sunmasını sağlamak için geliştiricilerin, bağlantı kaybı işlemelerini bu olası varyasyonlara sorunsuz bir şekilde uyum sağlayacak şekilde tasarlamaları gerekir.
Aşağıdaki uygulama davranışlarını öneririz:
ACTION_KEY_MISSINGintent'i yayınlanırsa:ACL (Asenkron Bağlantısız) bağlantısının bağlantısı sistem tarafından kesilir ancak cihazın bağ bilgileri saklanır (burada açıklandığı gibi).
Uygulamanız, bağlantı kaybı algılama için birincil sinyal olarak bu intent'i kullanmalı ve cihazı unutma veya yeniden eşleme işlemini başlatmadan önce kullanıcıyı uzak cihazın kapsama alanında olduğunu onaylamasına yönlendirmelidir.
Bir cihaz
ACTION_KEY_MISSINGalındıktan sonra bağlantısını keserse uygulamanız, cihaz artık sistemle bağlı olmayabileceğinden yeniden bağlantı kurarken dikkatli olmalıdır.ACTION_KEY_MISSINGintent'i yayınlanmıyorsa:ACL bağlantısı bağlı kalır ve Android 15'teki davranışla aynı şekilde cihazın bağ bilgileri sistem tarafından kaldırılır.
Bu senaryoda, uygulamanız, bağ kaybı etkinliklerini algılayıp yönetmek için önceki Android sürümlerindeki mevcut bağ kaybı işleme mekanizmalarını kullanmaya devam etmelidir.
Bluetooth eşlemesini kaldırmanın yeni yolu
Android 16'yı hedefleyen tüm uygulamalar artık CompanionDeviceManager'teki herkese açık bir API'yi kullanarak Bluetooth cihazlarının eşlemesini kaldırabilir. Bir tamamlayıcı cihaz CDM ilişkisi olarak yönetiliyorsa uygulama, ilişkili cihazdaki yeni removeBond(int) API'yi kullanarak Bluetooth bağını kaldırmayı tetikleyebilir. Uygulama, Bluetooth cihaz yayın etkinliğini dinleyerek ACTION_BOND_STATE_CHANGED bağ durumu değişikliklerini izleyebilir.
Güvenlik
Android 16 (API düzeyi 36) aşağıdaki güvenlik değişikliklerini içerir.
MediaStore sürüm kilitleme
Android 16 veya sonraki sürümleri hedefleyen uygulamalarda MediaStore#getVersion() artık her uygulamaya özgü olacak. Bu sayede, kötüye kullanımı ve parmak izi teknikleri için kullanımını önlemek amacıyla sürüm dizesinden tanımlayıcı özellikler kaldırılır. Uygulamalar bu sürümün biçimiyle ilgili herhangi bir varsayıma kapılmamalıdır. Uygulamalar, bu API'yi kullanırken sürüm değişikliklerini zaten ele almalıdır. Geliştirici, bu API'nin amaçlanan kapsamının dışında ek bilgiler elde etmeye çalışmadığı sürece çoğu durumda mevcut davranışlarını değiştirmeleri gerekmez.
Daha güvenli intent'ler
Daha Güvenli Amaçlar özelliği, Android'in amaç çözümleme mekanizmasının güvenliğini artırmak için tasarlanmış çok aşamalı bir güvenlik girişimidir. Amaç, niyet işleme sırasında kontroller ekleyerek ve belirli ölçütleri karşılamayan niyetleri filtreleyerek uygulamaları kötü amaçlı işlemlerden korumaktır.
Android 15'te gönderen uygulamaya odaklanan bu özellik, Android 16'da kontrolü alan uygulamaya kaydırarak geliştiricilerin uygulama manifestlerini kullanarak katı amaç çözümlemeyi etkinleştirmesine olanak tanır.
İki önemli değişiklik uygulanıyor:
Belirgin Intent'ler Hedef Bileşenin Intent Filtresiyle Eşleşmelidir: Bir intent bir bileşeni açıkça hedefliyorsa bu bileşenin intent filtresiyle eşleşmelidir.
İşlem içermeyen Intent'ler herhangi bir Intent Filtresiyle eşleşemez: İşlemi belirtilmemiş Intent'ler herhangi bir Intent filtresiyle çözümlenmemelidir.
Bu değişiklikler yalnızca birden fazla uygulamanın söz konusu olduğu durumlarda geçerlidir ve tek bir uygulamadaki amaç işleme özelliğini etkilemez.
Etki
Etkinleştirme özelliği, geliştiricilerin bu özelliğin geçerli olması için uygulama manifestlerinde açıkça etkinleştirmesi gerektiği anlamına gelir. Bu nedenle, özelliğin etkisi yalnızca geliştiricileri aşağıdaki koşulları karşılayan uygulamalarla sınırlı olacaktır:
- Daha Güvenli Amaçlar özelliği ve avantajları hakkında bilgi sahibi olmalıdır.
- Uygulamalarına daha katı amaç işleme uygulamalarını dahil etmeyi aktif olarak seçmelidir.
Bu etkinleştirme yaklaşımı, mevcut daha az güvenli amaç çözümleme davranışına bağlı olabilecek mevcut uygulamaların bozulma riskini en aza indirir.
Android 16'daki ilk etkisi sınırlı olsa da Safer Intents girişimi, gelecekteki Android sürümlerinde daha geniş bir etki yaratacak bir yol haritasına sahiptir. Nihayetinde katı amaç çözümlemeyi varsayılan davranış haline getirmek planlanmaktadır.
Daha Güvenli Amaçlar özelliği, kötü amaçlı uygulamaların amaç çözümleme mekanizmasındaki güvenlik açıklarından yararlanmasını zorlaştırarak Android ekosisteminin güvenliğini önemli ölçüde artırabilir.
Ancak mevcut uygulamalarla ilgili olası uyumluluk sorunlarını gidermek için devre dışı bırakma ve zorunlu yaptırım geçişi dikkatli bir şekilde yönetilmelidir.
Uygulama
Geliştiricilerin, uygulama manifestlerinde intentMatchingFlags özelliğini kullanarak daha katı amaç eşleşmesini açıkça etkinleştirmesi gerekir.
Özelliğin uygulamanın tamamı için etkinleştirildiği ancak alıcıda devre dışı bırakıldığı/devre dışı bırakma seçeneğinin kullanıldığı bir örneği aşağıda bulabilirsiniz:
<application android:intentMatchingFlags="enforceIntentFilter">
<receiver android:name=".MyBroadcastReceiver" android:exported="true" android:intentMatchingFlags="none">
<intent-filter>
<action android:name="com.example.MY_CUSTOM_ACTION" />
</intent-filter>
<intent-filter>
<action android:name="com.example.MY_ANOTHER_CUSTOM_ACTION" />
</intent-filter>
</receiver>
</application>
Desteklenen işaretler hakkında daha fazla bilgi:
| İşaret Adı | Açıklama |
|---|---|
| enforceIntentFilter | Gelen intent'ler için daha katı eşleşme uygular. |
| yok | Gelen amaçlar için tüm özel eşleşme kurallarını devre dışı bırakır. Birden fazla işaret belirtilirken çakışan değerler, "none" işaretine öncelik verilerek çözülür. |
| allowNullAction | Eşleşme kurallarını gevşeterek işlem içermeyen niyetlerin eşleşmesine izin verir. Belirli bir davranış elde etmek için "enforceIntentFilter" ile birlikte kullanılacak bu işaret |
Test ve Hata Ayıklama
Yaptırım etkin olduğunda, niyet çağıran niyeti düzgün şekilde doldurmuşsa uygulamalar doğru şekilde çalışır.
Ancak engellenen amaçlar, "Intent does not match component's intent filter:" ve "Access blocked:" gibi uyarı günlüğü mesajlarını "PackageManager." etiketiyle tetikler."Intent does not match component's intent filter:" Bu, uygulamayı etkileyebilecek olası bir soruna işaret eder ve dikkat gerektirir.
Logcat filtresi:
tag=:PackageManager & (message:"Intent does not match component's intent filter:" | message: "Access blocked:")
GPU sistem çağrısı filtreleme
为了加固 Mali GPU 表面,在正式版 build 中,已弃用或仅用于 GPU 开发的 Mali GPU IOCTL 已被屏蔽。此外,用于 GPU 性能分析的 IOCTL 已限制为 shell 进程或可调试的应用。如需详细了解平台级政策,请参阅 SAC 更新。
此变化发生在使用 Mali GPU 的 Pixel 设备(Pixel 6-9)上。Arm 已在其 r54p2 版本的 Documentation/ioctl-categories.rst 中提供了 IOCTL 的官方分类。此列表将在未来的驱动程序版本中继续维护。
此项变更不会影响受支持的图形 API(包括 Vulkan 和 OpenGL),预计也不会影响开发者或现有应用。 Streamline Performance Analyzer 和 Android GPU 检查器等 GPU 性能剖析工具不会受到影响。
测试
如果您看到类似如下所示的 SELinux 拒绝,则说明您的应用可能受到了此变更的影响:
06-30 10:47:18.617 20360 20360 W roidJUnitRunner: type=1400 audit(0.0:85): avc: denied { ioctl }
for path="/dev/mali0" dev="tmpfs" ino=1188 ioctlcmd=0x8023
scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:gpu_device:s0 tclass=chr_file
permissive=0 app=com.google.android.selinux.pts
如果您的应用需要使用被屏蔽的 IOCTL,请提交 bug 并将其分配给 android-partner-security@google.com。
常见问题解答
此政策变更是否适用于所有原始设备制造商 (OEM)? 此变更将采用选择启用模式,但任何想要使用此强化方法的原始设备制造商 (OEM) 都可以使用。如需了解如何实现此变更,请参阅实现文档。
是否必须在 OEM 代码库中进行更改才能实现此功能,还是默认随新的 AOSP 版本提供? 平台级变更将默认随新的 AOSP 版本一起发布。如果供应商想要应用此变更,可以在其代码库中选择启用此变更。
SoC 是否负责使 IOCTL 列表保持最新状态?例如,如果我的设备使用 ARM Mali GPU,我是否需要就任何更改与 ARM 联系? 各个 SoC 必须在驱动程序发布后根据设备更新其 IOCTL 列表。 例如,ARM 会在驱动程序更新时更新其已发布的 IOCTL 列表。 不过,OEM 应确保在 SEPolicy 中纳入这些更新,并根据需要将任何选定的自定义 IOCTL 添加到列表中。
此变更是否会自动应用于所有在售 Pixel 设备,还是需要用户执行操作来切换某些设置才能应用此变更? 此变更适用于所有使用 Mali GPU 的 Pixel 在售设备(Pixel 6-9)。用户无需采取任何行动即可应用此变更。
使用此政策会影响内核驱动程序的性能吗? 我们使用 GFXBench 在 Mali GPU 上测试了此政策,未发现 GPU 性能有任何可衡量的变化。
IOCTL 列表是否需要与当前的用户空间和内核驱动程序版本保持一致? 是的,允许的 IOCTL 列表必须与用户空间和内核驱动程序支持的 IOCTL 同步。如果用户空间或内核驱动程序中的 IOCTL 发生更新,则必须更新 SEPolicy IOCTL 列表以保持一致。
ARM 已将 IOCTL 分类为“受限”/“检测”,但我们希望在生产用例中使用其中一些,并拒绝其他 IOCTL。 各个 OEM/SoC 负责根据其用户空间 Mali 库的配置来决定如何对其使用的 IOCTL 进行分类。ARM 的列表可用于帮助确定这些值,但每个 OEM/SoC 的使用情形可能有所不同。
Gizlilik
Android 16 (API düzeyi 36) aşağıdaki gizlilik değişikliklerini içerir.
Yerel Ağ İzni
LAN'daki cihazlara, INTERNET iznine sahip tüm uygulamalar erişebilir.
Bu, uygulamaların yerel cihazlara bağlanmasını kolaylaştırır ancak kullanıcının parmak izini oluşturma ve konum için proxy olma gibi gizlilikle ilgili sonuçları da vardır.
Yerel Ağ Korumaları projesi, yerel ağa erişimi yeni bir çalışma zamanı izniyle sınırlayarak kullanıcının gizliliğini korumayı amaçlar.
Yayın planı
Bu değişiklik, sırasıyla 25Q2 ve 26Q2 olmak üzere iki sürüm arasında uygulanacaktır. Geliştiricilerin 25Q2 için bu yönergelere uyması ve geri bildirim paylaşması zorunludur. Çünkü bu korumalar daha sonraki bir Android sürümünde zorunlu kılınacaktır. Ayrıca, aşağıdaki yönergeleri kullanarak örtülü yerel ağ erişimine bağlı senaryoları güncellemeleri ve kullanıcıların yeni izni reddetmesine ve iptal etmesine hazırlanmaları gerekir.
Etki
LNP, şu anki aşamada etkinleştirilmesi gereken bir özelliktir. Bu nedenle, yalnızca etkinleştirilen uygulamalar etkilenir. Katılma aşamasının amacı, uygulama geliştiricilerin uygulamalarının hangi bölümlerinin örtülü yerel ağ erişimine bağlı olduğunu anlamalarını sağlamaktır. Böylece, bir sonraki sürümde bu bölümler için izin koruması hazırlayabilirler.
Uygulamalar, kullanıcının yerel ağına aşağıdaki yöntemlerle erişirse etkilenir:
- Yerel ağ adreslerinde (ör. mDNS veya SSDP hizmeti keşif protokolü) ham soketlerin doğrudan veya kitaplık aracılığıyla kullanımı
- Yerel ağa erişen çerçeve düzeyindeki sınıfların (ör. NsdManager) kullanılması
Yerel ağ adresine giden ve gelen trafik için yerel ağ erişimi izni gerekir. Aşağıdaki tabloda sık rastlanan bazı durumlar listelenmiştir:
| Uygulama Düşük Düzeyli Ağ İşlemi | Yerel Ağ İzni Gerekli |
|---|---|
| Giden TCP bağlantısı oluşturma | evet |
| Gelen TCP bağlantılarını kabul etme | evet |
| UDP tek noktaya yayın, çok noktaya yayın veya yayın gönderme | evet |
| Gelen UDP tek yayını, çoklu yayını ve yayını alma | evet |
Bu kısıtlamalar, ağ yığınına derinlemesine uygulanır ve bu nedenle tüm ağ API'leri için geçerlidir. Yerel veya yönetilen kodda oluşturulan soketler, Cronet ve OkHttp gibi ağ kitaplıkları ve bunların üzerinde uygulanan tüm API'ler buna dahildir. Yerel ağdaki hizmetleri (ör. .local soneki olanlar) çözümlemeye çalışmak için yerel ağ izni gerekir.
Yukarıdaki kurallarla ilgili istisnalar:
- Bir cihazın DNS sunucusu yerel ağdaysa bu cihaza veya bu cihazdan gelen trafik (53 numaralı bağlantı noktasında) için yerel ağ erişim izni gerekmez.
- Uygulama içi seçici olarak Çıkış Değiştirici'yi kullanan uygulamaların yerel ağ izinlerine ihtiyacı olmayacak (2025'in 4. çeyreğinde daha fazla bilgi paylaşılacak).
Geliştirici Kılavuzu (Etkinleştirme)
Yerel ağ kısıtlamalarını etkinleştirmek için aşağıdakileri yapın:
- Cihazda 25Q2 Beta 3 veya sonraki bir sürümü yükleyin.
- Test edilecek uygulamayı yükleyin.
adb'de Appcompat işaretini açın/kapatın:
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>Cihazı yeniden başlatın
Artık uygulamanızın yerel ağa erişimi kısıtlanmıştır ve yerel ağa erişme girişimleri soket hatalarına yol açar. Uygulama sürecinizin dışında yerel ağ işlemleri gerçekleştiren API'ler (ör. NsdManager) kullanıyorsanız bu API'ler, kayıt aşamasında etkilenmez.
Erişimi geri yüklemek için uygulamanıza NEARBY_WIFI_DEVICES izni vermeniz gerekir.
- Uygulamanın manifest dosyasında
NEARBY_WIFI_DEVICESiznini beyan ettiğinden emin olun. - Ayarlar > Uygulamalar > [Uygulama Adı] > İzinler > Yakındaki cihazlar > İzin ver'e gidin.
Uygulamanızın yerel ağa erişimi geri yüklenir ve tüm senaryolarınız, uygulamayı kaydetmeden önceki gibi çalışır.
Yerel ağ koruması zorunlu hale getirildikten sonra uygulama ağ trafiği şu şekilde etkilenecek:
| İzin | Giden LAN İsteği | Giden/Gelen İnternet İsteği | Gelen LAN İsteği |
|---|---|---|---|
| Verildi | Works | Works | Works |
| İzin Verilmedi | Başarısızlar | Works | Başarısızlar |
Uygulama uyumluluğu işaretini devre dışı bırakmak için aşağıdaki komutu kullanın.
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Hatalar
Bu kısıtlamalardan kaynaklanan hatalar, yerel ağ adresine gönderme veya gönderme varyantı çağrıldığında arayan sokete döndürülür.
Örnek hatalar:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Yerel Ağ Tanımı
Bu projedeki yerel ağ, kablosuz veya Ethernet gibi yayın yapabilen bir ağ arayüzü kullanan ancak hücresel (WWAN) veya VPN bağlantılarını hariç tutan bir IP ağıdır.
Aşağıdakiler yerel ağ olarak kabul edilir:
IPv4:
- 169.254.0.0/16 // Bağlantı Yerel
- 100.64.0.0/10 // CGNAT
- 10.0.0.0/8 // RFC1918
- 172.16.0.0/12 // RFC1918
- 192.168.0.0/16 // RFC1918
IPv6:
- Bağlantı yereli
- Doğrudan bağlı rotalar
- Thread gibi saplama ağlar
- Birden fazla alt ağ (TBD)
Ayrıca, hem çok noktalı yayın adresleri (224.0.0.0/4, ff00::/8) hem de IPv4 yayın adresi (255.255.255.255) yerel ağ adresleri olarak sınıflandırılır.
Uygulamaya ait fotoğraflar
Android 16 veya sonraki sürümleri çalıştıran cihazlarda SDK 36 veya sonraki sürümleri hedefleyen bir uygulama tarafından fotoğraf ve video izinleri istendiğinde, seçili medyaya erişimi sınırlamayı seçen kullanıcılar, uygulamaya ait tüm fotoğrafları fotoğraf seçicide önceden seçili olarak görür. Kullanıcılar önceden seçilmiş öğelerden herhangi birinin seçimini kaldırabilir. Bu durumda uygulamanın söz konusu fotoğraf ve videolara erişimi iptal edilir.