Я использую Android Studio 2.1.2 Я не использую экспериментальный плагин
Пожалуйста, проверьте следующие файлы и проверьте ошибку, которую я получаю.
Я решил проблему. Отредактированный файл выглядит следующим образом. То, как я это исправил, может быть не правильным, так как я устанавливаю свойство устаревшим способом, но это работает. Экспериментальный плагин все еще может быть нестабильным. Я скоро попробую с экспериментальным плагином.
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 файла находятся в папке 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 в Структуре проекта и в переменной среды Path.
Я получаю следующую ошибку
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, но не понимаю, что пропустил?
Нет ошибок сейчас, ошибка выше исправлена. Пожалуйста, проверьте мой ответ на этот вопрос.
Я думаю, что проблема в вашем файле Android.mk:
LOCAL_SOURCE_FILE := HelloJni.cpp
AFAIK система сборки Android не использует переменную с таким именем. Так должно быть:
LOCAL_SRC_FILES := HelloJni.cpp
Одно важное изменение, которое я сделал, находится в файле gradle.properties:
android.useDeprecatedNdk = верно
поэтому он относится к Android Studio версии 2.1.2, для этой версии экспериментальный плагин является опцией по умолчанию, а подход, который я использую, устарел.
Я скоро попробую с экспериментальным плагином.