2019 年 8 月 1 日以降、Google Play で公開するアプリは 64 ビット アーキテクチャをサポートする必要があります。64 ビット CPU は、高速かつ豊かなエクスペリエンスをユーザーに提供します。64 ビット バージョンのアプリを追加することで、パフォーマンスを向上し、将来のイノベーションに備え、64 ビット ハードウェアのみで構成されたデバイスに対応できるようになります。
Android Developers: Support 64-bit architecturesより
今回ReactNativeで作成したアプリを64bitに対応させる必要があったのでそのメモです。
ReactNative側のIssueを漁るの辛すぎたからから記事にした。
react-nativeのandroid 64bit対応、なんかいろんなissueがあって混乱してるんですが、すでに64bit対応やってよって人いたりしないかな...
— hand_dot (@hand_dot) May 27, 2019
日本語の情報やgoogleのブログでは32bitが含まれているかの確認方法は書いてあるが含まれていた場合のネクストアクションがわからないので困っている
下記の記事も参考にさていただきました。ありがとうございました。
React Native製 Android アプリの64bit対応
Step1 react-nativeのバージョンを確認する
とりあえず自分のreact-nativeのバージョンを確認して、0.59.1
以下であれば先にバージョンアップを行ってください。
下記の画像にあるようにリリースノートでは0.59.0
と0.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です。
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です。
あとは64bitに対応しているデバイスで動作検証を行っていきます。下記ように64bitライブラリのみ使用するアプリをインストールしてください。
$ adb install --abi arm64-v8a PATH/TO/YOUR/APK.apk
あとはテストしていきましょう!幸運を祈る!