Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JNI从Android调用C,只使用C共享库和头文件_Java_Android_Java Native Interface - Fatal编程技术网

Java 使用JNI从Android调用C,只使用C共享库和头文件

Java 使用JNI从Android调用C,只使用C共享库和头文件,java,android,java-native-interface,Java,Android,Java Native Interface,你好, 我有以下用C编写的库,但没有它的源代码,只有libapp_模块 Android Studio 0.3.1 我有此库的头文件: libapp_module.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped 问题是,当我尝试从Android应用程序调用该函数时出现异常: #ifdef __cplusplus extern

你好,

我有以下用C编写的库,但没有它的源代码,只有libapp_模块

Android Studio 0.3.1
我有此库的头文件:

libapp_module.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
问题是,当我尝试从Android应用程序调用该函数时出现异常:

#ifdef __cplusplus
extern "C" {
#endif

#ifdef _WIN32
#define LIB_API(type) __declspec(dllexport) type
#else 
#define LIB_API(type) type
#endif

LIB_API(int) module_init();

#ifdef __cplusplus
}
#endif
这就是我正在做的

我已经创建了一个Android应用程序,我想从我的应用程序中调用该模块_init(),所以我创建了一个名为App_module.java的类

D/dalvikvm﹕ Added shared lib /data/app-lib/com.sunsystems.snaptest-1/libapp_module.so 0x416f3d88
D/dalvikvm﹕ No JNI_OnLoad found in /data/app-lib/com.sunsystems.snaptest-1/libapp_module.so 0x416f3d88, skipping init
W/dalvikvm﹕ No implementation found for native Lcom/sunsystems/snaptest/App_Module;.module_init:()I
UnsatisfiedLinkError: Native method not found: com.sunsystems.snaptest.App_Module.module_init:()I
我在项目的根目录中使用了JNI:

public class App_Module {
    /* Load native C libraries */
    static {
        System.loadLibrary("app_module");
    }

    public native static int module_init();
}
它生成了以下标头接口:

javah -jni -classpath build/classes/debug -d jni/ com.sunsystems.snaptest.App_Module
所以我猜它在libapp_module.So库中找不到符号


非常感谢您的建议,

您必须实现本机方法并使其调用库中的函数。例如:

App_Module.module_init()

关于JNI或Android NDK的任何教程都会有更多的细节。

我关注了你和@Joni。但是我收到了错误
java.lang.unsatifiedlinkerror:module_init
。你们能帮我解决这个问题吗?@joni:我跟着你们和@joni。但是我收到了错误
java.lang.unsatifiedlinkerror:module_init
。你能帮我解决这个问题吗?
App_Module.module_init()
#include "header_file_for_your_library.h"

#include "com_sunsystems_snaptest_App_Module.h"

JNIEXPORT jint JNICALL Java_com_sunsystems_snaptest_App_Module_module_1init(JNIEnv *env, jclass klass) {
    return module_init();
}