13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-05-28

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

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

13
7
0

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
  3. You can use dark theme
What you can do with signing up
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?