Android, geçmişte yalnızca 4 KB bellekli sayfa boyutlarını destekliyordu. Bu sayede, Android cihazların genel olarak sahip olduğu ortalama toplam bellek miktarı açısından sistem belleği performansı optimize edilmiş oluyordu. Android 15'ten itibaren Android, 16 KB'lık sayfa boyutu (16 KB'lık cihazlar) kullanacak şekilde yapılandırılmış cihazları desteklemektedir.
Cihaz üreticileri daha fazla miktarda fiziksel belleğe (RAM) sahip cihazlar geliştirmeye devam ettikçe, cihazın performansını optimize etmek için bu cihazların birçoğu muhtemelen 16 KB'lık (ve sonunda daha büyük) sayfa boyutlarıyla yapılandırılacaktır. 16 KB'lık cihazlar için destek eklenmesi, uygulamanızın bu cihazlarda çalışmasına ve ilişkili performans iyileştirmelerinden yararlanmasına yardımcı olur. Bu konuda size yardımcı olmak için uygulamanızın etkilenip etkilenmediğini kontrol etme, uygulamanızı yeniden oluşturma (geçerliyse) ve hem emülatörler hem de fiziksel cihazlar kullanarak uygulamanızı 16 KB'lık bir ortamda test etme konularında rehberlik sağladık.
Faydalar ve performans kazançları
16 KB sayfa boyutlarıyla yapılandırılan cihazlar ortalama olarak biraz daha fazla bellek kullanır, ancak hem sistem hem de uygulamalar için çeşitli performans iyileştirmeleri elde eder:
- Sistem bellek baskısı altındayken daha düşük uygulama başlatma süreleri: Ortalama %3,16 daha düşük, test ettiğimiz bazı uygulamalar için daha önemli iyileştirmeler (%30'a kadar)
- Uygulama başlatılırken daha az güç tüketimi: Ortalama% 4,56 azalma
- Daha hızlı kamera başlatma: Ortalama% 4,48 daha hızlı çalışır durumda başlatma ve ortalama% 6,60 daha hızlı baştan başlatma
- İyileştirilmiş sistem başlatma süresi: Ortalama %1,5 (yaklaşık 0,8 saniye) iyileştirildi
Bu iyileştirmeler, yaptığımız ilk testlere dayanmaktadır ve gerçek cihazlardaki sonuçlar muhtemelen farklılık gösterecektir. Testlerimize devam ederken, uygulamalar için potansiyel kazançlarla ilgili ek analizler sağlayacağız.
Uygulamanızın etkilenip etkilenmediğini kontrol etme
Uygulamanız herhangi bir yerel kod kullanıyorsa uygulamanızı 16 KB'lık cihazları destekleyecek şekilde yeniden oluşturmanız gerekir. Uygulamanızın yerel kod kullanıp kullanmadığından emin değilseniz yerel kod olup olmadığını belirlemek için APK Analiz Aracı'nı kullanabilirsiniz.
Uygulamanız tüm kitaplıklar veya SDK'lar dahil olmak üzere yalnızca Java programlama dilinde veya Kotlin'de yazılmış kod kullanıyorsa zaten 16 KB'lık cihazları destekliyor demektir. Bununla birlikte, uygulama davranışında beklenmedik regresyonlar olmadığını doğrulamak için uygulamanızı 16 KB'lık bir ortamda test etmenizi öneririz.
Uygulamanız yerel kod kullanıyor mu?
Aşağıdakilerden herhangi biri geçerliyse uygulamanız yerel koddan yararlanır:
- Uygulamanız tüm C/C++ (yerel) kodlarını kullanıyor. Uygulamanız Android NDK kullanıyorsa yerel kod kullanılır.
- Uygulamanız, bunları kullanan üçüncü taraf yerel kitaplıklara veya bağımlılıklara bağlantı veriyor.
- Uygulamanız, cihazda yerel kitaplıklar kullanan bir üçüncü taraf uygulama oluşturucu tarafından oluşturuldu.
APK Analiz Aracı'nı kullanarak yerel kitaplıkları tanımlama
APK Analizcisi, yerleşik bir APK'nın çeşitli yönlerini değerlendirmenize olanak tanıyan bir araçtır. Uygulamanızın yerel kod mu yoksa kitaplık mı kullandığını belirlemek için şu adımları izleyin:
- Android Studio'yu açın, ardından Dosya > Aç'ı tıklayıp bir proje seçin.
Menü çubuğundan Oluştur > APK'yı analiz et... seçeneğini tıklayın.
Analiz etmek istediğiniz APK'yı seçin.
Varsa paylaşılan nesne (
.so
) dosyalarını barındıranlib
klasörüne bakın. Paylaşılan nesne dosyaları varsa uygulamanız yerel kodu kullanır. Paylaşılan nesne dosyası veyalib
klasörü yoksa uygulamanız yerel kod kullanmaz.
Uygulamanızı 16 KB'lık cihazların desteğiyle oluşturun
Yerel kod kullanan uygulamaların, 16 KB cihazları desteklemesi için aşağıdaki bölümlerde özetlenen adımları tamamlaması gerekir.
Paylaşılan kitaplıklarınızın paketini güncelleyin
AGP 8.3 veya daha yeni bir sürüme yükseltmenizi ve sıkıştırılmamış paylaşılan kitaplıkları kullanmanızı öneririz.
AGP 8.3 veya daha sonraki bir sürüm
16 KB'lık cihazlarda, sıkıştırılmamış paylaşılan kitaplıklarla birlikte gönderilen uygulamaların, bunları 16 KB'lık zip hizalaması olan bir sınırda hizalaması gerekir. Bunu yapmak için Android Gradle Plugin (AGP) 8.3 veya sonraki bir sürüme geçmeniz gerekiyor. Yeni sürüme geçirme işlemiyle ilgili ayrıntılar için Android Gradle eklentisi Yükseltme Asistanı bölümüne bakın.
AGP 8.2 veya daha eski bir sürüm
AGP'yi 8.3 veya sonraki bir sürüme yükseltemiyorsanız alternatif yöntem, sıkıştırılmış paylaşılan kitaplıkları kullanmak olabilir. Gradle yapılandırmanızı güncelleyerek Gradle'ın, hizalanmamış paylaşılan kitaplıklarla ilgili uygulama yükleme sorunlarını önlemek için uygulamanızı paketleme sırasında paylaşılan kitaplıklarınızı sıkıştırmasını sağlayın.
Eski
build.gradle
dosyanıza aşağıdaki seçeneği ekleyin:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Kotlin
build.gradle.kts
dosyanıza aşağıdaki seçeneği ekleyin:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
16 KB ELF hizalaması kullanarak uygulamanızı derleyin
16 KB'lık cihazlarda, uygulamanızın çalışması için paylaşılan kitaplıkların ELF segmentlerinin 16 KB ELF hizalaması kullanılarak uygun şekilde hizalanması gerekir.
Uygulamanızı 16 KB ELF hizalamasını kullanarak derlemek için, kullandığınız Android NDK sürümüne bağlı olarak aşağıdaki bölümlerden birindeki adımları tamamlayın.
Android NDK r26 ve önceki sürümler
Android NDK'nın r26 veya önceki sürümleriyle 16 KB'a uyumlu paylaşılan kitaplıkların derlenmesini desteklemek için ndk-build
veya cmake
yapılandırmanızı şu şekilde güncellemeniz gerekir:
ndk-kurum
16 KB ELF hizalamasını etkinleştirmek için Android.mk
öğenizi güncelleyin:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
CMake
16 KB ELF hizalamasını etkinleştirmek için CMakeLists.txt
öğenizi güncelleyin:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
Android NDK r27 ve sonraki sürümler
Android NDK'nın r27 ve sonraki sürümleriyle 16 KB uyumlu paylaşılan kitaplıkların derlenmesini desteklemek için ndk-build
, build.gradle
,
build.gradle.kts
veya bağlayıcı işaretlerinizi aşağıdaki gibi güncellemeniz gerekir:
ndk-kurum
Application.mk
içinde:
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
Eski
build.gradle
dosyanızda, bağımsız değişkeni -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON
olarak ayarlayın:
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
}
}
}
}
Kotlin
build.gradle.kts
dosyanızda, bağımsız değişkeni -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON
olarak ayarlayın:
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments += listOf("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON")
}
}
}
}
Diğer derleme sistemleri
Aşağıdaki bağlayıcı işaretlerini belirtin:
-Wl,-z,max-page-size=16384
Belirli sayfa boyutlarına referans veren kod örneklerini kontrol etme
Uygulamanız 16 KB hizalı olsa bile, kodunuzdaki yerlerde bir cihazın belirli bir sayfa boyutu kullandığı varsayılırsa uygulamanız hatalarla karşılaşabilir. Bunu önlemek için aşağıdaki adımları tamamlayın:
PAGE_SIZE
sabitine referans veren sabit kodlu bağımlılıkları veya kod mantığınızda, cihaz sayfa boyutunun 4 KB (4096
) olduğunu varsayan örnekleri kaldırın.Bunun yerine
getpagesize()
veyasysconf(_SC_PAGESIZE)
kullanın.mmap()
ve sayfayla uyumlu bağımsız değişkenler gerektiren diğer API'lerin kullanımlarını arayın ve gerektiğinde alternatiflerle değiştirin.
Bazı durumlarda, uygulamanızda temel sayfa boyutuna bağlı olmayan pratik bir değer olarak PAGE_SIZE
kullanılıyorsa bu durum, uygulamanızın 16 KB modunda kullanıldığında bozulmasına neden olmaz. Ancak bu değer, MAP_FIXED
olmadan mmap
ile çekirdeğe iletilirse çekirdek, sayfanın tamamını kullanmaya devam eder ve bu da bellek kaybına neden olur. Bu nedenle, NDK r27 ve üzeri sürümlerde 16 KB modu etkinleştirildiğinde PAGE_SIZE
tanımlanmaz.
Uygulamanız PAGE_SIZE
öğesini bu şekilde kullanıyorsa ve bu değeri hiçbir zaman çekirdeğe aktarmazsa PAGE_SIZE
yerine başka amaçlar için kullanıldığını ve gerçek bir bellek sayfasını yansıtmayan yeni bir ada sahip yeni bir değişken oluşturun.
Uygulamanızı 16 KB'lık bir ortamda test edin
16 KB'lık cihazları destekleyecek şekilde uygulamanızı oluşturduktan sonra, regresyon yaşayıp yaşamadığını görmek için uygulamanızı 16 KB'lık bir ortamda test etmeniz gerekir. Bunu yapmak için aşağıdaki test ortamlarından birini oluşturun, ardından belirli sayfa boyutlarına referans veren kod örneklerini değiştirmekten etkilenebilecek alanlara odaklanarak uygulamanızı ayrıntılı bir şekilde test edin.
- Android Emülatör'ü 16 KB tabanlı, Android 15 sistem görüntüsüyle ayarlayın
- ARM64'te 16 KB sayfa boyutuna sahip Mürekkep balığı kullanın
- x86-64 boyutunda 16 KB sayfa boyutuyla Mürekkep balığı simülasyonu
Android Emülatör'ü 16 KB tabanlı, Android 15 sistem görüntüsüyle kurun
Android Emülatör'ü kullanarak 16 KB'lık bir ortam oluşturmak için aşağıdaki adımları izleyin:
16 KB tabanlı Android 15 emülatör sistem görüntüleri, Android Studio Jellyfish | 2023.3.1 veya sonraki sürümlerle uyumludur. Ancak Android 15 Beta ile çalışırken en iyi deneyimi elde etmek için Android Studio'nun en son önizleme sürümünü indirin.
Birden fazla sürümü yan yana yükleyebileceğiniz için mevcut Android Studio sürümünüzü yüklü tutabileceğinizi unutmayın.
Android Studio'da Araçlar > SDK Yöneticisi'ni tıklayın.
SDK Platformları sekmesinde Paket Ayrıntılarını Göster'i işaretleyin, ardından Android VanillaIceCream Önizlemesi bölümünü genişletin ve oluşturmak istediğiniz sanal cihazlara bağlı olarak aşağıdaki emülatör sistem görüntülerinden birini veya ikisini birden seçin:
- Google API'leri Deneysel 16.000 Sayfa Boyutu ARM 64 v8a Sistem Resmi
- Google API'leri Deneysel 16K Sayfa Boyutu Intel x86_64 Atom Sistem Görüntüsü
Seçtiğiniz sistem görüntülerini indirmek için Uygula > Tamam'ı tıklayın.
Android 15 için sanal cihaz ayarlama adımlarını uygulayın ve sistem görüntüsü seçmeniz istendiğinde, indirdiğiniz 16 KB sistem görüntüsünü seçin. Otomatik olarak önerilmiyorsa 16 KB sistem resmini Diğer Resimler sekmesinde bulabilirsiniz.