贴代码:

test.h

int adds(int a,int b);int subs(int a,int b);

test.c

#include "test.h"int adds(int a,int b){   return (a-b);}int subs(int a,int b){   return (a+b);}

com_ycan_ycantestlib.h

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_ycan_ycantestlib */#ifndef _Included_com_ycan_ycantestlib#define _Included_com_ycan_ycantestlib#ifdef __cplusplusextern "C" {#endif/* * Class:     com_ycan_ycantestlib * Method:    add * Signature: (II)I */JNIEXPORT jint JNICALL Java_com_ycan_ycantestlib_add  (JNIEnv *, jobject, jint, jint);/* * Class:     com_ycan_ycantestlib * Method:    sub * Signature: (II)I */JNIEXPORT jint JNICALL Java_com_ycan_ycantestlib_sub  (JNIEnv *, jobject, jint, jint);#ifdef __cplusplus}#endif#endif

com_ycan_ycantestlib.cpp

include "com_ycan_ycantestlib.h"#ifdef __cplusplusextern "C" {#endif#include "test.h"#ifdef __cplusplus}#endifJNIEXPORT jint JNICALL Java_com_ycan_ycantestlib_add  (JNIEnv *evn, jobject thiz, jint a, jint b){    int c  =adds(a,b);    return c;}JNIEXPORT jint JNICALL Java_com_ycan_ycantestlib_sub  (JNIEnv *evn, jobject thiz, jint a, jint b){    int c  =subs(a,b);    return c;}

Android.mk

#Android.mk和需要编译的源文件在同一目录下#LOCAL_PATH:= $(call my-dir)#源文件列表#common_SRC_FILES  :=\ test.c \ com_ycan_ycantestlib.cpp#头文件列表#common_C_INCLUDES :=\ test.h \ com_ycan_ycantestlib.h#模块开始#include $(CLEAR_VARS)#源文件列表#LOCAL_SRC_FILES := $(common_SRC_FILES) #头文件列表#LOCAL_C_INCLUDES += $(common_C_INCLUDES)#生成的程序名#LOCAL_MODULE:= com_ycan_ycantestlib  #此处有三个选择:可执行程序,动态库,静态库#include $(BUILD_SHARED_LIBRARY)

这是c++调用c的情况,解决问题的关键就是com_ycan_ycantestlib.cpp中的这段:

#ifdef __cplusplus   extern "C" {  #endif   #include "test.h"   #ifdef __cplusplus   }  #endif  

反过来,也是一样的,需要注意的是这段只能加在c++代码中。

更多相关文章

  1. android color 透明度列表
  2. Android(安卓)使用SWIG生成Jni代码
  3. android studio 自用快捷键方案
  4. Android学习笔记--service部分
  5. WebView的使用,android与JS混编
  6. 使用泛型方法在Java中安全地进行强制类型转换
  7. HockeyApp环境搭建
  8. Android数据通信开发与应用(四):实战开发
  9. android监控SIM卡状态的广播示例代码

随机推荐

  1. Android根据包名取得指定程序包的信息(名
  2. Android(安卓)- 手机开发调试无法输出log
  3. Ubuntu16.04 LTS安装Android(安卓)studio
  4. Android(安卓)adb不是内部或外部命令 问
  5. Android(安卓)View(一)
  6. Android(安卓)开源动画框架:NineOldAndroi
  7. Android底部导航栏+消息提醒
  8. Android(安卓)数据存储之SharedPreferenc
  9. 《大话移动APP测试:Android与iOS应用测试
  10. Android语音识别编程初步