16 KB Page Size Nedir?
Memory page, işletim sisteminin yönettiği en küçük bellek bloğudur. Android uzun yıllar 4 KB'lık sayfalar kullandı. Android 15 ile birlikte AOSP, 16 KB page size ile yapılandırılmış cihazları desteklemeye başladı ve Google ekosistemi bu yöne taşıyor.
Daha büyük sayfalar bellek yönetimi yükünü azaltır. Google'ın ilk testlerinde öne çıkan sonuçlar:
- Bellek baskısı altında uygulama açılışı: ortalama %3,16 daha hızlı, bazı uygulamalarda %30'a kadar
- Açılış sırasında güç tüketimi: ortalama %4,56 daha düşük
- Kamera açılışı: hot start'ta %4,48, cold start'ta %6,60 daha hızlı
- Sistem açılışı: yaklaşık %8 (ortalama 950 ms civarı) daha hızlı
Bedeli, ortalamada biraz daha fazla bellek kullanımı. Gerçek cihazlarda sonuçlar farklılık gösterebilir.
Uygulamalar Neden Bozuluyor?
Kotlin ve Java kodu page size'la ilgilenmez; native kod ilgilenir. ELF LOAD segmentleri 4 KB'a hizalanmış bir .so kütüphanesi 16 KB cihazda düzgün yüklenemez. Sonuç genellikle açılışta ya da kütüphane ilk yüklendiğinde crash olur. Page size'ı 4096 olarak sabit yazan kod da sorun çıkarabilir.
Google Play Zorunluluğu
Google ilk duyuruda, 1 Kasım 2025'ten itibaren Android 15 (API 35) ve üzerini hedefleyen yeni uygulamaların ve güncellemelerin 16 KB desteği sunması gerektiğini açıkladı. Bu tarih sonradan değişti. Ekim 2026 itibarıyla resmi Android rehberinde şunlar yazıyor:
- Android 15 (API 35) ve üzerini hedefleyen tüm uygulamalar, 64-bit cihazlarda 16 KB sayfaları desteklemeli.
- 1 Şubat 2027'den itibaren 16 KB desteği olmayan güncellemeler Google Play'de yayınlanamayacak.
- O tarihe kadar Play Console, etkilenen sürümlerde uyumluluk uyarısı gösteriyor.
Play'in target API level kuralları zaten yeni uygulama ve güncellemeleri güncel API seviyelerine zorladığı için, native kod içeren ve aktif geliştirilen neredeyse her uygulama bu kapsamda.
Kimler Etkileniyor?
| Proje yapısı | Etkilenir mi? | Yapılacak |
|---|---|---|
| Saf Kotlin/Java, tüm bağımlılıklar saf JVM | Hayır | Yine de 16 KB ortamında test edin |
| NDK ile kendi C/C++ kodunuz | Evet | Güncel NDK ve AGP ile yeniden derleyin |
.so içeren SDK'lar (reklam, analytics, kripto, medya, ML) | Evet | 16 KB uyumlu sürüme güncelleyin |
| React Native | Evet | 0.77 veya üstüne geçin, native modülleri güncelleyin |
| Flutter | Evet | Güncel Flutter sürümü kullanın, native kodlu plugin'leri güncelleyin |
| Unity / Unreal oyunlar | Evet | Engine'in 16 KB rehberini izleyin, engine'i güncelleyin |
Pratikte en sık sorun sizin kodunuz değil, üçüncü parti bir bağımlılığın içindeki prebuilt native kütüphanedir.
Uygulamanızı Nasıl Kontrol Edersiniz?
- APK Analyzer – Android Studio'da Build > Analyze APK ile
libklasörünü açın, Alignment sütunundaki uyarılara bakın. - Lint – Android Studio Lint, 16 KB hizalı olmayan native kütüphaneleri işaretler.
- zipalign – APK'nın ZIP hizalamasını doğrulayın:
zipalign -c -P 16 -v 4 app-release.apk
# Çıktı "Verification successful" ile bitmeli
- ELF hizalaması – Google'ın
check_elf_alignment.shscript'i (Linux/macOS) herarm64-v8akütüphanesi içinALIGNEDveyaUNALIGNEDyazar. Elle kontroldellvm-objdump -p libfoo.soçıktısındaki LOAD segmentlerialign 2**14olmalı;2**13ve altı sorunludur. - App bundle – AAB için
bundletool dump config --bundle=app.aab | grep alignmentçalıştırıpPAGE_ALIGNMENT_16Kdeğerini arayın. - Play Console – App bundle explorer, 16 KB desteği olmayan sürümleri işaretler.
Nasıl Düzeltilir?
Build Araçlarını Güncelleyin
- Android Gradle Plugin 8.5.1 ve üstü, sıkıştırılmamış shared library'leri 16 KB ZIP hizalamasıyla paketler. AGP 8.3–8.5 arasında APK'lar varsayılan olarak hizalıdır, ancak
bundletoolAPK'ları varsayılan olarak zipalign etmez. - NDK r28 ve üstü varsayılan olarak 16 KB hizalı derler.
- NDK r27 ve altında linker flag'lerini kendiniz ekleyin:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
"-Wl,-z,max-page-size=16384"
"-Wl,-z,common-page-size=16384"
)
ndk-build kullanıyorsanız aynı flag'leri LOCAL_LDFLAGS'a ekleyin.
AGP'yi yükseltemiyorsanız native kütüphaneleri sıkıştırılmış olarak paketleyebilirsiniz. Çalışır ama kurulum boyutu büyür:
android {
packaging {
jniLibs { useLegacyPackaging = true }
}
}
Bağımlılıkları ve Kodu Düzeltin
.sodosyası içeren tüm SDK ve plugin'leri güncelleyin; release notlarında 16 KB desteğini arayın.- Uyumlu sürümü olmayan bir SDK varsa sağlayıcıyla iletişime geçin ya da alternatifine geçin.
- Sabit page size değerlerini kaldırın. Gerçek değeri runtime'da
sysconf(_SC_PAGESIZE)veyagetpagesize()ile okuyun. - Yeniden derleyip yukarıdaki kontrolleri tekrar çalıştırın. 16 KB cihazlar için
arm64-v8avex86_64önemlidir, ancak tüm ABI'leri birlikte derleyin.
16 KB Ortamında Test
Emülatör
- Android Studio SDK Manager'dan Android 15 (VanillaIceCream) veya üstü için "Google APIs Experimental 16 KB Page Size" system image'ını (ARM 64 v8a ya da x86_64) kurun.
- Bu image ile bir sanal cihaz oluşturup başlatın.
- Page size'ı doğrulayın:
adb shell getconf PAGE_SIZE
# 16384
Fiziksel Cihaz
Pixel 8 ve 8 Pro'da (Android 15 QPR1 ve üstü) ve bazı yeni cihazlarda geliştirici seçeneklerindeki Boot with 16KB page size ayarı cihazı 16 KB modunda yeniden başlatır. Samsung Remote Test Lab da 16 KB test cihazları sunuyor.
Neyi Test Etmeli?
- Cold start ve native kod yükleyen tüm ekranlar (kamera, video, harita, ML, ödeme)
- Native kütüphaneyi geç yükleyebilen background işler ve push akışları
- Sadece debug değil release build'ler; minification ve paketleme farklıdır