gpt4 book ai didi

未找到 Android NDK 和 JNI native 方法

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:00 24 4
gpt4 key购买 nike

我正在为我的 android 项目设置 NDK。我有一个带有输出到模拟器的textview的android项目“输出=”我有一个名为 somefunc() 的 native 函数,我将其添加到此字符串中并抛出错误说明。

E/AndroidRuntime(2242): java.lang.UnsatisfiedLinkError: Native method not found: com.ndktest.MainActivity.somefunc:()I

我认为需要三个文件MainActivity.javatest.c 和 Android.mk

test.c 我有

#include <string.h>
#include <jni.h>

JNIEXPORT int JNICALL
Java_com_ndktest_MainActivity_somefunc(JNIEnv * env, jobject obj)
{
return 2;
}

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILE := test.c
include $(BUILD_SHARED_LIBRARY)

MainActivity.java

package com.ndktest;

import com.ndktest.R;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends Activity {

static
{
System.loadLibrary("test");
}
public native int somefunc();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView tv = new TextView(getBaseContext());
tv.setTextSize(30);
String s = "Ouput="+somefunc();
tv.setText(s);
this.setContentView(tv);
}
}

我从网上的各种指南了解到,拼写错误是导致此错误的最常见原因。我已经尽力检查包和 c 函数代码中的拼写错误,但到目前为止我还没有看到它。我还能够在 makefile 上运行“ndk-build”,并且编译没有错误。它生成 libtest 并且我加载库。我尝试了一个 try catch 绕过它,并且 try 通过了系统加载库。所以我假设我的 c 函数命名方式存在拼写错误或错误。我读到应该在 Java 中调用 c 函数_[用下划线代替点的包][java 类][函数名称]。我想我遵守这一点。我很抱歉问题的前半部分看起来像是一个陈规定型的“为我解决这个问题”的问题。我只想要那里的代码,这样它就可以显示包的名称以及 make 的外观。谢谢

最佳答案

您可以通过调用为您的原生函数获取正确的原型(prototype)

javah -classpath bin/classes -d jni com.ndktest.MainActivity

从您的源目录。这将创建一个 header com_ndktest_MainActivity.h,它可以包含在您的 C 文件中。

(顺便说一句:如果您的 native 文件被编译为 C++,您将需要 extern "C"{...})

关于未找到 Android NDK 和 JNI native 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17640522/

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