android 怎么使用swig
1个回答
展开全部
一,下载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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询