[SOLVED] SNAPSHOT leads to some troubles on Android

Hi , i have built jme using SNAPSHOT , gradle , java code everything is loaded fine , but when running it , the AndroidNativeImageLoader class fails to load the native library decodejme , this must be a bad linkage problem towards the module decodejme , any ideas ??

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.scrappers.SEEDEMO-5MjuNIa9PwEsBkt3tuwPKA==/base.apk"],nativeLibraryDirectories=[/data/app/com.scrappers.SEEDEMO-5MjuNIa9PwEsBkt3tuwPKA==/lib/arm64, /data/app/com.scrappers.SEEDEMO-5MjuNIa9PwEsBkt3tuwPKA==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libdecodejme.so"
        at java.lang.Runtime.loadLibrary0(Runtime.java:1012)
        at java.lang.System.loadLibrary(System.java:1669)
        at com.jme3.texture.plugins.AndroidNativeImageLoader.<clinit>(AndroidNativeImageLoader.java:23)
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:453)
        at java.lang.Class.forName(Class.java:378)
        at com.jme3.asset.AssetConfig.acquireClass(AssetConfig.java:62)
        at com.jme3.asset.AssetConfig.loadText(AssetConfig.java:87)
        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:145)
        at com.jme3.app.LegacyApplication.initAssetManager(LegacyApplication.java:220)
        at com.jme3.app.LegacyApplication.initialize(LegacyApplication.java:618)
        at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:196)
        at com.scrappers.superiorExtendedEngine.jmeSurfaceView.JmeSurfaceView.lambda$initialize$0$JmeSurfaceView(JmeSurfaceView.java:144)
        at com.scrappers.superiorExtendedEngine.jmeSurfaceView.-$$Lambda$JmeSurfaceView$GVxrp46CuA5FtrGwVmMiRm--huo.run(Unknown Source:2)
        at com.jme3.app.LegacyApplication$RunnableWrapper.call(LegacyApplication.java:822)
        at com.jme3.app.AppTask.invoke(AppTask.java:147)
        at com.jme3.app.LegacyApplication.runQueuedTasks(LegacyApplication.java:733)
        at com.jme3.app.LegacyApplication.update(LegacyApplication.java:748)
        at com.jme3.app.SimpleApplication.update(SimpleApplication.java:245)
        at com.scrappers.superiorExtendedEngine.jmeSurfaceView.JmeSurfaceView.update(JmeSurfaceView.java:169)
        at com.jme3.system.android.OGLESContext.onDrawFrame(OGLESContext.java:355)
        at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1571)
        at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1270)

MY Grade file :

apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"
    defaultConfig {
        applicationId "com.scrappers.SEEDEMO"
        minSdkVersion 25
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    configurations.all {
        exclude group:"org.jmonkeyengine",module:"jme3-desktop"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
//runtime
tasks.withType(JavaExec){
    enableAssertions false
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.navigation:navigation-fragment:2.3.3'
    implementation 'androidx.navigation:navigation-ui:2.3.3'
    implementation project(path: ':SuperiorPlugin')
    testImplementation 'junit:junit:4.13.1'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation "org.jmonkeyengine:jme3-core:3.4.0-SNAPSHOT"
    implementation "org.jmonkeyengine:jme3-effects:3.4.0-SNAPSHOT"
    implementation "org.jmonkeyengine:jme3-android-native:3.4.0-SNAPSHOT"
    implementation "org.jmonkeyengine:jme3-android:3.4.0-SNAPSHOT"
    implementation "org.jmonkeyengine:jme3-lwjgl:3.4.0-SNAPSHOT"
    implementation 'com.github.stephengold:Minie:4.0.0'
    implementation 'com.github.stephengold:Garrett:0.1.2'

}

Allright , replacing :

    implementation "org.jmonkeyengine:jme3-android-native:3.4.0-SNAPSHOT"

w/ :

    implementation "org.jmonkeyengine:jme3-android-native:3.4.0-alpha1"

got it working ,since my change was only in android, but donot know why.

Looking at other android issues on git , found this :

the same exception as the one quoted above…

Seems that Android.mk make file cannot link the java module jme3-android with the native module jme3-android-native in the context of mavenLocal() repository OR actually the decode.gradle which copies the native files to the java module , because this exception can only be fixed by :

, replacing :

    implementation "org.jmonkeyengine:jme3-android-native:3.4.0-SNAPSHOT"

w/ :

    implementation "org.jmonkeyengine:jme3-android-native:3.4.0-alpha1"

in your app dependencies.

There’s an option of trying C-make or merge the 2 modules like what Android Studio recently do , when starting an android NDK based application , a folder for cpp & a folder for java .