公開アプリのバイナリ64bit化の必須化に向けてAndroid端末のABIの調べ方
手元の機種が64bitアーキテクチャに対応しているのか
はじめに
上記ページにあるとおり、2019年8月1日以降、GooglePlayで公開するアプリは 64bitアーキテクチャをサポートする必要があります。
更には2021年8月1日から64bit版が含まれていないアプリはGooglePlayから排除されるということです。
アプリ(apk)を64bit対応することはもちろん、その後に64bit対応端末できちんと動作するのかを検証する必要があります。
そこで手持ちのデバイスのCPUアーキテクチャーが何なのか、
サポートしているABIは何なのかを調べる方法を以下に掲載します。
※ABIの詳しい内容については以下ページにあります。
https://developer.android.com/ndk/guides/abis#sa
解説
まずABIの分類は以下のとおりです。
ABI分類
これを抑えた上で該当の端末がどれに対応しているのかを確認します。
adbコマンドで調べる
調べ方は以下の手順になります。
- USBなどで調べたいデバイスをPC/Macに繋げる
- コンソール(ターミナル)を開く
- 以下adbコマンドを実行する
$ adb shell getprop ro.product.cpu.abi
実際の実行例
$ adb shell getprop ro.product.cpu.abi arm64-v8a
これで完了です。
とは言え、現存のデバイスは、ARMであれば、上記結果がarm64-v8aであっても下位互換性があるようなので、armeabi, armeabi-v7aもサポートされるため、結局のところarm64-v8がなくても、動作確認はできるようです。
// Your app's build.gradle
apply plugin: 'com.android.app'
android {
compileSdkVersion 27
defaultConfig {
appId "com.google.example.64bit"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
ndk.abiFilters 'armeabi','armeabi-v7a','arm64-v8a','x86','x86_64'
// ...
app/build.gradle
現状のあるアプリのapp/build.gradleの設定は上記のとおりです。
ここで試しに設定を少し変更して確認してみます。
- app/build.gradleを開く
- ndk.abiFiltersからarm系('armeabi','armeabi-v7a','arm64-v8a')を外す
- 繋いだデバイスの実行を試みる(繋いだデバイスのABIは'arm64-v8a')
Device supports arm64-v8a, armeabi-v7a, armeabi, but APK only supports x86, x86_64
するととエラーが表示されました。
この段階では、arm系をすべて除外しているので当然です。
次に、armeabi、armeabi-v7aがそれぞれ含まれていた場合を確認します。
すると、armeabiかarmeabi-v7aどちらかが含まれていればエラーは表示されず、正常に動作するため、ABIがarm64-v8aのデバイスで64bitライブラリがなくとも、32bitのライブラリで動作することが分かります。
armeabi、armeabi-v7aをどちらも外して、arm64-v8aの設定のみの場合は、検証デバイスがarm64-v8aでなくてはならなそうですが、今回の対応では、armeabi、armeabi-v7aをあえて外す必要はないでしょうから、アプリ自体の64bit対応をした上で、arm64-v8aの設定を加え、arm64-v8aのあるデバイスで正常に動作すればよさそうです。