zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    对公信贷系统与其他系统交互方式总结
    测试验收标准checklist
    测试风险汇报
    接口测试checklist
    52 | 深入浅出网站可扩展性架构设计
    51 | 深入浅出网站伸缩性架构设计
    html元素类型 块级元素、内联元素(又叫行内元素)和内联块级元素。(转载)
    IO流
    多线程
    Java网络编程
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/7278612.html
Copyright © 2011-2022 走看看