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

# 問題

openFrameworksをAndroidで動かそうと思い、[公式ページ](http://openframeworks.cc/setup/android-studio/)の方法に従ってセットアップしていたのですが、サンプルプログラムを動かそうとすると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'
        }
    }
    // ここまで
（後略）
}
```

# 参考
- [How to use 32-bit native libaries on 64-bit Android device](http://stackoverflow.com/questions/30782848/how-to-use-32-bit-native-libaries-on-64-bit-android-device)
- [Apk Splits](http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits#TOC-ABIs-Splits)