【Android】アプリ64bit化必須に向けて検証デバイスのABIを調べる方法
notwork_android_64bit
スポンサーリンク

公開アプリのバイナリ64bit化の必須化に向けてAndroid端末のABIの調べ方

手元の機種64bitアーキテクチャに対応しているのか

ヒーラー
2019年8月以降、公開するアプリは64bitアーキテクチャのサポートが必須になってしまうが、手持ちのデバイスで十分にテストできるのかがわからない

はじめに

https://developer.android.com/distribute/best-practices/develop/64-bit

上記ページにあるとおり、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分類

ABI分類

これを抑えた上で該当の端末がどれに対応しているのかを確認します。

adbコマンドで調べる

調べ方は以下の手順になります。

  1. USBなどで調べたいデバイスをPC/Macに繋げる
  2. コンソール(ターミナル)を開く
  3. 以下adbコマンドを実行する
$ adb shell getprop ro.product.cpu.abi

実際の実行例

$ adb shell getprop ro.product.cpu.abi
arm64-v8a

これで完了です。

とは言え、現存のデバイスは、ARMであれば、上記結果がarm64-v8aであっても下位互換性があるようなので、armeabiarmeabi-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の設定は上記のとおりです。
ここで試しに設定を少し変更して確認してみます。

  1. app/build.gradleを開く
  2. ndk.abiFiltersからarm系('armeabi','armeabi-v7a','arm64-v8a')を外す
  3. 繋いだデバイスの実行を試みる(繋いだデバイスのABIは'arm64-v8a')

Device supports arm64-v8a, armeabi-v7a, armeabi, but APK only supports x86, x86_64

するととエラーが表示されました。
この段階では、arm系をすべて除外しているので当然です。

次に、armeabi、armeabi-v7aがそれぞれ含まれていた場合を確認します。

すると、armeabiarmeabi-v7aどちらかが含まれていればエラーは表示されず、正常に動作するため、ABIがarm64-v8aのデバイスで64bitライブラリがなくとも、32bitのライブラリで動作することが分かります。

armeabi、armeabi-v7aをどちらも外して、arm64-v8aの設定のみの場合は、検証デバイスがarm64-v8aでなくてはならなそうですが、今回の対応では、armeabi、armeabi-v7aをあえて外す必要はないでしょうから、アプリ自体の64bit対応をした上で、arm64-v8aの設定を加え、arm64-v8aのあるデバイスで正常に動作すればよさそうです。


スポンサーリンク

Twitterでフォローしよう

おすすめの記事