Posted at

java.lang.UnsatisfiedLinkErrorで怒られた時にやったこと

More than 3 years have passed since last update.

E/AndroidRuntime(32748): java.lang.UnsatisfiedLinkError: Native method not found: org.cocos2dx.lib.Cocos2dxHelper.nativeSetApkPath:(Ljava/lang/String;)V

Eclipseが怒るにはjniが見つかりませんのエラーのようです。

しかし、Cocos2dxHelper内に行くと最初に触っているNativeのJNIがこいつっぽいのでこのメソッドだからでは無い様子。

ひょっとすると本来必要なものが呼ばれていないのではとパスをごちゃごちゃいじるも解決せず。

解決方法はAndroidManifest.xml内を次のようにすることでした。

         <meta-data android:name="android.app.lib_name"

android:value="cocos2dcpp" />
<activity android:name="org.cocos2dx.cpp.AppActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="orientation">

AppActivityが継承するCocos2dxActivityないから呼んでいるこのnativeSetApkPathがないということは、本来あるべきcppから生成されるバイナリが見つからないということなので、このAppActivityより前に"かつapplicationタグ内に"この宣言されていないと見えていないということでした。

たくさんのライブラリーにリンクさせてManifestをいじるとよくmeta-dataの場所を動かしたりするので、こういうことには注意しなければなりません。