NDK初学者:在哪里/如何添加源文件?

时间:2016-05-25 18:35:32

标签: android android-studio java-native-interface

我正在尝试使用NDK,我一直在使用官方样本开始。我设法让“Hello JNI”样本工作: https://github.com/googlesamples/android-ndk/tree/master/hello-jni

(我使用的是Android Studio)

但我不知道如何将源文件添加到项目中。因此,例如,提供的JNI函数是(我删除了对此无用的宏):

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

假设我想从C函数“getString()”中获取字符串,定义如下:

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

如果我创建了一个getString.h,我在其中声明了该函数,并将实现放在我当前且只有一个源文件中,那么一切都像魅力一样。所以,标题确实有用。

但是,如果我创建一个GetString.c文件,我放置了实现,我的代码停止编译。我明白这是因为GetString.o没有链接(甚至编译?我不知道),但我不知道如何告诉Android Studio编译hello-jni.c(样本的源文件)和GetString.c

我应该弄脏手并修改gradle文件吗? 我还听说过一个名为Android.mk的文件,它就像一个makefile,但我还没有在项目中找到它。如果它是强制性的,我应该创建它,以及放入什么?如果不是,IDE如何知道他必须构建hello-jni.c? (AKA“在修改之前项目是如何配置的”)

如果您需要有关java端事物或gradle脚本的任何信息,请查看github链接:)

1 个答案:

答案 0 :(得分:0)

嗯,一些测试足以证实我的想法。我只需要创建Android.mk:

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

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

include $(BUILD_SHARED_LIBRARY)