Seitengrößen von 16 KB werden unterstützt

In der Vergangenheit wurden bei Android nur Seiten mit einer Größe von 4 KB unterstützt. Dadurch wurde die Systemspeicherleistung für die durchschnittliche Gesamtarbeitsspeichergröße von Android-Geräten optimiert. Ab Android 15 werden Geräte mit einer Seitengröße von 16 KB (16 KB-Geräte) unterstützt.

Da Gerätehersteller auch weiterhin Geräte mit größerem physischem Arbeitsspeicher (RAM) entwickeln, werden viele dieser Geräte wahrscheinlich mit Seitengrößen von 16 KB (und schließlich auch mit größeren Seiten) konfiguriert, um die Geräteleistung zu optimieren. Wenn Sie die Unterstützung für 16-KB-Geräte hinzufügen, kann Ihre App auf diesen Geräten ausgeführt werden und Ihre App profitiert von den damit verbundenen Leistungsverbesserungen. Um Ihnen dabei zu helfen, haben wir Ihnen Anleitungen dazu zusammengestellt, wie Sie prüfen, ob Ihre App betroffen ist, wie Sie Ihre Anwendung neu erstellen (falls zutreffend) und wie Sie Ihre App in einer 16 KB-Umgebung mit Emulatoren und physischen Geräten testen.

Vorteile und Leistungssteigerungen

Geräte, die mit einer Seitengröße von 16 KB konfiguriert wurden, benötigen im Durchschnitt etwas mehr Arbeitsspeicher, erzielen aber auch verschiedene Leistungsverbesserungen für das System und die Anwendungen:

  • Kürzere App-Startzeiten bei Speicherauslastung – im Durchschnitt um 3,16 % niedriger, mit größeren Verbesserungen (bis zu 30%) für einige getestete Apps
  • Geringerer Stromverbrauch beim Start der App: durchschnittlich 4,56% weniger
  • Schnellerer Start der Kamera: 4,48% schnellere Heißstarts im Durchschnitt und 6,60% schnellere Kaltstarts im Durchschnitt
  • Verbesserte Systemstartzeit: durchschnittlich um 1,5% (ungefähr 0,8 Sekunden) verbessert

Diese Verbesserungen basieren auf unseren ersten Tests und die Ergebnisse auf tatsächlichen Geräten werden wahrscheinlich abweichen. Im Verlauf der Tests werden wir zusätzliche Analysen möglicher Vorteile für Apps bereitstellen.

Prüfen, ob Ihre App betroffen ist

Wenn Ihre App nativen Code verwendet, sollten Sie sie neu erstellen, sodass sie 16-KB-Geräte unterstützt. Wenn Sie sich nicht sicher sind, ob Ihre App nativen Code verwendet, können Sie mithilfe des APK Analyzer ermitteln, ob nativer Code vorhanden ist.

Wenn Ihre App nur Code verwendet, der in der Programmiersprache Java oder in Kotlin geschrieben ist (einschließlich aller Bibliotheken oder SDKs), unterstützt sie bereits 16-KB-Geräte. Trotzdem empfehlen wir Ihnen, Ihre Anwendung in einer 16 KB-Umgebung zu testen, um sicherzustellen, dass es keine unerwarteten Regressionen beim Verhalten der Anwendung gibt.

Verwendet Ihre App nativen Code?

Ihre App verwendet nativen Code, wenn einer der folgenden Punkte zutrifft:

  • Ihre App verwendet beliebigen (nativen) C/C++ Code. Wenn in deiner App das Android NDK verwendet wird, verwendet sie nativen Code.
  • Ihre App ist mit nativen Bibliotheken oder Abhängigkeiten von Drittanbietern verknüpft, in denen sie verwendet werden.
  • Ihre App wurde von einem Drittanbieter-App-Builder erstellt, der native Bibliotheken auf dem Gerät verwendet.

Native Bibliotheken mit APK Analyzer identifizieren

