我正在使用Android Studio 2.1.2我没有使用实验插件
请检查以下文件并检查我收到的错误。
我解决了这个问题。编辑文件如下。他们修复它的方式可能不是正确的方法,因为我设置属性使用弃用的方式,但它的工作原理。实验插件仍然可能不稳定。我很快就会尝试使用实验插件。
build.gradle from Module
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个文件位于主
的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函数
我在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上搜索了很多,但我没有得到我错过的东西?
现在没有错误,修正了以上错误。请检查我对这个问题的回答。
答案 0 :(得分:1)
我认为问题出在您的Android.mk文件中:
LOCAL_SOURCE_FILE := HelloJni.cpp
AFAIK Android构建系统不使用该名称的变量。它应该是:
LOCAL_SRC_FILES := HelloJni.cpp
答案 1 :(得分:0)
我做的一个重要更改是在文件gradle.properties中,如下所示
android.useDeprecatedNdk =真
因此它与Android Studio版本2.1.2相关,对于此版本的实验插件是默认选项,我不推荐使用我正在使用的方法。 我很快就会尝试使用实验插件。