2025/11/1対応必須! Android15 ページサイズ16KB対応メモ

Android Developersに公開されているように、16KBページサイズのサポートがAndroidで必須になりました。弊社に通知が来たのは2025年の8月後半でした。すぐに対応ができない場合には2026年5月31日まで延長を申請できるようです。

16KBページサイズはここに書かれているように、OSがメモリの管理をするためのサイズを表しています。ページテーブルというところで固定サイズのページという単位でメモリを分割して管理しています。ページサイズを4KBから16KBにする対応が今回の16KBページサイズサポートです。4KBページサイズから16KBページサイズにすることで、ページテーブルの管理処理が軽くなったり、ページがメモリに読み込まれていないときに発生するページフォルトの発生頻度が減ることでパフォーマンスが向上します。

2025/11/1に対応ができていないとGoogle Playにアップデートできません。16KBページサイズのサポートが必要なアプリは、アプリが共有ライブラリを使用している場合に対応が必要になります。アプリの対応を行ったのでまとめておきます。

対象となるアプリ

ビルドを行う必要があるアプリはAndroid Developersの説明で次のように書かれています。

  • アプリで C/C++(ネイティブ)コードを使用している。アプリで Android NDK を使用している場合は、ネイティブ コードを使用しています。
  • アプリが、サードパーティのネイティブ ライブラリまたはそれらを使用する依存関係(SDK など)とリンクしている。
  • アプリは、デバイス上のネイティブ ライブラリを使用するサードパーティ製アプリビルダーでビルドされています。

弊社のアプリでは下図のようにネイティブライブラリを使用するJAVAライブラリと、ネイティブコードからネイティブライブラリを使用するという構成でしたので、2種類のネイティブライブラリと1つのネイティブコードをビルドしました。

対象となるABI

ビルド対応する必要があるABIはarm64-v8aとx86_64です。armeabi-v7aやx86のビルドは32bitアーキテクチャのため、4KBページサイズで問題ありません。

対象となる共有ライブラリの確認

アプリが使ってる共有ライブラリ(soファイル)が16KBページサイズのサポートされているかをコマンドラインで確認しました。apkファイルをzipにして解凍し、libフォルダの下にあるsoファイルに対して次のコマンドで実行しました。

SDK_ROOT_LOCATION\Android\sdk\ndk\NDK_VERSION\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-objdump.exe -p SHARED_OBJECT_FILE.so | Select-String -Pattern "LOAD"

表示される値が2**14より小さい場合は古い環境でビルドをしている共有ライブラリを使っています。また、apkを次のようにコマンドを実行してアライメントが正しいことを確認してください。

SDK_ROOT_LOCATION\Android\sdk\build-tools\35.0.0\zipalign.exe -v -c -P 16 4 APK_NAME.apk

Verification FAILEDと表示された場合は、アライメントが小さい可能性があるのでビルドを行ってください。

ビルドの更新

外部のライブラリを使う場合には、16KBページサイズでビルドされた共有ライブラリを取得するか、自身でビルドする必要があります。AGP(Android Gradle Plugin)を8.5.1以上に上げてビルドをしてください。ビルドで指定するAndroid NDKがr28より前だとzipalign.exeでアライメントのエラーが出ました。ビルドする場合はNDKをr28以上に変更してビルドをしてください。Android Studioでビルドしていれば、SDK Managerで対象となるNDKをインストールすればよいです。もし複数のNDKを入れている場合、特定バージョンのNDKを指定することもできます。Makefileを使っている場合は、Android-NDKをr28より大きいものを指定してビルドをしてください。

テスト方法

テスト方法としては、実機か、エミュレータで確認することができます。テストデバイスが16KB環境であるかは次のコマンドで確認できます。

adb shell getconf PAGE_SIZE

16384を返せば16KB環境です。4KBの場合には4096を返します。

エミュレータ

x86_64ビルドがないライブラリがあったのでWindowsでエミュレータを動作させることが出来ませんでした。arm64イメージはMacやLinuxでAndroid Studioのエミュレータであれば動かすことができます。

実機

実機でテストする場合には特定の機種でしかテストができません。対象となる機種が少ないです(2025/10/8時点)。16KBページサイズになっていないアプリをインストールするとクラッシュします。

実機で16KBモードに切り替えるための手順はこちらです。初回の切り替えはブートローダーのアンロックが必要なので、端末が初期化されるのでご注意ください。一度切り替えを行ったら、4KBページサイズに戻すときには初期化はされません。

まとめ

ビルドは設定を変えることで問題なくできました。実機のテスト環境を構築するために初期化が必要ですし、ブートローダーのアンロックを必要とするのでテスト機として用意した端末でないとテストしづらいです。