LoginSignup
3
3

More than 5 years have passed since last update.

[openFrameworks] 64bit ARMでAndroid版がクラッシュする問題の対策

Last updated at Posted at 2016-08-03

問題

openFrameworksをAndroidで動かそうと思い、公式ページの方法に従ってセットアップしていたのですが、サンプルプログラムを動かそうとするとUnsatisfiedLinkErrorでクラッシュしてしまいます。

08-03 16:10:49.877 4680-4680/cc.openframeworks.androidGuiExample E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                   Process: cc.openframeworks.androidGuiExample, PID: 4680
                                                                                   java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/cc.openframeworks.androidGuiExample/files/instant-run/dex/slice-slice_0-classes.dex"],nativeLibraryDirectories=[/data/app/cc.openframeworks.androidGuiExample-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libOFAndroidApp.so"
                                                                                       at java.lang.Runtime.loadLibrary(Runtime.java:367)
                                                                                       at java.lang.System.loadLibrary(System.java:1076)
                                                                                       at cc.openframeworks.OFAndroid.<clinit>(OFAndroid.java:1044)
                                                                                       at cc.openframeworks.androidGuiExample.OFActivity.onCreate(OFActivity.java:18)
                                                                                       at android.app.Activity.performCreate(Activity.java:6271)
                                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
                                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524)
                                                                                       at android.app.ActivityThread.access$900(ActivityThread.java:154)
                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1391)
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                       at android.os.Looper.loop(Looper.java:224)
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:5526)
                                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

環境

  • Mac OS X 10.10.5 (Yosemite)
  • openFrameworks 0.9.3
  • Android Studio 2.1.2
  • Xperia Z5 (Android 6.0)

原因

openFrameworksのライブラリは32bit版なのですが、どうやら64bitのARMを積んだ端末で動かすと64bitのライブラリを探しに行って見つからなくて落ちる模様。

解決策 (1)

アプリのbuild.gradleにabiFiltersの項目を追加し、64bitのライブラリを読みに行かないようにします。

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 22

        // ここから追加
        ndk {
            abiFilters "armeabi-v7a"
        }
        // ここまで
    }
(後略)
}

注意

上記を追加すると、プラグインのバージョンによってはエラーが出る場合があります。
その場合はgradle.propertiesに下記を追加します。

android.useDeprecatedNdk=true

解決策 (2)

アプリのbuild.gradleにsplitの項目を追加し、ターゲットとするABIを32bitに限定します。

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 22
    }
    // ここから追加
    splits {
        abi {
            enable true
            reset()
            include 'armeabi-v7a'
        }
    }
    // ここまで
(後略)
}

参考

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