无法调用 Android 静态库方法

Android static library method cannot be called

本文关键字:方法 静态 Android 调用      更新时间:2023-10-16

我遇到了与此人类似的问题:

安卓 NDK 导入模块/代码重用

但是由于某种原因,当我实施他们列出的解决方案时,它对我不起作用。我在项目中唯一的区别是我对整个项目使用 1 个 makefile。因此,模块如下所示:(... = 更多文件或路径)

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mod1
LOCAL_C_INCLUDES := $(LOCAL_PATH)/to/c/includes 
... 
LOCAL_SRC_FILES := stringTester.cpp 
... 
include$(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := mod2
LOCAL_C_INCLUDES := $(LOCAL_PATH)/to/c/includes 
... 
LOCAL_SRC_FILES := localSourceFile.cpp 
... 
include$(BUILD_STATIC_LIBRARY)

以此类推,再有 2 个模块,然后在最后一个模块中:

include $(CLEAR_VARS)
LOCAL_MODULE := sharedMod
LOCAL_C_INCLUDES := $(LOCAL_PATH)/to/c/includes 
... 
LOCAL_STATIC_LIBRARIES := mod1 mod2 mod3 mod4
... 
include $(BUILD_SHARED_LIBRARY)

在我的 Java 文件中:

package com.string.test
public class javaTest{
public native String returnAString();
static{
    System.LoadLibrary("sharedMod");
  }
}

遇到的问题是我无法从静态库中调用任何方法,例如 stringTester.cpp 中的任何方法,但是如果我将该文件移动到创建共享库的模块中,一切都可以正常工作,Java 包装器是正确的,方法返回我期望的数据。我不将所有文件移动到共享库中的唯一原因是它们是独立且不断发展的项目,例如我们的物理引擎等。

我还尝试将模块分开,每个模块都有自己的 makefile,并且在共享库中还有一个 cpp 文件,该文件调用静态库中的方法,但我会遇到很多未解决的引用失败。我尝试的另一个解决方案是使用 LOCAL_WHOLE_STATIC_LIBRARIES 加载静态库,但这也给了我未解决的引用错误。

任何帮助或建议不胜感激。我处于智慧的尽头,也处于一个障碍。

答案肯定是使用:

LOCAL_WHOLE_STATIC_LIBRARIES := mod1 mod2 mod3 mod4

我在包含其他库时遇到了其他问题,但是当简化为一个简单的测试用例时,使用上述宏起作用了。感谢诺斯的帮助!!