Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing in AOSP Build

550 Views Asked by At

Hi all I am using jni code to generate some number in my application. When I install and run it on my device it is working fine as expected with jni code, but when I am creating AOSP build flashing system.img and boot.img in my device getting UnsatisfiedLinkError at run time for jni code.

My Project structure, code snippet and logcat is given below

enter image description here

Below code is for JNI Wrapper class

RandomGenerator.java

public final class RandomGenerator {
private RandomGenerator() {}


public static native String getNumber(String code);

/***
 * load native library in static initializer
 */
 static 
  {
    System.loadLibrary("code-generator");
  }
}

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := code-generator
LOCAL_SRC_FILES := $(call all-cpp-files-under, samplecode/src/main/jni)
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_ABI := armeabi armeabi-v7a arm64-v8a

build.gradle

defaultConfig {
    applicationId "com.jni.test.service"
    minSdkVersion project.ext.minSdkVersion
    targetSdkVersion project.ext.targetSdkVersion
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    signingConfig signingConfigs.config
    multiDexEnabled true
    ndk{
        moduleName "code-generator"
    }
}
sourceSets.main.jniLibs.srcDirs = ['./src/main/jni/']

externalNativeBuild {

    // Encapsulates your CMake build configurations.
    cmake {
        // Provides a relative path to your CMake build script.
        path "/src/main/jni/CMakeLists.txt"
    }
}

And below on main application Android.mk code snippet.

Android.mk

#Building JNI library for Code generator
include $(CLEAR_VARS)
LOCAL_MODULE := code-generator
LOCAL_SRC_FILES := $(call all-cpp-files-under, samplecode/src/main/jni)
include $(BUILD_SHARED_LIBRARY)
#Build JNI library end

#Building sample application
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS :=optional
LOCAL_SRC_FILES := $(call all-java-files-under, samplecode/src/main/java)
LOCAL_RESOURCE_DIR :=$(LOCAL_PATH)/samplecode/src/main/res
LOCAL_ASSET_DIR := $(LOCAL_PATH)/samplecode/src/main/assets
LOCAL_MANIFEST_FILE := samplecode/src/main/AndroidManifest.xml
LOCAL_PACKAGE_NAME := samplecode
LOCAL_SHARED_LIBRARIES := code-generator
LOCAL_SDK_VERSION := current
LOCAL_CERTIFICATE :=platform
LOCAL_PROGUARD_ENABLED := disabled
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := j2xx:mylib/libs/j2xx.jar
include $(BUILD_MULTI_PREBUILT)
#Building sample application end

Now the problem is when I run android application with this code it is working fine as expected jni code, even AOSP build successfully completed. But When I flash AOSP build I getting UnsatisfiedLinkError at runtime.

 09-16 20:32:09.780 10782-10782/com.jni.test.service W/dalvikvm: Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/jni/test/service/sample/RandomGenerator;
 09-16 20:32:09.780 10782-10782/com.jni.test.service D/AndroidRuntime: Shutting down VM
 09-16 20:32:09.780 10782-10782/com.jni.test.service W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb0cdcb20)
 09-16 20:32:09.790 10782-11129/com.jni.test.service I/path: /data/data/com.jni.test.service/files/config.xml
 09-16 20:32:09.800 10782-10782/com.jni.test.service E/AndroidRuntime: FATAL EXCEPTION: main
 Process: com.jni.test.service, PID: 10782
 java.lang.UnsatisfiedLinkError: 
     Couldn't load code-generator from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.jni.test.samplecode-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.jni.test.samplecode-2, /vendor/lib, /system/lib]]]: findLibrary returned null
     at java.lang.Runtime.loadLibrary(Runtime.java:358)
     at java.lang.System.loadLibrary(System.java:526)
     at com.jni.test.service.sample.RandomGenerator.<clinit>(Random.java:40)
     at com.jni.test.service.MainActivity.onCreate(MainActivity.java:101)
     at android.app.Activity.performCreate(Activity.java:5231)
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
     at android.app.ActivityThread.access$800(ActivityThread.java:135)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
     at android.os.Handler.dispatchMessage(Handler.java:102)
     at android.os.Looper.loop(Looper.java:136)
     at android.app.ActivityThread.main(ActivityThread.java:5017)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:515)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
     at dalvik.system.NativeStart.main(Native Method)

Note: After AOSP build .so file creating related to code-generator but not finding path in application, I believe something went wrong with Android.mk configuartion. Please can someone help me on this.

Thanks in advance.

0

There are 0 best solutions below