Önceki sürümlerde olduğu gibi Android 16 da 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 uygulamanızı, geçerli olduğu durumlarda bu davranışları destekleyecek şekilde 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 inceleyin.
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 devre dışı bırakma seçeneği kaldırılıyor
Android 15 enforced edge-to-edge for apps targeting Android 15 (API
level 35), but your app could opt-out by setting
R.attr#windowOptOutEdgeToEdgeEnforcement to true. For apps
targeting Android 16 (API level 36),
R.attr#windowOptOutEdgeToEdgeEnforcement is deprecated and disabled, and your
app can't opt-out of going edge-to-edge.
- If your app targets Android 16 (API level 36) and is running on an
Android 15 device,
R.attr#windowOptOutEdgeToEdgeEnforcementcontinues to work. - If your app targets Android 16 (API level 36) and is running on an
Android 16 device,
R.attr#windowOptOutEdgeToEdgeEnforcementis disabled.
For testing in Android 16, ensure your app supports edge-to-edge and
remove any use of R.attr#windowOptOutEdgeToEdgeEnforcement so that your app
also supports edge-to-edge on an Android 15 device. To support edge-to-edge,
see the Compose and Views guidance.
Tahmin edilen geri gitme için taşıma veya devre dışı bırakma gerekir
For apps targeting Android 16 (API level 36) or higher and running on an
Android 16 or higher device, the predictive back system animations
(back-to-home, cross-task, and cross-activity) are enabled by default.
Additionally, onBackPressed is not called and
KeyEvent.KEYCODE_BACK is not dispatched anymore.
If your app intercepts the back event and you haven't migrated to predictive
back yet, update your app to use supported back navigation APIs, or
temporarily opt out by setting the
android:enableOnBackInvokedCallback attribute to false in the
<application> or <activity> tag of your app's AndroidManifest.xml file.
Elegant Font API'leri kullanımdan kaldırıldı ve devre dışı bırakıldı
Apps targeting Android 15 (API level 35) have the
elegantTextHeight
TextView attribute set to true by
default, replacing the compact font with one that is much more readable. You
could override this by setting the elegantTextHeight attribute to false.
Android 16 deprecates the
elegantTextHeight attribute,
and the attribute will be ignored once your app targets Android 16. The "UI
fonts" controlled by these APIs are being discontinued, so you should adapt any
layouts to ensure consistent and future proof text rendering in Arabic, Lao,
Myanmar, Tamil, Gujarati, Kannada, Malayalam, Odia, Telugu or Thai.
elegantTextHeight behavior for apps targeting Android
14 (API level 34) and lower, or for apps targeting Android 15 (API level 35)
that overrode the default by setting the elegantTextHeight
attribute to false.
elegantTextHeight behavior for apps targeting Android
16 (API level 36), or for apps targeting Android 15 (API level 35) that didn't
override the default by setting the elegantTextHeight attribute
to false.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örüntülendiğinde 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ırılabilirliği kısıtlama 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 yön, yeniden boyutlandırılabilirlik ve en-boy oranı kısıtlamaları, en küçük genişliği >= 600 dp olan ekranlarda 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ı kaplar ve dikey bantlar 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ırılabilirlik 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) 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ı yeniden boyutlandırma konusunda 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. Tam olarak hazır olmayan her uygulama, kapsam dışında kalmayı seçerek bu davranışı geçici olarak geçersiz kılabilir. Bu durumda, uyumluluk moduna yerleştirilme davranışı geri döner.
İstisnalar
Android 16'daki yön, yeniden boyutlandırılabilirlik 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ğin kapsamı dışında kalmayı seçmek için PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY manifest özelliğini tanımlayın:
<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 gerekli olduğu 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ında 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
All apps targeting Android 16 are now able to unpair bluetooth devices using a
public API in CompanionDeviceManager. If a companion device is
being managed as a CDM association, then the app can trigger
bluetooth bond removal by using the new removeBond(int) API
on the associated device. The app can monitor the bond state changes by
listening to the bluetooth device broadcast event
ACTION_BOND_STATE_CHANGED.
Güvenlik
Android 16 (API düzeyi 36) aşağıdaki güvenlik değişikliklerini içerir.
MediaStore sürüm kilitleme
For apps targeting Android 16 or higher, MediaStore#getVersion() will now
be unique to each app. This eliminates identifying properties from the version
string to prevent abuse and usage for fingerprinting techniques. Apps shouldn't
make any assumptions around the format of this version. Apps should already
handle version changes when using this API and in most cases shouldn't need to
change their current behavior, unless the developer has attempted to infer
additional information that is beyond the intended scope of this API.
Daha güvenli amaçlar
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 bu özellik, gönderen uygulamaya odaklanıyordu. Android 16'da ise kontrol, alan uygulamaya kaydırılıyor. Böylece geliştiriciler, uygulama manifestlerini kullanarak katı amaç çözümlemeyi etkinleştirebiliyor.
İ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 eşleşmemelidir.
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ısınız.
- Uygulamalarına daha katı amaç işleme uygulamalarını dahil etmeyi etkin bir şekilde 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ırma potansiyeline sahiptir.
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ştirmeleri 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. Bu işaret, belirli bir davranış elde etmek için "enforceIntentFilter" ile birlikte kullanılır. |
Test ve Hata Ayıklama
Yaptırım etkin olduğunda, niyet çağrısı yapan taraf 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ük mesajlarını "PackageManager." etiketiyle tetikler. Bu durum, 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 yüzeyini sağlamlaştırmak için kullanımdan kaldırılan veya yalnızca GPU geliştirmesi için tasarlanan Mali GPU IOCTL'leri üretim derlemelerinde engellenmiştir. Ayrıca, GPU profil oluşturma için kullanılan IOCTL'ler kabuk işlemi veya hata ayıklanabilir uygulamalarla sınırlandırılmıştır. Platform düzeyindeki politika hakkında daha fazla bilgi için SAC güncellemesine bakın.
Bu değişiklik, Mali GPU'yu kullanan Pixel cihazlarda (Pixel 6-9) gerçekleşir. Arm, r54p2 sürümündeki Documentation/ioctl-categories.rst dosyasında IOCTL'lerinin resmi sınıflandırmasını sağlamıştır. Bu liste, gelecekteki sürücü sürümlerinde güncellenmeye devam edecektir.
Bu değişiklik, desteklenen grafik API'lerini (Vulkan ve OpenGL dahil) etkilemez ve geliştiricileri veya mevcut uygulamaları etkilemesi beklenmez. Streamline Performance Analyzer ve Android GPU Inspector gibi GPU profil oluşturma araçları etkilenmez.
Test
Aşağıdakine benzer bir SELinux reddi görüyorsanız uygulamanız bu değişiklikten etkilenmiş olabilir:
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
Uygulamanızın engellenen IOCTL'leri kullanması gerekiyorsa lütfen hata bildirimi gönderin ve bu bildirimi android-partner-security@google.com adresine atayın.
SSS
Bu politika değişikliği tüm OEM'ler için geçerli mi? Bu değişiklik isteğe bağlı olacak ancak bu sağlamlaştırma yöntemini kullanmak isteyen tüm OEM'ler tarafından kullanılabilecek. Değişikliği uygulama talimatlarını uygulama belgelerinde bulabilirsiniz.
Bu özelliği uygulamak için OEM kod tabanında değişiklik yapmak zorunlu mu yoksa varsayılan olarak yeni bir AOSP sürümüyle mi geliyor? Platform düzeyindeki değişiklik, varsayılan olarak yeni bir AOSP sürümüyle birlikte gelir. Sağlayıcılar, bu değişikliği uygulamak isterlerse kod tabanlarında etkinleştirebilirler.
IOCTL listesinin güncel tutulmasından SoC'ler mi sorumludur? Örneğin, cihazım ARM Mali GPU kullanıyorsa değişiklikler için ARM ile iletişime geçmem gerekir mi? Her SoC, sürücü yayınlandıktan sonra IOCTL listelerini cihaz başına güncellemelidir. Örneğin, ARM, sürücü güncellemesi yaptığında kendisine ait yayınlanmış IOCTL listesini günceller. Ancak OEM'ler, güncellemeleri SEPolicy'lerine dahil ettiklerinden ve gerektiğinde seçilen özel IOCTL'leri listelere eklediklerinden emin olmalıdır.
Bu değişiklik, piyasada bulunan tüm Pixel cihazlara otomatik olarak mı uygulanır yoksa kullanıcının bu değişikliği uygulamak için bir ayarı etkinleştirmesi mi gerekir? Bu değişiklik, Mali GPU'yu kullanan tüm Pixel cihazlar (Pixel 6-9) için geçerlidir. Bu değişikliğin uygulanması için kullanıcı işlemi gerekmez.
Bu politikanın kullanılması çekirdek sürücüsünün performansını etkiler mi? Bu politika, GFXBench kullanılarak Mali GPU'da test edilmiş ve GPU performansında ölçülebilir bir değişiklik gözlemlenmemiştir.
IOCTL listesinin mevcut kullanıcı alanı ve çekirdek sürücü sürümleriyle uyumlu olması gerekli mi? Evet, izin verilen IOCTL'lerin listesi hem kullanıcı alanı hem de çekirdek sürücüleri tarafından desteklenen IOCTL'lerle senkronize edilmelidir. Kullanıcı alanındaki veya çekirdek sürücüsündeki IOCTL'ler güncellenirse SEPolicy IOCTL listesi de eşleşecek şekilde güncellenmelidir.
ARM, IOCTL'leri "kısıtlanmış" / "enstrümantasyon" olarak sınıflandırdı ancak bazılarını üretim kullanım alanlarında kullanmak ve/veya diğerlerini reddetmek istiyoruz. Kullanıcı alanı Mali kitaplıklarının yapılandırmasına bağlı olarak, kullandıkları IOCTL'leri nasıl sınıflandıracaklarına karar vermek OEM/SoC'lerin sorumluluğundadır. Bu konuda karar vermenize yardımcı olması için ARM'nin listesini kullanabilirsiniz ancak her OEM/SoC'nin kullanım alanı farklı olabilir.
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 sayede uygulamalar yerel cihazlara kolayca bağlanabilir 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ında istenen izinle 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 dağıtılacaktı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ılım 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 şu yöntemlerle erişirse etkilenir:
- Yerel ağ adreslerinde (ör. mDNS veya SSDP hizmeti keşfi 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 karşılaşılan 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 yayını, çoklu yayını veya yayını gönderme | evet |
| Gelen bir UDP tek yayını, çoklu yayını veya 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 sunucuya veya bu sunucudan gelen trafik (53 numaralı bağlantı noktasında) için yerel ağ erişimi 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 Yönergeleri (Etkinleştirme)
Yerel ağ kısıtlamalarını etkinleştirmek için aşağıdakileri yapın:
- Cihazı 25Q2 Beta 3 veya sonraki sürümlerin yüklü olduğu bir derlemeye yükleyin.
- Test edilecek uygulamayı yükleyin.
adb'de Appcompat işaretini açın veya 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 kılındığında 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 kapatmak 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ı yerel
- Doğrudan bağlı rotalar
- Thread gibi saplama ağlar
- Birden fazla alt ağ (henüz belli değil)
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
When prompted for photo and video permissions by an app targeting SDK 36 or higher on devices running Android 16 or higher, users who choose to limit access to selected media will see any photos owned by the app pre-selected in the photo picker. Users can deselect any of these pre-selected items, which will revoke the app's access to those photos and videos.