一,下载SWIG,并设置好环境变量



二以HelloJni为例子

导入ndk sample的HelloJni工程。

三 创建SWIG接口文件

在jni目录下新建文件Unix.i,输入SWIG代码:

[cpp] view plain copy print ?
  1. %moduleUnix
  2. %{
  3. #include<unistd.h>
  4. %}
  5. typedefunsignedintuid_t;
  6. externuid_tgetuid(void);

在src目录下创建代理类的包,名为:com.apress.swig



四在命令行下调用SWIG

在项目根目录下执行



swig -java -package com.apress.swig -outdir src/com/apress/swig jni/Unix.i


执行成功后会在src/com.apress.swig包下生成java jni代码,在jni目录下会有Unix_wrap.c文件。


五将SWIG集成到Android构造过程中

在jni目录下创建my-swig-generate.mk文件:

[cpp] view plain copy print ?
  1. ifndefMY_SWIG_PACKAGE
  2. $(errorMY_SWIG_PACKAGEisnotdefined.)
  3. endif
  4. MY_SWIG_OUTDIR:=$(NDK_PROJECT_PATH)/src/$(subst.,/,$(MY_SWIG_PACKAGE))
  5. ifndefMY_SWIG_TYPE
  6. MY_SWIG_TYPE:=C
  7. endif
  8. #ifeq($(MY_SWIG_TYPE),cxx)
  9. #MY_SWIG_MODE:=c++
  10. #else
  11. #MY_SWIG_MODE:=
  12. #endif
  13. LOCAL_SRC_FILES+=$(foreachMY_SWIG_INTERFACE,\
  14. $(MY_SWIG_INTERFACES),\
  15. $(basename$(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))
  16. #LOCAL_CPP_EXTENSION+=.cxx
  17. %_warp.$(MY_SWIG_TYPE):%.i\
  18. $(callhost-mkdir,$(MY_SWIG_OUTDIR))\
  19. swig-java\
  20. $(MY_SWIG_MODE)\
  21. -package$(MY-SWIG_PACKAGE)\
  22. -outdir$(MY_SWIG_OUTDIR)\
  23. $<

修改jni目录下的Android.mk:

[cpp] view plain copy print ?
  1. LOCAL_PATH:=$(callmy-dir)
  2. include$(CLEAR_VARS)
  3. LOCAL_MODULE:=hello-jni
  4. LOCAL_SRC_FILES:=hello-jni.c
  5. MY_SWIG_PACKAGE:=com.apress.swig
  6. MY_SWIG_INTERFACES:=Unix.i
  7. MY_SWIG_TYPE:=c
  8. include$(LOCAL_PATH)/my-swig-generate.mk
  9. include$(BUILD_SHARED_LIBRARY)

编译ndk.


六 加入调用代码

修改HelloJni.java:

[java] view plain copy print ?
  1. TextViewtv=newTextView(this);
  2. tv.setText(stringFromJNI()+"uid:"+Unix.getuid());
  3. setContentView(tv);

编译运行


代码下载http://download.csdn.net/detail/hai836045106/7937337

更多相关文章

  1. android studio 自用快捷键方案
  2. Android学习笔记--service部分
  3. WebView的使用,android与JS混编
  4. 使用泛型方法在Java中安全地进行强制类型转换
  5. HockeyApp环境搭建
  6. Android数据通信开发与应用(四):实战开发
  7. android监控SIM卡状态的广播示例代码
  8. Android(安卓)studio如何使用SVN进行版本控制?
  9. android Toast大全(五种情形)

随机推荐

  1. Android(安卓)客户端上开发人人客户端系
  2. Android与iOS自定义URL Scheme唤醒app
  3. android系统体系结构
  4. [教程] [经验技巧] 任意手机移植ROM 教程
  5. Android(安卓)init language (安卓初始化
  6. Unity3d Android(安卓)SDK接入解析(二)Unit
  7. Android(安卓)init language (安卓初始化
  8. Android(安卓)UI开发第十二篇——动画效
  9. ????????????,?????Android_app
  10. Android之异步处理