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を明示しておいてもよいと思います(右側反転部)。
これでエラーは出なくなると思います。