【问题标题】:Android - 'Couldn't load Foo: findLibrary returned null'Android - '无法加载 Foo:findLibrary 返回 null'
【发布时间】:2012-08-01 13:25:29
【问题描述】:

我知道已经有关于堆栈溢出错误的帖子,但是从我在 SO 和 Google 上找到的内容来看,这与我的问题不符。

我正在尝试运行我的应用程序,但是每当调用本机函数时,我的程序就会崩溃,并且我会收到以下 LogCat...

08-01 09:15:57.448: E/AndroidRuntime(16966): FATAL EXCEPTION: main
08-01 09:15:57.448: E/AndroidRuntime(16966): java.lang.ExceptionInInitializerError
08-01 09:15:57.448: E/AndroidRuntime(16966):    at my.eti.commander.MainMenu.initMain(MainMenu.java:241)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at my.eti.commander.MainMenu.onCreate(MainMenu.java:81)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.os.Looper.loop(Looper.java:130)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread.main(ActivityThread.java:3683)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at java.lang.reflect.Method.invokeNative(Native Method)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at java.lang.reflect.Method.invoke(Method.java:507)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at dalvik.system.NativeStart.main(Native Method)
08-01 09:15:57.448: E/AndroidRuntime(16966): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load RelayAPI: findLibrary returned null
08-01 09:15:57.448: E/AndroidRuntime(16966):    at java.lang.Runtime.loadLibrary(Runtime.java:429)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at java.lang.System.loadLibrary(System.java:554)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at my.eti.commander.RelayAPIModel$NativeCalls.<clinit>(RelayAPIModel.java:432)
08-01 09:15:57.448: E/AndroidRuntime(16966):    ... 15 more

这是我的Android.mk 文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
EXTRA_CFLAGS := -DANDROID
LOCAL_MODULE := RelayAPI
LOCAL_SRC_FILES := RelayAPI.c
include $(BUILD_EXECUTABLE)

这是我的 jni 文件夹的图片...只会使用 RelayAPI,stringstuff 是一个未使用的额外文件。

我将所有本机函数存储在一个单独的类中,以便可以静态调用它们。但这不是问题,因为我一直在移动它们,但我只是认为这将是我完成它的最佳方式。

public static class NativeCalls {

    static {
        System.loadLibrary( "RelayAPI");
    }

    public native static byte InitRelayJava();

    public native static void FreeRelayJava();
}

【问题讨论】:

  • 我认为错误即将到来,因为 libs,,,,添加正确的 jar 文件
  • 将其构建为共享库。我认为这可能是因为您将其构建为可执行文件。我不认为 System.loadLibrary 可以加载可执行文件
  • 您将项目中的 jar/ 或其他库文件复制到了哪里??
  • 我真的不知道你在说什么文件,对不起。这些文件有什么用途?我只修改了 jni 文件夹中的 .c/.h/.mk 文件和 /src 目录中的 Java 文件

标签: android android-ndk java-native-interface


【解决方案1】:

不应该使用 include $(BUILD_SHARED_LIBRARY) 而不是 include $(BUILD_EXECUTABLE)?

【讨论】:

    【解决方案2】:

    好吧,我已经通过了错误。上个月我问了一个不同的问题,在尝试解决这个问题时,这个错误消失了。这与将我的 environment PATH variable 设置为 NDK 文件夹位置有关。 This is a link to a more in depth answer.

    【讨论】:

      【解决方案3】:

      确保在使用 ndk-build 运行您的应用程序(使用该库)之前构建您的库

      【讨论】:

        【解决方案4】:

        BUILD_EXECUTABLE 错误,这将构建一个可执行文件(提示、提示..)而不是共享库。当您使用System.loadLibrary(..) 时,您必须使用BUILD_SHARED_LIBRARY。如果它仍然不起作用,则可能是另一个错误,但是将 BUILD_EXECUTABLE 用于打算用作共享库的东西是错误的,即使它在某些情况下“可能”工作。

        【讨论】:

          【解决方案5】:

          我也有这个问题,但就我的情况而言, 您必须将基于处理器的库添加到您的项目库文件夹中。 如果您使用的是 eclipse。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-10
            • 2012-12-02
            • 1970-01-01
            • 1970-01-01
            • 2013-04-23
            相关资源
            最近更新 更多