Android 使用SWIG生成Jni代码

一,下载SWIG,并设置好环境变量



二以HelloJni为例子

    导入ndk sample的HelloJni工程。

   

三 创建SWIG接口文件

   在jni目录下新建文件Unix.i,输入SWIG代码:

%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文件:

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:

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:

 TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() +" uid:"+Unix.getuid());
        setContentView(tv);

编译运行


代码下载 http://download.csdn.net/detail/hai836045106/7937337

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值