我在jni文件夹中添加了一个简单的标题和c文件。
-jni
-calculate.c
-calculate.h
-HelloJNI.cpp
-Android.MK
这是代码。 一个。 calculate.h
int add(int x, int y);
int minus(int x, int y);
湾calculate.c
#include "calculate.h"
/**
* Implementation add
*/
int add(int x, int y){
return x + y;
}
/**
* Implementation minus
*/
int minus(int x, int y){
return x - y;
}
c.HelloJNI.cpp
#include <jni.h>
#include <android/log.h>
#include <string.h>
#include "calculate.h"
extern "C" {
JNIEXPORT jstring JNICALL Java_com_farissyariati_hellojni_MainActivity_stringFromJni(JNIEnv *env, jobject obj);
};
JNIEXPORT jstring JNICALL Java_com_farissyariati_hellojni_MainActivity_stringFromJni(JNIEnv *env, jobject obj){
//Calculate *myCalculate = new Calculate();
//int result = myCalculate->add(10,20);
int res = add(10, 20);
return env->NewStringUTF("Hello From CPP");
}
在添加此代码之前: int res = add(10,20);
应用程序按预期运行。假设,我必须在Android.mk中添加一些内容,我应该为它添加什么?这是我的Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloJNI
LOCAL_SRC_FILES := HelloJNI.cpp
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
include $(BUILD_SHARED_LIBRARY)
更新。
我改变了我的Android.mk,但仍然无法正常工作。
LOCAL_PATH := $(call my-dir)
MY_SRC_FILE = /Users/farissyariati/Documents/EclipseProjects/HelloJNI/jni
include $(CLEAR_VARS)
LOCAL_MODULE := HelloJNI
LOCAL_SRC_FILES := HelloJNI.cpp
LOCAL_C_INCLUDES := $(MY_SRC_FILE)/calculate/
LOCAL_SRC_FILES += $(MY_SRC_FILE)/calculate/calculate.c
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
include $(BUILD_SHARED_LIBRARY)
答案 0 :(得分:0)
您可以在一行中指定多个源文件,如下所示:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloJNI
LOCAL_SRC_FILES := HelloJNI.cpp calculate.c
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
include $(BUILD_SHARED_LIBRARY)
但是,由于您从C ++调用C代码,因此需要使用extern&#34; C&#34;指定C风格的链接。您可以像这样包装#include(在HelloJNI.cpp中):
extern "C" {
#include "calculate.h"
}
或者,您可以更改calculate.h以处理与C ++代码的链接,如this question的答案所示。