APK Analyzer ist ein Tool, mit dem Sie verschiedene Aspekte eines erstellten APKs bewerten können. So finden Sie heraus, ob Ihre App nativen Code oder Bibliotheken verwendet:

  1. Öffne Android Studio, klicke auf Datei > Öffnen und wähle ein Projekt aus.
  2. Klicken Sie in der Menüleiste auf Build > APK analysieren....

    Menüoption zum Starten des APK Analyzers

  3. Wählen Sie das APK aus, das Sie analysieren möchten.

  4. Sehen Sie im Ordner lib nach, in dem Dateien mit gemeinsam genutzten Objekten (.so) gehostet werden, falls vorhanden. Wenn gemeinsam genutzte Objektdateien vorhanden sind, verwendet Ihre App nativen Code. Wenn keine gemeinsam genutzten Objektdateien oder kein Ordner lib vorhanden ist, verwendet Ihre Anwendung keinen nativen Code.

    APK Analyzer-Ansicht, die zeigt, dass gemeinsam genutzte Objektdateien vorhanden sind

Apps mit Unterstützung für 16-KB-Geräte erstellen

Damit Geräte mit 16 KB unterstützt werden, sollten für Apps, die nativen Code verwenden, die in den folgenden Abschnitten beschriebenen Schritte ausgeführt werden.

Paketerstellung geteilter Bibliotheken aktualisieren

Wir empfehlen ein Upgrade auf AGP 8.3 oder höher und die Verwendung unkomprimierter gemeinsam genutzter Bibliotheken.

AGP-Version 8.3 oder höher

Auf Geräten mit 16 KB sind Apps erforderlich, die mit unkomprimierten gemeinsam genutzten Bibliotheken ausgeliefert werden, damit sie an einer 16 KB großen, an einem Zip- ausgerichteten Grenze ausgerichtet werden können. Dazu müssen Sie ein Upgrade auf Version 8.3 oder höher des Android-Gradle-Plug-ins (AGP) ausführen. Weitere Informationen zum Upgrade finden Sie im Abschnitt „Upgrade Assistant“ für das Android-Gradle-Plug-in.

AGP 8.2 oder niedriger

Wenn ein Upgrade von AGP nicht auf Version 8.3 oder höher möglich ist, können Sie stattdessen auf komprimierte gemeinsam genutzte Bibliotheken umstellen. Aktualisieren Sie Ihre Gradle-Konfiguration, damit Gradle Ihre gemeinsam genutzten Bibliotheken beim Erstellen eines App-Pakets komprimiert. So lassen sich Probleme bei der Installation von Apps mit nicht ausgerichteten gemeinsam genutzten Bibliotheken vermeiden.

Cool

Fügen Sie der Datei build.gradle die folgende Option hinzu:

android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging true
      }
  }
}

Kotlin

Fügen Sie der Datei build.gradle.kts die folgende Option hinzu:

android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging = true
      }
  }
}

App mit 16-KB-ELF-Ausrichtung kompilieren

Bei Geräten mit 16 KB müssen die ELF-Segmente der gemeinsam genutzten Bibliotheken richtig mit einer 16-KB-ELF-Ausrichtung ausgerichtet werden, damit Ihre App ausgeführt werden kann.

Wenn du deine App mit einer 16-KB-ELF-Ausrichtung kompilieren möchtest, musst du abhängig von der verwendeten Android-NDK-Version die Schritte in einem der folgenden Abschnitte ausführen.

Android NDK r26 und niedriger

Damit Sie die Kompilierung von 16 KB ausgerichteten gemeinsam genutzten Bibliotheken mit Android NDK Version r26 oder niedriger unterstützen, müssen Sie Ihre ndk-build- oder cmake-Konfiguration so aktualisieren:

NK-Build

Aktualisieren Sie Ihre Android.mk, um eine 16-KB-ELF-Ausrichtung zu aktivieren:

LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"

CMake

Aktualisieren Sie Ihre CMakeLists.txt, um eine 16-KB-ELF-Ausrichtung zu aktivieren:

target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")

Android NDK r27 und höher

Damit Sie die Kompilierung von 16 KB ausgerichteten gemeinsam genutzten Bibliotheken mit Android NDK Version r27 und höher unterstützen, müssen Sie Ihre ndk-build-, build.gradle-, build.gradle.kts- oder Verknüpfungs-Flags so aktualisieren:

