[SOLVED] java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader couldn't find "libdecodejme.so"

The root cause is not adding jme3-android-native to the dependencies.
From the stack trace, one can tell, though, that running without the natives does not work:

        at com.jme3.texture.plugins.AndroidNativeImageLoader.<clinit>(AndroidNativeImageLoader.java:23)
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:400)
        at java.lang.Class.forName(Class.java:326)
        at com.jme3.asset.AssetConfig.acquireClass(AssetConfig.java:62)
        at com.jme3.asset.AssetConfig.loadText(AssetConfig.java:86)
        at com.jme3.asset.DesktopAssetManager.loadConfigFile(DesktopAssetManager.java:96)
        at com.jme3.asset.DesktopAssetManager.<init>(DesktopAssetManager.java:89)
        at com.jme3.system.JmeSystemDelegate.newAssetManager(JmeSystemDelegate.java:125)
        at com.jme3.system.JmeSystem.newAssetManager(JmeSystem.java:139)

Unclear whether DesktopAssetManager is supposed to be used for Android, but it seems to refer to the native loader all the time, and the native loader does not properly handle missing natives, ofc.

2 Likes

I’m not an Android expert, but I believe DesktopAssetManager is a misnomer. It’s included in jme3-core and used both on desktop and mobile platforms.

2 Likes

I know something , that if you add jme3-android-native as a dependency , then you are done (you donot need to add jme3-android but you must add the android-native anyway so the openalsoft gets working as well , we could try to make something like calling jme3-androidnative internally inside the gradle of jme3-android then you donot need to add jme3-android-native , & jme3-android module would be efficient though.

So, likely it’s something like hiding the native code from the user , but it’s actually publicly available when you implement jme3-android java module in your gradle.

We can continue to discuss it here

2 Likes