通过SWIG生成jni代码

1、在jni文件夹下面创建Unix.i

/*模块名 Unix*/
//每次调用SWIG都需要指定一个模块名,模块名用于给生成的封装文件命名
%module Unix


%{
/*包含POSIX操作系统API*/
#include <unistd.h>
%}


/*告诉SWIG uid_t.*/
typedef unsigned int uid_t;


/*让SWIG 包装 getuid函数*/


extern uid_t getuid(void);

2、在src下面创建com/apress/swig目录

3、通过swig -java -package com.apress.swig -outdir src/com/apress/swig jni/Unix.i在swig目录下创建Unix和UnixJNI类


4、在jni文件夹下面创建my-swig-generate.mk文件

#  
#Android构建系统的SWIG扩展  
#  
  
#检查变量 MY_SWIG_PACKAGE 是否已经定义  
ifndef MY_SWIG_PACKAGE  
  $(error MY_SWIG_PACKAGE is not defined.)  
endif  
  
#用斜线替换java目录中的圆点  
MY_SWIG_OUTDIR:= $(NDK_PROJECT_PATH)/src/$(subst .,/,$(MY_SWIG_PACKAGE))  
#SWIG的默认类型是C  
ifndef MY_SWIG_TYPE  
  MY_SWIG_TYPE := c  
endif  
  
#设置SWIG模式  
ifeq ($(MY_SWIG_TYPE),cxx)  
  MY_SWIG_MODE := -c++  
else  
  MY_SWIG_MODE :=   
endif  
  
#追加SWIG封装源文件
LOCAL_SRC_FILES+=$(foreach MY_SWIG_INTERFACE,\
  $(MY_SWIG_INTERFACES),\
  $(basename $(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))
#LOCAL_SRC_FILES+=$(foreach MY_SWIG_INTERFACE,\
#      $(MY_SWIG_INTERFACES),\
#      $(basename $(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE)) 
 #添加.cxx作为c++扩展名  
 LOCAL_CPP_EXTENSION += .cxx  
   
 #生成SWIG封闭代码(indention should be tabs for this block)  
 %_wrap.$(MY_SWIG_TYPE) : %.i  
    $(call host-mkdir,$(MY_SWIG_OUTDIR))  
swig -java \  
$(MY_SWIG_MODE) \  
-package $(MY_SWIG_PACKAGE) \  
-outdir $(MY_SWIG_OUTDIR) \  
    $<  


5、在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)

6、在jni文件夹下使用ndk-build

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值