NK-Build

In deinem Application.mk:

APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true

Cool

Legen Sie in der Datei build.gradle das Argument -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON fest:

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

Legen Sie in der Datei build.gradle.kts das Argument -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON fest:

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")
      }
    }
  }
}

Andere Build-Systeme

Geben Sie die folgenden Verknüpfungs-Flags an:

-Wl,-z,max-page-size=16384

Nach Codeinstanzen suchen, die auf bestimmte Seitengrößen verweisen

Selbst wenn Ihre App auf 16 KB ausgerichtet ist, können Fehler auftreten, wenn Stellen in Ihrem Code davon ausgehen, dass ein Gerät eine bestimmte Seitengröße verwendet. Um dies zu vermeiden, führen Sie die folgenden Schritte aus:

  1. Entfernen Sie alle hartcodierten Abhängigkeiten, die auf die PAGE_SIZE-Konstante verweisen, oder entfernen Sie alle Instanzen in Ihrer Codelogik, die davon ausgehen, dass die Seitengröße eines Geräts 4 KB (4096) beträgt.

    Verwenden Sie stattdessen getpagesize() oder sysconf(_SC_PAGESIZE).

  2. Suchen Sie nach der Verwendung von mmap() und anderen APIs, die auf Seiten ausgerichtete Argumente erfordern, und ersetzen Sie sie bei Bedarf durch Alternativen.

App in einer 16 KB-Umgebung testen

Nachdem Sie Ihre App mit Unterstützung für 16-KB-Geräte erstellt haben, sollten Sie sie in einer 16-KB-Umgebung testen, um zu sehen, ob es zu Regressionen kommt. Richten Sie dazu eine der folgenden Testumgebungen ein und testen Sie Ihre Anwendung gründlich. Konzentrieren Sie sich dabei auf alle Bereiche, die von der Änderung von Codeinstanzen, die auf bestimmte Seitengrößen verweisen, betroffen sein könnten.

Android-Emulator mit einem 16 KB-basierten Android 15-Systemimage einrichten

So richten Sie mit dem Android-Emulator eine 16-KB-Umgebung ein:

  1. 16 KB-basierte Android 15-Emulator-System-Images sind mit Android Studio Jellyfish 2023.3.1 oder höher kompatibel. Damit du Android 15 optimal nutzen kannst, solltest du aber die aktuelle Vorabversion von Android Studio herunterladen.

    Denken Sie daran, dass Sie Ihre vorhandene Version von Android Studio installiert lassen können, da Sie mehrere Versionen nebeneinander installieren können.

  2. Klicken Sie in Android Studio auf Tools > SDK Manager.

  3. Klicken Sie auf dem Tab SDK Platforms (SDK-Plattformen) das Kästchen Show Package Details (Paketdetails anzeigen) an, maximieren Sie den Abschnitt Android VanillaIceCream Preview (Vorschau von Android VanillaIceCream) und wählen Sie abhängig von den virtuellen Geräten, die Sie erstellen möchten, eines oder beide der folgenden Emulator-System-Images aus:

    • Google APIs Experimentelle 16k-Seitengröße ARM 64 v8a-Systembild
    • Google APIs Experimentelle 16k Seitengröße Intel x86_64 Atom-System-Image

    16 KB Emulator-System-Images mit dem SDK Manager in Android Studio herunterladen

  4. Klicken Sie auf Übernehmen > OK, um die System-Images herunterzuladen, die Sie ausgewählt haben.

  5. Folgen Sie den Schritten zum Einrichten eines virtuellen Geräts für Android 15. Wenn Sie zur Auswahl eines System-Images aufgefordert werden, wählen Sie das 16 KB-System-Image aus, das Sie heruntergeladen haben. Wenn es nicht automatisch empfohlen wird, finden Sie das 16 KB-Systemimage auf dem Tab Andere Images.

    Sie finden das Emulator-Image mit 16 KB auf dem Tab „Weitere Images“.