2016-05-25 8 views
0

Ich versuche, das NDK zu verwenden, und ich habe mit offiziellen Proben gearbeitet, um loszulegen. Ich habe es geschafft, die „Hallo JNI“ Probe anzuschalten: https://github.com/googlesamples/android-ndk/tree/master/hello-jniNDK für Anfänger: Wo/wie kann man Quelldateien hinzufügen?

(I mit Android Studio arbeiten)

Aber ich weiß nicht, wie Quelldateien in dem Projekt hinzuzufügen. So zum Beispiel, vorausgesetzt, die JNI-Funktion (I entfernt Makros, die nicht sinnvoll hierfür sind):

jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, 
                jobject thiz) 
{ 
    return (*env)->NewStringUTF(env, "Hello from JNI !"); 
} 

Lassen Sie uns sagen, dass ich die Zeichenfolge aus einer C-Funktion „getString()“ erhalten möchten, definiert als unten:

const char* getString() 
{ 
    return "Hello from getString()"; 
} 

//Then, JNI function becomes 

jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, 
                jobject thiz) 
{ 
    return (*env)->NewStringUTF(env, getString()); 
} 

Wenn erstelle ich eine getString.h, wo ich die Funktion deklarieren, und setzen Sie die Umsetzung in meiner aktuellen und nur eine Quelldatei, wie ein Zauber funktioniert alles. Also, Header funktionieren.

Wenn ich jedoch eine GetString.c-Datei erstellen, in der ich die Implementierung stelle, hört mein Code auf zu kompilieren. Ich verstehe, dass GetString.o nicht verlinkt wird (oder gar kompiliert wird? Ich weiß es nicht), aber ich habe keine Ahnung, wie man Android Studio anweist, sowohl hallo-jni.c (Quelldatei des Samples) als auch GetString.c

Sollte ich meine Hände schmutzig machen und Gradle-Dateien ändern? Ich habe auch von einer Datei namens Android.mk gehört, die sich wie ein Makefile verhält, aber ich habe es nicht im Projekt gefunden. Wenn es verpflichtend ist, sollte ich es erstellen und was hineinlegen? Wenn nicht, weiß die IDE, dass er hallo-jni.c erstellen muss? (AKA „Wie hat das Projekt konfiguriert, bevor ich es geändert“)

Wenn Sie irgendwelche Informationen über java-Seite Dinge oder gradle Skripte müssen, nur noch einen Blick auf die GitHub Link :)

Antwort

0

Nun, ein ein bisschen Testen war genug, um zu bestätigen, was ich dachte. Ich musste nur Android.mk erstellen:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_SRC_FILES := hello-jni.c, GetString.cpp 
LOCAL_MODULE := hello-jni 

include $(BUILD_SHARED_LIBRARY)