Android 11をEmulatorで動かす際はx86_64を考える必要がなくなった。
https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html
Android 11のリリースに向けて、開発していたところ、こんな記事を見つけました。
Android NDKで開発している場合、ABIの種類として、x86_64
と arm64-v8a
を使うことが多いと思いますが、x86_64
はバイナリのサイズが膨れ上がるので、なるべくアプリに同梱させたくありません。
しかし、 x86_64
がない場合、ARMをエミュレーションを備えたシステムイメージを使う必要がありました。このイメージは、ARMの命令を全て x86_64
に逐一変換しているため、パフォーマンスがあまり良くなく、使っている人はほぼいなかったと思います。
Android 11からは、x86_64
のシステムイメージに、ARMのエミュレーションが統合されました。通常は x86_64
ネイティブで実行されますが、ARMバイナリがあった場合に x86_64
バイナリに変換されて動くことができます。
ちなみに、Virtual Device Configuration で x86_64
のイメージを使う際は、Recommended ではなく、x86 Images のタブを選択しないと出てこないので要注意です。 x86_64
のイメージを使うことで、Emulator実行時のパフォーマンスが x86 と比べて向上するので推奨です。
これにより、Android NDKのABIに x86_64
は不要になり、 arm64-v8a
だけでもEmulatorで快適に動くことが出来ました。
現状、 x86_64
のAndroid端末もほぼ見かけなくなったので、これを気に、 x86_64
を落として、APKのサイズを小さくしようかなと思い始めました。
また、Android 11では、OpenSL ESが廃止され、AAudioに統合されたり、ANGLEが正式にサポートされたり、色々機能が盛り沢山ですね。
MediaCodecでも、Google Stadiaサポートのために、メモリアクセスのサポートや、バッファを小さくして低遅延デコードする機能も追加されました。
この内容はまたどこかでご紹介できればと思います。