Posted at

React Native製 Android アプリの64bit対応

2019/8/1から64bit対応していないAndroidアプリのストアへのアップロードができなくなります。

これにあたってReact Nativeアプリの64bit対応を行ったので方法をメモしておきます。

作業前にAndroidネイティブアプリの64bit対応についてのドキュメントを読んでおくと作業がスムーズにすすむと思います。


RN0.59

React Nativeのバージョンを0.59系にあげます


build.gradle

build.gradleを修正し64bitバイナリを含めるようにします


gradle|app/build.gradle

    defaultConfig {

applicationId 'jp.co.runners.mimizuku'
minSdkVersion "${rootProject.ext.minSdkVersion}"
targetSdkVersion "${rootProject.ext.targetSdkVersion}"
versionCode 33
versionName "2.0.7"
// ↓このブロックがあったら削除
//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"
}
}

// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
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 =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}


参考

https://github.com/facebook/react-native/commit/4b996da


apk確認

Android Studioの Build -> Analyze APK で lib以下の*.soファイルが各アーキテクチャに過不足なく存在するか確認します。

私の場合はlibrealmreact.soの64bit版が存在していませんでした。

ちょうど数日前に64bit対応されたバージョン2.28.0がリリースされていたので使用するrealmのバージョンも上げる必要がありました。

このようにネイティブバイナリを使っているライブラリの場合はこのような問題があるので、soファイルの存在チェックはアプリを動かす前にしたほうがよさそうです。

詳しいやり方

https://developer.android.com/distribute/best-practices/develop/64-bit#look_for_native_libraries_using_apk_analyzer


動作確認

64bit対応しているデバイスで動作確認します。

アプリのインストールはabiオプションを指定して次のようにすることで、64bitライブラリのみ使用するアプリがインストールできます。

adb install --abi arm64-v8a YOUR_APK_FILE.apk

デバイスが64bit対応しているか調べる方法は こちらの記事を参照してください。

詳しいやり方

https://developer.android.com/distribute/best-practices/develop/64-bit#test_your_app_on_64-bit_hardware