android 怎么使用swig

 我来答
在晴天的雨伞
2016-05-30 · TA获得超过6869个赞
知道大有可为答主
回答量:5761
采纳率:86%
帮助的人:1221万
展开全部
一,下载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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式