您的位置:首页 > 移动开发 > Android开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: