Android 使用SWIG生成Jni代码
2016-04-05 18:10
603 查看
一,下载SWIG,并设置好环境变量
二以HelloJni为例子
导入ndk sample的HelloJni工程。
三 创建SWIG接口文件
在jni目录下新建文件Unix.i,输入SWIG代码:
[cpp] view
plain copy
print?
%module Unix
%{
#include <unistd.h>
%}
typedef unsigned int uid_t;
extern uid_t getuid(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?
ifndef MY_SWIG_PACKAGE
$(error MY_SWIG_PACKAGE is not defined.)
endif
MY_SWIG_OUTDIR:=$(NDK_PROJECT_PATH)/src/$(subst .,/,$(MY_SWIG_PACKAGE))
ifndef MY_SWIG_TYPE
MY_SWIG_TYPE:=C
endif
#ifeq($(MY_SWIG_TYPE),cxx)
# MY_SWIG_MODE:=c++
#else
# MY_SWIG_MODE:=
#endif
LOCAL_SRC_FILES+=$(foreach MY_SWIG_INTERFACE,\
$(MY_SWIG_INTERFACES),\
$(basename $(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))
#LOCAL_CPP_EXTENSION+=.cxx
%_warp.$(MY_SWIG_TYPE) : %.i \
$(call host-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 := $(call my-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?
TextView tv = new TextView(this);
tv.setText( stringFromJNI() +" uid:"+Unix.getuid());
setContentView(tv);
编译运行
代码下载 http://download.csdn.net/detail/hai836045106/7937337
二以HelloJni为例子
导入ndk sample的HelloJni工程。
三 创建SWIG接口文件
在jni目录下新建文件Unix.i,输入SWIG代码:
[cpp] view
plain copy
print?
%module Unix
%{
#include <unistd.h>
%}
typedef unsigned int uid_t;
extern uid_t getuid(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?
ifndef MY_SWIG_PACKAGE
$(error MY_SWIG_PACKAGE is not defined.)
endif
MY_SWIG_OUTDIR:=$(NDK_PROJECT_PATH)/src/$(subst .,/,$(MY_SWIG_PACKAGE))
ifndef MY_SWIG_TYPE
MY_SWIG_TYPE:=C
endif
#ifeq($(MY_SWIG_TYPE),cxx)
# MY_SWIG_MODE:=c++
#else
# MY_SWIG_MODE:=
#endif
LOCAL_SRC_FILES+=$(foreach MY_SWIG_INTERFACE,\
$(MY_SWIG_INTERFACES),\
$(basename $(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))
#LOCAL_CPP_EXTENSION+=.cxx
%_warp.$(MY_SWIG_TYPE) : %.i \
$(call host-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 := $(call my-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?
TextView tv = new TextView(this);
tv.setText( stringFromJNI() +" uid:"+Unix.getuid());
setContentView(tv);
编译运行
代码下载 http://download.csdn.net/detail/hai836045106/7937337
相关文章推荐
- AndroidManifest.xml文件详解
- Android Property Animator (属性动画)第二篇
- Android消息处理机制Message,Looper,Handler
- Android 开源库实践
- Android事件分发机制详解
- Android 中的一些开发技巧(延迟启动,文件写出,透明状态栏,任意界面退出)
- Android百度地图开发 百度地图得到当前位置
- 济南android培训机构应该如何来选择?
- Android开发常用工具方法
- Android中Binder的学习
- 下拉刷新Phoenix分析
- android 预制32 64 位so, bin
- Android Studio运行NDK程序,简单的JNI实例
- Android Studio下使用JNI编程备忘录
- Android触摸事件(一)-AbsTouchEventHandle
- Android源码-Volley
- android中的事件传递机制(1)
- Android语音聊天
- Android音视频录制类MediaRecorder用法举例
- 全面解析Android中对EditText输入实现监听的方法