Исключение Ljava/lang/UnsatisfiedLinkError; выдается при инициализации в AOSP Build

Привет всем, что я использую jni код для генерации некоторого числа в моем приложении. Когда я устанавливаю и запускаю его на своем устройстве, он работает нормально, как и ожидалось, с кодом JNI, но при создании прошивки сборки AOSP system.img а также boot.img в моем устройстве становится UnsatisfiedLinkError во время выполнения для jni код.

Структура моего проекта, фрагмент кода и logcat приведены ниже

Ниже приведен код для класса JNI Wrapper

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"
    }
}

И ниже по основному применению Android.mk фрагмент кода.

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

Теперь проблема в том, что когда я запускаю приложение для Android с этим кодом, оно работает нормально, как и ожидалось, даже если сборка AOSP успешно завершена. Но когда я прошил AOSP build, я получаю UnsatisfiedLinkError во время выполнения.

 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)

Примечание: после создания AOSP.so файла, связанного с code-generator но не находя пути в приложении, я думаю, что-то пошло не так Android.mk configuartion. Пожалуйста, может кто-нибудь помочь мне в этом.

Заранее спасибо.

0 ответов

Другие вопросы по тегам