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 Anwendung verwendet beliebigen (nativen) C-/C++-Code. Wenn Ihre App das Android-NDK verwendet, verwendet sie nativen Code.
- Ihre Anwendung ist mit nativen Bibliotheken oder Abhängigkeiten von Drittanbietern verknüpft, die sie verwenden.
- 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 ermitteln Sie, ob Ihre App nativen Code oder Bibliotheken verwendet:
- Öffnen Sie Android Studio, klicken Sie auf Datei > Öffnen und wählen Sie ein Projekt aus.
Klicken Sie in der Menüleiste auf Build > Analyze (APK).
Wählen Sie das APK aus, das Sie analysieren möchten.
Sehen Sie im Ordner
lib
nach, in dem freigegebene Objektdateien (.so
) gehostet werden, sofern vorhanden. Wenn freigegebene Objektdateien vorhanden sind, verwendet Ihre Anwendung nativen Code. Wenn keine gemeinsam genutzten Objektdateien oder kein Ordnerlib
vorhanden sind, verwendet Ihre Anwendung keinen nativen Code.
App mit Unterstützung für 16-KB-Geräte erstellen
Zur Unterstützung von 16 KB-Geräten sollten Apps, die nativen Code verwenden, die in den folgenden Abschnitten beschriebenen Schritte ausführen.
Auf AGP-Version 8.3 oder höher aktualisieren
Geräte mit 16 KB erfordern Apps, die mit unkomprimierten gemeinsam genutzten Bibliotheken ausgeliefert werden, um sie an einer 16 KB zip-optimierten Grenze auszurichten. Dazu müssen Sie ein Upgrade auf Version 8.3 oder höher des Android Gradle-Plug-ins (AGP) durchführen. Weitere Informationen zum Upgradeprozess finden Sie im Abschnitt Upgrade Assistant für das Android-Gradle-Plug-in.
Wir empfehlen die Verwendung unkomprimierter gemeinsam genutzter Bibliotheken. Wenn Sie jedoch kein Upgrade von AGP auf Version 8.3 oder höher durchführen können, können Sie stattdessen zu komprimierten gemeinsam genutzten Bibliotheken wechseln. Aktualisieren Sie Ihre Gradle-Konfiguration, damit Gradle die gemeinsam genutzten Bibliotheken beim Packen Ihrer App komprimiert, um Probleme bei der App-Installation mit nicht ausgerichteten gemeinsam genutzten Bibliotheken zu vermeiden.
Groovig
Fügen Sie in der Datei build.gradle
die folgende Option hinzu:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Kotlin
Fügen Sie in der Datei build.gradle.kts
die folgende Option hinzu:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
App mit 16 KB ELF-Ausrichtung kompilieren
Bei 16-KB-Geräten müssen die ELF-Segmente der gemeinsam genutzten Bibliothek korrekt mit einer 16-KB-ELF-Ausrichtung ausgerichtet sein, damit Ihre App ausgeführt werden kann.
Wenn Sie Ihre App mit 16 KB ELF-Ausrichtung kompilieren möchten, führen Sie je nach verwendeter Version des verwendeten Android-NDK die Schritte in einem der folgenden Abschnitte aus.
Android NDK r26 und niedriger
Wenn du die Kompilierung von 16 KB-basierten freigegebenen Bibliotheken mit Android NDK Version r26 oder niedriger unterstützen möchtest, musst du deine ndk-build
- oder cmake
-Konfiguration so aktualisieren:
NDK-Build
Aktualisieren Sie Android.mk
, um die 16-KB-ELF-Ausrichtung zu aktivieren:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
CMake
Aktualisieren Sie CMakeLists.txt
, um die 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-basierten freigegebenen Bibliotheken mit Android NDK Version r27 und höher unterstützen können, müssen Sie Ihre ndk-build
-, build.gradle
-, build.gradle.kts
- oder Verknüpfungs-Flags so aktualisieren:
NDK-Build
Im Application.mk
:
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
Groovig
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
Codeinstanzen suchen, die auf bestimmte Seitengrößen verweisen
Auch wenn Ihre App auf 16 KB ausgerichtet ist, können Fehler auftreten, wenn Stellen im Code davon ausgehen, dass ein Gerät eine bestimmte Seitengröße verwendet. So vermeiden Sie dies:
Entfernen Sie alle hartcodierten Abhängigkeiten, die auf die
PAGE_SIZE
-Konstante oder auf Instanzen in der Codelogik verweisen, die davon ausgehen, dass die Seitengröße eines Geräts 4 KB (4096
) beträgt.Verwende stattdessen
getpagesize()
odersysconf(_SC_PAGESIZE)
.Suchen Sie nach Verwendungen 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 so erstellt haben, dass sie 16 KB-Geräte unterstützt, sollten Sie Ihre App in einer 16 KB-Umgebung testen, um festzustellen, ob in Ihrer App Regressionen auftreten. Richten Sie dazu eine der folgenden Testumgebungen ein und testen Sie Ihre Anwendung dann 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
- Verwende Sepia mit einer Seitengröße von 16 KB auf ARM64
- Simulieren Sie Tintenfisch mit einer Seitengröße von 16 KB auf x86–64
Android-Emulator mit einem 16 KB-basierten Android 15-Systemimage einrichten
So richten Sie mit dem Android-Emulator eine 16 KB-Umgebung ein:
16-KB-basierte Android 15-Emulator-System-Images sind kompatibel mit Android Studio Jellyfish | 2023.3.1 oder höher. Lade jedoch die neueste Vorabversion von Android Studio herunter, damit du die Betaversion von Android 15 optimal nutzen kannst.
Du kannst deine vorhandene Version von Android Studio weiterhin installiert lassen und mehrere Versionen gleichzeitig installieren.
Klicken Sie in Android Studio auf Tools > SDK-Manager.
Maximiere auf dem Tab SDK-Plattformen den Abschnitt Android VanillaIceCream Preview und wähle je nach den virtuellen Geräten, die du erstellen möchtest, eines oder beide der folgenden Emulator-System-Images aus:
- Experimentelle Google APIs 16k Seitengröße ARM 64 v8a System-Image
- Experimentelle Google APIs, 16k Seitengröße Intel x86_64 Atom-System-Image
Klicken Sie auf Anwenden > OK, um das ausgewählte System-Image herunterzuladen.
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. Falls es nicht automatisch empfohlen wird, finden Sie das 16 KB-System-Image auf dem Tab Weitere Images.