Android 使用SWIG生成Jni代码

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

二以HelloJni为例子

    导入ndk sample的HelloJni工程。

   

三 创建SWIG接口文件

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

[cpp] view plain copy
 
 print?
  1. %module Unix  
  2.   
  3.   
  4. %{  
  5. #include <unistd.h>  
  6. %}  
  7.   
  8.   
  9. typedef unsigned int uid_t;  
  10.   
  11.   
  12. 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?
  1. ifndef MY_SWIG_PACKAGE  
  2.    $(error MY_SWIG_PACKAGE is not defined.)  
  3. endif  
  4.    
  5. MY_SWIG_OUTDIR:=$(NDK_PROJECT_PATH)/src/$(subst .,/,$(MY_SWIG_PACKAGE))  
  6. ifndef MY_SWIG_TYPE  
  7.     MY_SWIG_TYPE:=C  
  8. endif  
  9.   
  10. #ifeq($(MY_SWIG_TYPE),cxx)  
  11. #   MY_SWIG_MODE:=c++  
  12. #else  
  13. #   MY_SWIG_MODE:=    
  14. #endif  
  15.   
  16. LOCAL_SRC_FILES+=$(foreach MY_SWIG_INTERFACE,  
  17.       $(MY_SWIG_INTERFACES),  
  18.       $(basename $(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))  
  19.         
  20. #LOCAL_CPP_EXTENSION+=.cxx  
  21.   
  22. %_warp.$(MY_SWIG_TYPE) : %.i   
  23.    $(call host-mkdir,$(MY_SWIG_OUTDIR))   
  24.    swig -java   
  25.    $(MY_SWIG_MODE)    
  26.    -package $(MY-SWIG_PACKAGE)    
  27.    -outdir $(MY_SWIG_OUTDIR)     
  28.    $<         


修改jni目录下的Android.mk:

[cpp] view plain copy
 
 print?
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE    := hello-jni  
  6. LOCAL_SRC_FILES := hello-jni.c  
  7.   
  8. MY_SWIG_PACKAGE:=com.apress.swig  
  9. MY_SWIG_INTERFACES:=Unix.i  
  10. MY_SWIG_TYPE:=c  
  11. include $(LOCAL_PATH)/my-swig-generate.mk  
  12.   
  13. include $(BUILD_SHARED_LIBRARY)  


编译ndk.

六 加入调用代码

修改HelloJni.java:

[java] view plain copy
 
 print?
  1. TextView  tv = new TextView(this);  
  2.        tv.setText( stringFromJNI() +" uid:"+Unix.getuid());  
  3.        setContentView(tv);  


编译运行

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

原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/7278612.html