【Android15】16KBページサイズサポートの対応と確認方法

【Android15】16KBページサイズサポートの対応と確認方法

この記事からわかること

  • Android Studio/Kotlin16KBページサイズ対応方法

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

参考文献:Android15で追加される16KBページサイズの対応について詳しくみていく

16KBページサイズサポートとは?

公式リファレンス:16 KB ページサイズのサポート

これまでAndroidは4KBのメモリページサイズしかサポートしていませんでしたが、Android15以降から16KBのページサイズに対応するように変更になりました。

16KBに引き上がったことでxメモリ使用量は少し増加するようですが、アプリのパフォーマンスが向上するようになります。

対応するべきこと

実際ほとんどのAndroidアプリが対応不要の可能性が高いです。対象となるのはネイティブコード(C/C++ / NDK)を使用している(.soファイルがapkに含まれる)場合のみです。これはアプリ内はもちろんサードパーティのライブラリなども含まれるので注意してください。

もし使用している場合は16KBをサポートするようにアプリを修正し、再度アップロードし直す必要があります。実際に16KBに対応していないアプリを起動するとクラッシュしてしまうこともあるようです。

各ツールを最新バージョン(AGP バージョン 8.5.1 以降、NDK バージョン r28 以降)に更新し、16KB互換のビルド済み依存関係を使用すると、アプリはデフォルトで16KBサポートになるようです

確認方法1:APK Analyzerを使用する

自分のアプリが16KB対応しているかどうかを確認する方法をまとめていきます。まずはAPKを解析して.soファイルが存在するかどうかを確認してみます。

公式リファレンス:APK Analyzer を使用してネイティブ ライブラリを特定する

まずはプロジェクトを立ち上げて最新のapkファイルを生成しておきます。

続いて上部メニューの「Build」 > 「Analyze APK...」をクリックし、対象のAPKファイルを選択します。すると以下のようにapkファイル内の構成が表示されます。この中のlibディレクトリの中に.soファイルがあるかどうかを確認してください。.soファイルないまたはlibディレクトリ自体がない場合は対応は不要です。

【Android15】16KBページサイズサポートの対応と確認方法

.soファイルがあった場合でもすでに対応済みのライブラリなどの場合は特に対応は必要ありません。

確認方法2:soファイルが対応済みかどうかを確認する

公式リファレンス:check_elf_alignment.sh スクリプトを使用する(Linux または macOS)

.soファイルが存在した場合は16KBに対応しているかどうかを確認する必要があります。先ほどのAPK Analyzerでは存在するかどうかしか確認ができないので公式が提供しているスクリプトを使用して確認していきます。

まずはcheck_elf_alignment.shスクリプトに記述されている内容をコピーしたファイルを用意し、apkファイルと同階層に設置します。

あとはスクリプトを実行するだけで確認処理が走り対象の.soファイルに対してALIGNEDと表示されていれば16KB対応済みになります。UNALIGNEDと出ている場合は対応済みのバージョンにライブラリをアップデートなどする必要があります。

$ ./check_elf_alignment.sh app-debug.apk

Recursively analyzing app-debug.apk

NOTICE: Zip alignment check requires build-tools version 35.0.0-rc3 or higher.
  You can install the latest build-tools by running the below command
  and updating your $PATH:

    sdkmanager "build-tools;35.0.0-rc3"

=== ELF alignment ===
/var/folders/wh/vtp248lx2fs00q111ngnmc2h0000gn/T/app-debug_out_XXXXX.ikb1GrvZes/lib/arm64-v8a/libdatastore_shared_counter.so: \e[32mALIGNED\e[0m (2**14)
ELF Verification Successful
=====================

うまくスクリプトが実行できない場合はパーミッションを確認してみてください。私は実行権限がなかったので付与しておきました。

$ -rw-r--r--@  1 s  staff  51219556  6 26 11:24 app-debug.apk

$ chmod 755 check_elf_alignment.sh

$ -rwxr-xr-x@  1 s  staff      2906  6 26 11:40 check_elf_alignment.sh

確認方法3:16KBデバイスで起動して確認する

公式リファレンス:16 KB 環境でアプリをテストする

16KBサポートのデバイスで実際にアプリを起動させてみて確認してみます。今回はエミュレーターで確認したいのでデバイスマネージャーから新しい仮想デバイスを作成していきます。Android15以上をサポートしているデバイスを選択してPre-Release 16 KB Page Size Google Play ARM 64 v8a Systemをダウンロードし、エミューレーターを作成します。

対象のエミュレーターでアプリを起動し、問題なく起動できるかを確認してみてください。またターミナルからadb shell getconf PAGE_SIZEを実行して16KBデバイスであるかどうかを確認することができます。

【Android15】16KBページサイズサポートの対応と確認方法
$ adb shell getconf PAGE_SIZE
16384

もし4096と表示されていれば4KBのデバイスなので設定を見直してみてください。

$ adb shell getconf PAGE_SIZE
4096

公式リファレンス:一部のエミュレータ バージョンとシステム イメージの追加手順

16KB対応

対応するべき箇所によりやることは異なります。

AGPバージョン8.5以前

公式リファレンス:AGPバージョン8.5以前

AGPのバージョンが何かしらの理由でアップデートできず、8.5以前の場合は以下を「build.gradle」に追加します。


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

Android NDK r27以前

公式リファレンス:Android NDK r27

NDKのバージョンが何かしらの理由でアップデートできず、r27以前の場合にndk-buildを使用している場合は以下を「Application.mk」に追加します。

APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

Search Box

Sponsor

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article