16 KB'lık sayfa boyutlarını destekler

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.

Avantajlar ve performans kazanımları

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 edin

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 birinin geçerli olması halinde uygulamanız yerel koddan yararlanır:

  • Uygulamanız herhangi bir C/C++ (yerel) kodu kullanıyor. Uygulamanız Android NDK kullanıyorsa yerel kod kullanı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 derlendi.

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 veya kitaplıklar kullanıp kullanmadığını belirlemek için şu adımları izleyin:

  1. Android Studio'yu açın, ardından Dosya > Aç'ı tıklayın ve bir proje seçin.
  2. Menü çubuğundan Oluştur > APK'yı analiz et... seçeneğini tıklayın.

    APK Analiz Aracı'nı başlatmak için Studio Build menü seçeneği

  3. Analiz etmek istediğiniz APK'yı seçin.

  4. Varsa paylaşılan nesne (.so) dosyalarını barındıran lib klasörüne bakın. Paylaşılan nesne dosyaları varsa uygulamanız yerel kodu kullanır. Paylaşılan nesne dosyası yoksa veya lib klasörü yoksa uygulamanız yerel kod kullanmaz.

    Paylaşılan nesne dosyalarının mevcut olduğunu gösteren
APK Analiz Aracı görünümü

16 KB'lık cihazlara yönelik destekle uygulamanızı oluşturun

16 KB'lık cihazları desteklemek için yerel kod kullanan uygulamalar aşağıdaki bölümlerde açıklanan adımları tamamlamalıdır.

AGP 8.3 veya sonraki bir sürümüne güncelleme

16 KB boyutundaki cihazlar, sıkıştırılmamış paylaşılan kitaplıklarla birlikte gönderilen uygulamaların, 16 KB'lık zip hizalı bir sınırda hizalanmasını gerektirir. Bunu yapmak için Android Gradle Eklentisi (AGP) 8.3 veya sonraki sürümüne geçmeniz gerekir. 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.

Sıkıştırılmamış paylaşılan kitaplıklar kullanmanızı öneririz. Ancak AGP'yi 8.3 veya sonraki bir sürüme yükseltemiyorsanız, alternatif olarak sıkıştırılmış paylaşılan kitaplıkları kullanmaya geçebilirsiniz. Hizalanmamış paylaşılan kitaplıklarla ilgili uygulama yükleme sorunlarını önlemek için Gradle yapılandırmanızı güncelleyerek uygulamanızı paketlerken paylaşılan kitaplıklarınızı sıkıştırın.

Modern

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ını 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 doğru şekilde hizalanması gerekir.

Uygulamanızı 16 KB ELF hizalaması 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

16 KB uyumlu paylaşılan kitaplıkların Android NDK r26 veya önceki bir sürümle derlenmesini desteklemek için ndk-build veya cmake yapılandırmanızı şu şekilde güncellemeniz gerekir:

ndk-build

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

16 KB uyumlu paylaşılan kitaplıkların Android NDK r27 ve sonraki sürümlerle 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-build

Application.mk içinde:

APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true

Modern

build.gradle dosyanızda -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON bağımsız değişkenini 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 -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON bağımsız değişkenini 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 edin

Uygulamanız 16 KB'a hizalı olsa bile, kodunuzun yerlerinde 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:

  1. PAGE_SIZE sabitine referans veren sabit kodlu bağımlılıkları veya kod mantığınızda, cihazın sayfa boyutunun 4 KB (4096) olduğunu varsayan örnekleri kaldırın.

    Bunun yerine getpagesize() veya sysconf(_SC_PAGESIZE) kullanın.

  2. mmap() ve sayfaya ayarlı bağımsız değişkenler gerektiren diğer API'lerin kullanımlarına bakın ve gerektiğinde alternatiflerle değiştirin.

Uygulamanızı 16 KB'lık bir ortamda test edin

16 KB'lık cihazları destekleyen uygulamanızı oluşturduktan sonra, uygulamanızın herhangi bir 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 kurun ve ardından belirli sayfa boyutlarına referans veren kod örneklerinin değiştirilmesinden etkilenebilecek alanlara odaklanarak uygulamanızı kapsamlı bir şekilde test edin.

Android Emulator'ı 16 KB tabanlı, Android 15 sistem görüntüsüyle kurma

Android Emülatör'ü kullanarak 16 KB'lık bir ortam oluşturmak için aşağıdaki adımları uygulayın:

  1. 16 KB tabanlı, Android 15 emülatör sistem görüntüleri Android Studio Jellyfish | 2023.3.1 veya sonraki sürümler ile uyumludur. Ancak, Android 15 Beta ile çalışırken en iyi deneyimi yaşamak için Android Studio'nun en son önizleme sürümünü indirin.

    Android Studio'nun birden çok sürümünü yan yana yükleyebileceğiniz için mevcut Android Studio sürümünüzü yükleyebileceğinizi unutmayın.

  2. Android Studio'da Araçlar > SDK Yöneticisi'ni tıklayın.

  3. SDK Platformları sekmesinde Android VanillaIceCream Preview bölümünü genişletin ve oluşturmak istediğiniz sanal cihazlara bağlı olarak aşağıdaki emülatör sistem resimlerinden birini veya her ikisini seçin:

    • Google API'leri Deneysel 16k Sayfa Boyutu ARM 64 v8a Sistem Görüntüsü
    • Google API'leri Deneysel 16k Sayfa Boyutu Intel x86_64 Atom Sistem Görüntüsü

    Android Studio'da SDK Yöneticisi'ni kullanarak 16 KB emülatör sistem görüntülerini indirin

  4. Seçtiğiniz sistem görüntülerini indirmek için Uygula > Tamam'ı tıklayın.

  5. Android 15 için sanal cihaz ayarlama adımlarını uygulayın ve bir sistem resmi seçmeniz istendiğinde, indirdiğiniz 16 KB'lık sistem resmini seçin. Otomatik olarak önerilmiyorsa 16 KB sistem resmini Diğer Resimler sekmesinde bulabilirsiniz.

    Diğer Resimler sekmesinde 16 KB boyutundaki emülatör resmini bulun