Android 使用SWIG生成Jni代码

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

Android 使用SWIG生成Jni代码_第1张图片


二以HelloJni为例子

    导入ndk sample的HelloJni工程。

   Android 使用SWIG生成Jni代码_第2张图片

三 创建SWIG接口文件

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

[cpp]  view plain  copy
 print ?
  1. %module Unix  
  2.   
  3.   
  4. %{  
  5. #include   
  6. %}  
  7.   
  8.   
  9. typedef unsigned int uid_t;  
  10.   
  11.   
  12. extern uid_t getuid(void);  

在src目录下创建代理类的包,名为:com.apress.swig

Android 使用SWIG生成Jni代码_第3张图片


四在命令行下调用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文件。

Android 使用SWIG生成Jni代码_第4张图片


五将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.
Android 使用SWIG生成Jni代码_第5张图片


六 加入调用代码

修改HelloJni.java:

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

编译运行

Android 使用SWIG生成Jni代码_第6张图片

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

你可能感兴趣的:(技术类)