2

大家好,我正在使用jni代码在我的应用程序中生成一些数字。当我在我的设备上安装并运行它时,它使用 jni 代码可以正常工作,但是当我创建AOSP构建闪烁system.imgboot.img在我的设备UnsatisfiedLinkError中运行时获取jni代码时。

我的项目结构、代码片段和 logcat 如下所示

在此处输入图像描述

下面的代码用于 JNI Wrapper 类

随机生成器.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");
  }
}

安卓.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)

应用程序.mk

APP_ABI := armeabi armeabi-v7a arm64-v8a

构建.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代码片段。

安卓.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 应用程序时,它可以按预期的 jni 代码正常工作,甚至 AOSP 构建也成功完成。但是当我刷新 AOSP 构建时,我 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问题。请有人可以帮助我。

提前致谢。

4

0 回答 0