gpt4 book ai didi

java - 找不到 native 方法 : com. example.pjtest.JniClass.get_time:()C

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:52 25 4
gpt4 key购买 nike

我正在尝试创建简单的 jni,但应用程序崩溃了。我无法找到我所犯的错误。这是我的代码:

示例.c

 #include <time.h>
double My_variable = 3.0;

int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}

int my_mod(int x, int y) {
return (x%y);
}

char *get_time()
{
time_t ltime;
time(&ltime);
return ctime(&ltime);
}

Android.mk

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := example
LOCAL_CFLAGS := -Werror
LOCAL_SRC_FILES := example.c
LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

在此之后,我使用 NDK 构建了文件夹。在 lib 中生成的文件是 libexample.so。还有 example.oexample.o.d 在 obj 文件夹中。当我按名称 example 加载 lib 时,它仅在调用方法时出错,但当我按名称 l*ibexample* 加载时,它在加载时出错lib 以及调用方法时。

JNI

package com.example.pjtest;

public class JniClass {

public final static native char get_time();
}

主 Activity

package com.example.pjtest;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
try {
System.loadLibrary("example");
} catch (UnsatisfiedLinkError e) {
e.printStackTrace();
}
try{
System.out.print(JniClass.get_time());
}
catch(Exception e )
{
e.printStackTrace();
}

}
}

这是日志:

04-01 12:32:18.964: E/AndroidRuntime(5325): java.lang.UnsatisfiedLinkError: Native method not found: com.example.pjtest.JniClass.get_time:()C
04-01 12:32:18.964: E/AndroidRuntime(5325): at com.example.pjtest.JniClass.get_time(Native Method)
04-01 12:32:18.964: E/AndroidRuntime(5325): at com.example.pjtest.MainActivity.onCreate(MainActivity.java:18)
04-01 12:32:18.964: E/AndroidRuntime(5325): at android.app.Activity.performCreate(Activity.java:5066)
04-01 12:32:18.964: E/AndroidRuntime(5325): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1101)

最佳答案

你必须在你的 Activity 中加载你的库

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

确保您的 .so 文件位于您尝试运行应用程序的设备中的 lib 文件夹或/system/lib/中。

将此添加到您的 Example.c

jint Java_com_example_pjtest_get_time(JNIEnv *env)
{
time_t ltime;
time(&ltime);
return ctime(&ltime);

}

关于java - 找不到 native 方法 : com. example.pjtest.JniClass.get_time:()C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com