Android(安卓)使用SWIG生成Jni代码
16lz
2021-01-26
一,下载SWIG,并设置好环境变量
二以HelloJni为例子
导入ndk sample的HelloJni工程。
三 创建SWIG接口文件
在jni目录下新建文件Unix.i,输入SWIG代码:
[cpp] view plain copy print ?
- %moduleUnix
- %{
- #include<unistd.h>
- %}
- typedefunsignedintuid_t;
- 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 ?
- ifndefMY_SWIG_PACKAGE
- $(errorMY_SWIG_PACKAGEisnotdefined.)
- endif
- MY_SWIG_OUTDIR:=$(NDK_PROJECT_PATH)/src/$(subst.,/,$(MY_SWIG_PACKAGE))
- ifndefMY_SWIG_TYPE
- MY_SWIG_TYPE:=C
- endif
- #ifeq($(MY_SWIG_TYPE),cxx)
- #MY_SWIG_MODE:=c++
- #else
- #MY_SWIG_MODE:=
- #endif
- LOCAL_SRC_FILES+=$(foreachMY_SWIG_INTERFACE,\
- $(MY_SWIG_INTERFACES),\
- $(basename$(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))
- #LOCAL_CPP_EXTENSION+=.cxx
- %_warp.$(MY_SWIG_TYPE):%.i\
- $(callhost-mkdir,$(MY_SWIG_OUTDIR))\
- swig-java\
- $(MY_SWIG_MODE)\
- -package$(MY-SWIG_PACKAGE)\
- -outdir$(MY_SWIG_OUTDIR)\
- $<
修改jni目录下的Android.mk:
[cpp] view plain copy print ?
- LOCAL_PATH:=$(callmy-dir)
- include$(CLEAR_VARS)
- LOCAL_MODULE:=hello-jni
- LOCAL_SRC_FILES:=hello-jni.c
- MY_SWIG_PACKAGE:=com.apress.swig
- MY_SWIG_INTERFACES:=Unix.i
- MY_SWIG_TYPE:=c
- include$(LOCAL_PATH)/my-swig-generate.mk
- include$(BUILD_SHARED_LIBRARY)
编译ndk.
六 加入调用代码
修改HelloJni.java:
[java] view plain copy print ?
- TextViewtv=newTextView(this);
- tv.setText(stringFromJNI()+"uid:"+Unix.getuid());
- setContentView(tv);
编译运行
代码下载http://download.csdn.net/detail/hai836045106/7937337
更多相关文章
- android studio 自用快捷键方案
- Android学习笔记--service部分
- WebView的使用,android与JS混编
- 使用泛型方法在Java中安全地进行强制类型转换
- HockeyApp环境搭建
- Android数据通信开发与应用(四):实战开发
- android监控SIM卡状态的广播示例代码
- Android(安卓)studio如何使用SVN进行版本控制?
- android Toast大全(五种情形)