【发布时间】:2016-08-19 14:58:43
【问题描述】:
我使用的是 Android Studio 2.1.2 我没有使用 Experimental Plugin
请检查以下文件并检查我收到的错误。
我解决了这个问题。编辑后的文件如下。我修复它的方式可能不是正确的方式,因为我将属性设置为使用不推荐使用的方式,但它可以工作。实验性插件仍然可能不稳定。我很快就会尝试使用实验性插件。
来自模块的build.gradle
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 个文件位于 main 的 jni 文件夹中
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := HelloJni.cpp
include $(BUILD_SHARED_LIBRARY)
应用程序.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!");
}
头文件.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 函数
我已经在 Project Structure 和 Path 环境变量中设置了 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)
我也在 SO 上进行了很多搜索,但没有得到我错过的内容?
现在没有错误,上述错误已修复。请检查我对这个问题的回答。
【问题讨论】:
-
您缺少
JNICALL,签名应以JNIEXPORT jstring JNICALL开头, -
感谢您的意见。是的,你是对的。我将它添加到我的文件中。请检查我上面编辑的文件。
标签: android c++ android-studio android-ndk java-native-interface