アプリが 64 ビットデバイスをサポートしていることを確認する

2019 年 8 月 1 日以降、Google Play で公開するアプリは 64 ビット アーキテクチャをサポートする必要があります。64 ビット CPU は、高速かつ豊かなエクスペリエンスをユーザーに提供します。64 ビット バージョンのアプリを追加することで、パフォーマンスを向上し、将来のイノベーションに備え、64 ビット ハードウェアのみで構成されたデバイスに対応できるようになります。

このガイドでは、32 ビット バージョンのアプリを 64 ビットデバイスで使用できるようにするためにすぐに開始できる手順をご紹介します。

アプリを評価する

Java プログラミング言語または Kotlin で記述されたコード(ライブラリや SDK を含む)のみを使用しているアプリは、すでに 64 ビットデバイスに対応しています。アプリでネイティブ コードを使用している場合や、何を使用しているかわからない場合は、アプリを審査して対策を講じる必要があります。

アプリでネイティブ コードを使用しているか?

まず、アプリでネイティブ コードを使用しているかどうかを確認します。次の場合は、アプリでネイティブ コードを使用しています。

  • アプリで C/C++(ネイティブ)コードを使用している。
  • サードパーティのネイティブ ライブラリとリンクしている。
  • ネイティブ ライブラリを使用するサードパーティ製アプリビルダーでビルドされている。

アプリに 64 ビット ライブラリが含まれているか?

64 ビット ライブラリが含まれているかどうかを確認する場合、APK ファイルの構造を調べる方法が最も簡単です。APK はビルドの際に、アプリに必要なネイティブ ライブラリと一緒にパッケージ化されます。ネイティブ ライブラリは ABI に基づいて、さまざまなフォルダに格納されます。すべての 64 ビット アーキテクチャをサポートする必要はありませんが、サポートしているネイティブの各 32 ビット アーキテクチャに対して、対応する 64 ビット アーキテクチャを含める必要があります。

ARM アーキテクチャの 32 ビット ライブラリは armeabi-v7a にあります。64 ビット バージョンは arm64-v8a にあります。

x86 アーキテクチャのライブラリは、x86(32 ビット向け)と x86_64(64 ビット向け)にあります。

まず、これらのフォルダの両方にネイティブ ライブラリがあるかどうかを確認します。まとめると次のようになります。

プラットフォーム 32 ビット ライブラリのフォルダ 64 ビット ライブラリのフォルダ
ARM lib/armeabi-v7a lib/arm64-v8a
x86 lib/x86 lib/x86_64

アプリによって、各フォルダにまったく同じライブラリ セットがある場合とない場合があります。目標は、アプリが 64 ビットのみの環境で正しく動作できるようにすることです。

通常、32 ビットと 64 ビットの両方のアーキテクチャ向けにビルドされた APK またはバンドルには両方の ABI 用フォルダと、それぞれに対応するネイティブ ライブラリ セットがあります。64 ビットがサポートされない場合、32 ビット用の ABI フォルダはあっても、64 ビット用のフォルダがない可能性があります。

APK Analyzer を使用してネイティブ ライブラリを探す

APK Analyzer は、ビルドされた APK のさまざまな要素を評価するためのツールです。ここでは、APK Analyzer を使用してネイティブ ライブラリを探し、64 ビット ライブラリが存在するかどうかを確認します。

  1. Android Studio を起動し、任意のプロジェクトを開きます
  2. メニューで、[Build] > [Analyze APK…] を選択します。

APK Analyzer を起動する

  1. 評価する APK を選択します。
  2. lib フォルダ内を調べます。「.so」ファイルはこのフォルダ内にあります。アプリ内で「.so」ファイルが見つからない場合、そのアプリは対応済みのため、これ以上のアクションは必要ありません。armeabi-v7a または x86 が見つかった場合は、32 ビット ライブラリが存在します。

  3. arm64-v8a フォルダまたは x86_64 フォルダに同様の「.so」ファイルがあるかどうかを確認します。

    APK Analyzer を起動する

  4. arm64-v8a ライブラリまたは x86_64 ライブラリがない場合は、ビルドプロセスを更新し、アーティファクトをビルドして APK にパッケージ化します。

  5. 両方のライブラリがすでにパッケージ化されている場合は、64 ビット ハードウェアでアプリをテストするに進んでください。

APK を解凍してネイティブ ライブラリを探す

APK ファイルは ZIP ファイルに似た構造になっており、ZIP ファイルと同じように解凍することができます。コマンドラインやその他の抽出ツールを使用して APK を解凍することもできます。

APK ファイルを解凍し(抽出ツールによっては、ファイル名を .zip に変更しなければならない場合があります)、抽出したファイルを参照して、上記のガイダンスに従って 64 ビットデバイスに対応しているかどうかを確認します。

たとえば、コマンドラインから次のコマンドを実行できます。

:: Command Line
    > zipinfo -1 YOUR_APK_FILE.apk | grep \.so$
    lib/armeabi-v7a/libmain.so
    lib/armeabi-v7a/libmono.so
    lib/armeabi-v7a/libunity.so
    lib/arm64-v8a/libmain.so
    lib/arm64-v8a/libmono.so
    lib/arm64-v8a/libunity.so
    

この例では、armeabi-v7a ライブラリと arm64-v8a ライブラリが存在するため、アプリは 64 ビット アーキテクチャをサポートしていることを示しています。

64 ビット ライブラリでアプリをビルドする

ここからは、64 ビット ライブラリをビルドする手順を説明します。ただし、ソースからビルド可能なコードとライブラリのビルドのみを対象としていることを理解しておいてください。

外部の SDK またはライブラリを使用している場合は、上記の手順に沿って 64 ビット バージョンを使用していることを確認してください。64 ビット バージョンがない場合は、SDK またはライブラリの所有者に問い合わせてください。また、64 ビットデバイスのサポートを計画する際には、この点をご考慮ください。

Android Studio または Gradle でのビルド

ほとんどの Android Studio プロジェクトでは基盤となるビルドシステムとして Gradle を使用するため、このセクションはどちらのケースにも適用されます。ネイティブ コードのビルドを有効にするには、arm64-v8a または x86_64(あるいはその両方。サポート対象のアーキテクチャによって異なる)をアプリの「build.gradle」ファイル内の ndk.abiFilters の設定に追加します。

// 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-v7a','arm64-v8a','x86','x86_64'
    // ...
    

CMake でのビルド

CMake を使用してアプリがビルドされている場合、arm64-v8a を「-DANDROID_ABI」パラメータに渡すことで 64 ビット ABI 用にビルドすることができます。

:: Command Line
    > cmake -DANDROID_ABI=arm64-v8a … or
    > cmake -DANDROID_ABI=x86_64 …
    

externalNativeBuild を使用している場合は、このオプションの効果はありません。詳しくは、Gradle でのビルドをご覧ください。

ndk-build でのビルド

ndk-build を使用してアプリがビルドされている場合、APP_ABI 変数を使って「app.mk」ファイルを変更することにより、64 ビット ABI 用にビルドすることができます。

APP_ABI := armeabi-v7a arm64-v8a x86 x86_64
    

externalNativeBuild を使用する場合は、このオプションの効果はありません。詳しくは、Gradle でのビルドをご覧ください。

Android App Bundle によるサイズの増大の緩和

64 ビット アーキテクチャのサポートをアプリに追加すると、APK のサイズが増大することがあります。32 ビットと 64 ビットの両方のネイティブ コードを同じ APK に含める場合のサイズへの影響を最小限に抑えるために、Android App Bundle を利用することを強くおすすめします。

Android App Bundle を使用するようにアプリを変更すると、APK のサイズが実際に改善され、現在のサイズより小さくなることもあります。

ゲーム デベロッパー

サードパーティ製のゲームエンジンの移行は、リードタイムが長く、集中的な取り組みを必要とするプロセスです。幸い、以下のよく使われている 3 つのエンジンはすべて、64 ビットをサポートしています。

  • Unreal(2015 年から)
  • Cocos2d(2015 年から)
  • Unity(2018 年から)

Unity デベロッパー

サポート バージョンへのアップグレード

Unity は、バージョン 2018.22017.4.16 で 64 ビットのサポートの提供を開始しました。

64 ビットをサポートしていないバージョンを使用している場合は、アップグレードするバージョンを決定し、Unity から提供されているガイドに従って環境を移行します。必ず、64 ビット ライブラリをビルド可能なバージョンにアプリがアップグレードされるようにしてください。Unity では、最新の LTS バージョンのエディタにアップグレードして、最新の機能とアップデートを利用するよう推奨しています。

以下の表に、Unity の各種バージョンと推奨事項を示します。

Unity のバージョン 64 ビットのサポート 推奨される行動指針

2018.4(LTS)

✔️

(リリース保留中)ビルド設定を調整して 64 ビット ライブラリが生成されるようにする。

2018.3

✔️

ビルド設定を調整して 64 ビット ライブラリが生成されるようにする。

2018.2

✔️

ビルド設定を調整して 64 ビット ライブラリが生成されるようにする。

2018.1

試験的に 64 ビットをサポート。

2017.4(LTS)

✔️

2017.4.16 以降サポート。ビルド設定を調整して 64 ビット ライブラリが生成されるようにする。

2017.3

✖️

64 ビットをサポートしているバージョンにアップグレードする。

2017.2

✖️

64 ビットをサポートしているバージョンにアップグレードする。

2017.1

✖️

64 ビットをサポートしているバージョンにアップグレードする。

5.6 以下

✖️

64 ビットをサポートしているバージョンにアップグレードする。

ビルド設定を調整して 64 ビット ライブラリが生成されるようにする

64 ビット版の Android ライブラリをサポートしているバージョンの Unity を使用している場合は、ビルド設定を調整することによって 64 ビット バージョンのアプリを生成できます。また、スクリプト バックエンドとして IL2CPP バックエンドを使用する必要もあります(詳細はこちら)。64 ビット アーキテクチャをビルドするように Unity プロジェクトを設定する手順は次のとおりです。

  1. [Build Settings] に移動します。Unity のマークが Android プラットフォームの横に表示され、Android 向けのビルドであることを確認します。**
    1. Unity のマークが Android プラットフォームの横に表示されていない場合は、Android を選択して [Switch Platform] をクリックします。
  2. [Player Settings] をクリックします。

    Unity のプレーヤー設定

  3. [Player Settings] パネル > [Settings for Android] > [Other settings] > [Configuration] に移動します。

  4. [Scripting Backend] を [IL2CPP] に設定します。

  5. **[Target Architectures] の [ARM64] チェックボックスをオンにします。

    Unity でターゲット アーキテクチャを設定する

  6. 通常どおりにビルドします。

ARM64 向けのビルドでは、すべてのアセットを対象のプラットフォーム専用にビルドする必要があります。Unity のガイダンスに従って、APK のサイズを減らしてください。また、サイズの増大を緩和するために、Android App Bundle 機能を利用することをご検討ください。

64 ビット ハードウェアでアプリをテストする

64 ビット バージョンのアプリは、32 ビット バージョンと同じ品質と機能を提供する必要があります。アプリをテストして、ユーザーが最新の 64 ビットデバイスでアプリを快適に操作できることを確認します。

アプリのテストを開始するには、64 ビット対応のデバイスが必要です。Google の Pixel やその他の主力デバイスなど、さまざまな人気機種が 64 ビットに対応しています。

APK の最も簡単なテスト方法は、adb を使用してアプリをインストールする方法です。ほとんどの場合、--abi パラメータを使用して、デバイスにインストールするライブラリを指定できます。これにより、64 ビット ライブラリのみを使用するアプリがデバイスにインストールされます。

:: Command Line
    # A successful install:
    > adb install --abi armeabi-v7a YOUR_APK_FILE.apk
    Success

    # If your APK does not have the 64-bit libraries:
    > adb install --abi arm64-v8a YOUR_APK_FILE.apk
    adb: failed to install YOUR_APK_FILE.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

    # If your device does not support 64-bit, an emulator, for example:
    > adb install --abi arm64-v8a YOUR_APK_FILE.apk
    ABI arm64-v8a not supported on this device
    

インストールが成功したら、通常どおりにアプリをテストして、32 ビット バージョンと品質が同じであることを確認します。

公開

アプリの準備ができたら、通常どおりに公開します。いつものように、アプリのデプロイに関するおすすめの方法に従ってください。アプリの品質が安定していることを確認するために、クローズド テスト版のトラックを利用して一部のユーザーにのみ公開することをおすすめします。

メジャー アップデートの公開時と同様に、多くのユーザーに公開する前に 64 ビット対応のデバイスで徹底的にテストを行ってください。