Edited 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に頑張ってやってください。



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ビットアーキテクチャがないですね。



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が追加された)

ARM(lib/arm64-v8aが追加された)

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

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

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