2016-08-19 3 views
0

Ich bin mit Android Studio 2.1.2 ich nicht Experimental Plugin bin mitAndroid Studio JNI mit C++ UnsatisfiedLinkError

Überprüfen Sie bitte die folgenden Dateien und Überprüfen Sie den Fehler Ich erhalte.

Ich löste das Problem. Editierte Datei ist wie folgt. Die Art und Weise, wie ich es behoben habe, ist möglicherweise nicht der richtige Weg, da ich die Eigenschaft veraltet benutze, aber es funktioniert. Das experimentelle Plugin kann immer noch instabil sein. Ich werde es bald mit dem experimentellen Plugin versuchen.

build.gradle von Modul

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*/ 
    } 

folgenden 4 Dateien sind in jni Ordner Haupt

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(); 

hier, wenn ich auf Verfahren schweben getStringFromJni es zeigt Kann JNI-Funktion entsprechende

ich nicht lösen Set NDK-Pfad in der Projektstruktur und in der Pfad-Umgebungsvariablen auch.

erhalte ich folgende Fehler

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) 

ich SO auch viel gesucht, aber ich immer bin nicht, was ich verpasst?

Kein Fehler jetzt, oben ist der Fehler behoben. Bitte überprüfen Sie meine Antwort auf diese Frage.

+0

Sie vermissen 'JNICALL', die Signatur sollte mit' JNIEXPORT jstring JNICALL' beginnen, – marcinj

+0

Danke für die Eingaben. Ja du hast Recht. Ich habe es in meiner Datei hinzugefügt. Bitte überprüfen Sie meine bearbeiteten Dateien oben. – AdiAtAnd

Antwort

0

Eine wichtige Änderung, die ich in der Datei gradle.properties gemacht ist, ist wie folgt

android.useDeprecatedNdk = true

so seine im Zusammenhang mit Android Studio Version 2.1.2, Für diese Version ist das experimentelle Plugin die Standardoption und der Ansatz, den ich verwende, ist veraltet. Ich werde bald mit dem experimentellen Plugin versuchen.

1

ich glaube, das Problem in Ihrer Android.mk Datei ist:

LOCAL_SOURCE_FILE := HelloJni.cpp 

AFAIK der Android-Build-System nicht Variable dieses Namens verwenden. Es sollte sein:

LOCAL_SRC_FILES := HelloJni.cpp 
+0

Danke für die Eingabe.Ich habe diese Änderung gemacht, jetzt auf ndk-build meine cpp-Datei kompiliert. Dann nachdem ich einige Fehler in meiner CPP-Datei behoben habe, zB NewStringUTF Funktionsaufruf usw., habe ndk-build .so generiert aber immer noch auf laufender Anwendung bekomme ich dasselbe " UnbefriedigterLinkError ". Eine Sache ist in meiner MainActivity-Klasse, wenn ich über die native Methode schwebe, zeigt es mir kann die entsprechende JNI-Funktion nicht auflösen. Können Sie mir bitte dabei helfen? – AdiAtAnd

+0

Fehle ich irgendwelche Import in MainActivity.java .. die Android-UI-Datei? – AdiAtAnd

Verwandte Themen