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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM