LoginSignup
7

More than 3 years have passed since last update.

posted at

updated at

ReactNativeのAndroid 64bit対応時に読んでおきたいメモ

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

Android Developers: Support 64-bit architecturesより


今回ReactNativeで作成したアプリを64bitに対応させる必要があったのでそのメモです。
ReactNative側のIssueを漁るの辛すぎたからから記事にした。

下記の記事も参考にさていただきました。ありがとうございました。
React Native製 Android アプリの64bit対応

Step1 react-nativeのバージョンを確認する

とりあえず自分のreact-nativeのバージョンを確認して、0.59.1以下であれば先にバージョンアップを行ってください。
下記の画像にあるようにリリースノートでは0.59.00.59.1で64bit対応が行われているため、最低でも0.59.1に頑張ってやってください。

スクリーンショット 2019-05-28 18.12.09.png
スクリーンショット 2019-05-28 18.12.16.png

ReactNativeのバージョンアップ時に読んでおきたいメモという記事もあるので、ご参考までに。

Step2 64ビットライブラリがあるかチェックする

次に、自分のアプリに対応が必要かチェックしていきます。自分のアプリで使用されている32bitライブラリに対して64bitのライブラリがあればOKです。

APK Analyzer を使用してネイティブ ライブラリを探す 方法についてはGoogleの公式を参考にチェックしていきましょう。

下記を参考にしながら各32ビットアーキテクチャに対して、対応する64ビットアーキテクチャがあるか確認します。

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

下記は対応が必要な例です。
32ビットアーキテクチャに対して、対応する64ビットアーキテクチャがないですね。
スクリーンショット 2019-05-28 18.24.06.png


Step3 build.gradleを修正

下記はあくまでも自分の作業環境にて、0.57.5から0.59.8に上げたときの修正内容です。参考にしてください。
https://pvinis.github.io/purge-web/ このサイトから自分のバージョンに合わせて/android/app/build.gradleの差分をみて適応していけばOKです。

/android/app/build.gradle
      defaultConfig {
         applicationId "com.rndiffapp"
@@ -103,16 +107,13 @@ android {
         targetSdkVersion rootProject.ext.targetSdkVersion
         versionCode 1
         versionName "1.0"
-        ndk {
-            abiFilters "armeabi-v7a", "x86"
-        }
     }
     splits {
         abi {
             reset()
             enable enableSeparateBuildPerCPUArchitecture
             universalApk false  // If true, also generate a universal APK
-            include "armeabi-v7a", "x86"
+            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
         }
     }
     buildTypes {
@@ -126,7 +127,7 @@ android {
         variant.outputs.each { output ->
             // For each separate APK per architecture, set a unique version code as described here:
             // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
-            def versionCodes = ["armeabi-v7a":1, "x86":2]
+            def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3, "x86_64": 4]
             def abi = output.getFilter(OutputFile.ABI)
             if (abi != null) {  // null for the universal-debug, universal-release variants
                 output.versionCodeOverride =

Step4 ビルドして確認

Step2で行ったようにAPK Analyzer を使用して下記の画像のように32ビットアーキテクチャに対して、対応する64ビットアーキテクチャがあればOKです。

x86(lib/x86_64が追加された)
スクリーンショット 2019-05-28 18.25.19.png

ARM(lib/arm64-v8aが追加された)
スクリーンショット 2019-05-28 18.25.34.png

あとは64bitに対応しているデバイスで動作検証を行っていきます。下記ように64bitライブラリのみ使用するアプリをインストールしてください。

$ adb install --abi arm64-v8a PATH/TO/YOUR/APK.apk

あとはテストしていきましょう!幸運を祈る!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
7