LoginSignup
5
5

More than 5 years have passed since last update.

VuforiaSDKとRealmをセットで使うとSystem.err

Posted at

VuforiaSDKを用いてARカメラを実装したAndroidアプリをリリースしています。
今回、アプリのDBを流行のRealmに切り替えようとした際ハマりましたので紹介します。
VuforiaSDKは5.010のjarおよび.soファイルをダウンロードしてプロジェクトに含め、Realmはver0.87.5をbuild.gradleに記述し導入しました。

build.gradle
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'io.realm:realm-android:0.87.5'

一部の端末でVuforia初期化時にクラッシュするようになった

System.err﹕ The library libVuforia.so could not be loaded
Realmを導入後、上記のエラーが発生しアプリごとクラッシュする現象が発生しました。
全ての環境で発生するわけでなく、手持ち(Nexus7、MeMOPad7、XperiaZ4)のうちXperiaでのみ再現しました。

原因は64bit対応だった

Realmにはアーキテクチャごとのバイナリファイルが含まれており、これにはARM 64bit用ファイル(arm64-v8a)も入ります。
しかしVuforiaSDKでは32bit用の armeabi-v7aしか用意されておらず、結果としてアプリに32bitと64bitのバイナリが混在する状態になっていたためクラッシュしていたようです。
ARM 64bitに対応する端末が私の手持ちではXperiaZ4だけであるため納得です。

build.gradleでexcludeするようにした

JARを直接編集するなどの方法もあるようですが、今回はbuild.gradle上のオプションでこれら衝突するバイナリファイルをビルドから除外することにしました。
以下では armeabi-v7a以外全て除外していますが、 arm64-v8aのみ除外しても動作するかと思われます。

build.gradle
packagingOptions {
        exclude 'lib/arm64-v8a/librealm-jni.so'
        exclude 'lib/armeabi/librealm-jni.so'
        exclude 'lib/x86_64/librealm-jni.so'
        exclude 'lib/x86/librealm-jni.so'
        exclude 'lib/mips/librealm-jni.so'
}

参考にさせていただいた記事

5
5
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
5
5