我使用的是Android 2.1.2工作室我不使用实验插件Android Studio中JNI与C++ UnsatisfiedLinkError
请检查下列文件,并检查我得到的错误。
我解决了这个问题。编辑的文件如下。他们的方式我修正它可能不是正确的方式,因为我设置属性使用不推荐的方式,但它的工作原理。实验性插件仍然可能不稳定。我将很快试用实验性插件。
从模块
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
/*jni.srcDirs = [] not using this, I commented this. Please check SO links which explained when to use this and when not to use this*/
}
以下4个文件的build.gradle是在主
JNI夹Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := HelloJni.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := all
HelloJni .cpp
#include <jni.h>
#include <Header.h>
JNIEXPORT jstring JNICALL Java_com_example_m1035325_ndksampleapp_MainActivity_getStringFromJni(JNIEnv *env,jobject thiz)
{
env-> NewStringUTF ("Hellofrom JNI!");
}
Header.h
#include <jni.h>;
using namespace std;
#ifndef HEADER
#define HEADER
extern "C" {
JNIEXPORT jstring JNICALL Java_com_example_m1035325_ndksampleapp_MainActivity_getStringFromJni(JNIEnv *env, jobject obj);
}
#endif //NDKSAMPLEAPP_HEADER_H
MainActicity.java
static
{
System.loadLibrary("mylib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tvHello=(TextView)findViewById(R.id.tvHello);
tvHello.setText(getStringFromJni());
}
public native String getStringFromJni();
在这里,当我在法悬停getStringFromJni它显示无法解析对应的JNI功能
我已经设置项目结构和路径环境变量中的NDK路径。
我收到以下错误
Process: com.example.m1035325.ndksampleapp, PID: 12831
java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.example.m1035325.ndksampleapp.MainActivity.getStringFromJni() (tried Java_com_example_m1035325_ndksampleapp_MainActivity_getStringFromJni and Java_com_example_m1035325_ndksampleapp_MainActivity_getStringFromJni__)
at com.example.m1035325.ndksampleapp.MainActivity.getStringFromJni(Native Method)
我搜索了很多也是如此,但我没有得到什么,我错过了什么?
现在没有错误,上面的错误是固定的。请检查我对这个问题的回答。
您缺少'JNICALL',签名应该以'JNIEXPORT jstring JNICALL'开头, – marcinj
感谢您的输入。是的,你是对的。我将其添加到我的文件中。请检查我上面编辑的文件。 – AdiAtAnd