[Android][andengine] Andenginephysicsbox2dextensionを入れる

AndEngineは前回までに入ったので、次にAndenginephysicsbox2dextensionを入れて行きます。これは苦労しました。というか、既に、順序を忘れてしまってます。思い出しながら・・・書いていきます。ちなみにndkもインストールしてあります(他のサイトみてください)。

まず、最初にすることは、AndEngineのライブラリと同様に、プロジェクト構造から追加していきます。

Additional required Moduleにandengineが入ってますが、これは既に入っている前提なので、そのまま進みます。andengineの導入がわからない方は前の記事へ・・・

build.gradle(Module: app)に、


compile project(':andEnginePhysicsBox2DExtension')

 

build.gradle(Module: andEnginePhisicsBox2DExtension)に

    sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
        jni.srcDirs = []
    }

を加えます。ここまでandEngineを組み込むのと、ほぼ一緒です。

ここで、一応ビルトは通ります。しかしながら、物理シミュレーション部の記述などをすると、共有ライブラリの関係のエラーが出て、正常に動きません。

 mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false);

と記述すると、

MainActivity.onCreateScene failed. @(Thread: 'GLThread 2268')
java.lang.UnsatisfiedLinkError: ~~~ couldn't find "libandenginephysicsbox2dextension.so"
  at java.lang.Runtime.loadLibrary(Runtime.java:367)
  at java.lang.System.loadLibrary(System.java:1076)
  at org.andengine.extension.physics.box2d.PhysicsWorld.<clinit>(PhysicsWorld.java:35)
  ~ 略 ~

てな感じでlibandenginephysicsbox2dextension.soが見当たらない!!といわれます。

これは、stackoverflowでも対策がでていますが、ここで注意が必要です。ここではlib.zipを作る方法と、jniLibsを作る方法の2つ紹介されていますが、Android 6 (Marshmallow)では相変わらずエラーがでます。

で、解決策としてAndroid6で使える共用ライブラリ(jniLibs)がアップロードされています。これをDLして展開してきます。次に、これを組み込みます。

app/src/mainの下にjniLibsのフォルダを作り、スクリーンショットのように配置します(左側反転部)。通常は、これだけで正常にできると思います。一応念のため、build.gradle(Module:app)を開き、jniLibsを明示しておいてもよいと思います(右側反転部)。

これでエラーは出なくなると思います。