Android 使用SWIG生成Jni代码

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



二以HelloJni为例子

    导入ndk sample的HelloJni工程。

   

三 创建SWIG接口文件

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

%module Unix


%{
#include <unistd.h>
%}


typedef unsigned int uid_t;


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文件:

ifndef MY_SWIG_PACKAGE
   $(error MY_SWIG_PACKAGE is not defined.)
endif
 
MY_SWIG_OUTDIR:=$(NDK_PROJECT_PATH)/src/$(subst .,/,$(MY_SWIG_PACKAGE))
ifndef MY_SWIG_TYPE
    MY_SWIG_TYPE:=C
endif

#ifeq($(MY_SWIG_TYPE),cxx)
#   MY_SWIG_MODE:=c++
#else
#   MY_SWIG_MODE:=  
#endif

LOCAL_SRC_FILES+=$(foreach MY_SWIG_INTERFACE,\
      $(MY_SWIG_INTERFACES),\
      $(basename $(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))
      
#LOCAL_CPP_EXTENSION+=.cxx

%_warp.$(MY_SWIG_TYPE) : %.i \
   $(call host-mkdir,$(MY_SWIG_OUTDIR)) \
   swig -java \
   $(MY_SWIG_MODE)  \
   -package $(MY-SWIG_PACKAGE)  \
   -outdir $(MY_SWIG_OUTDIR)   \
   $<       

修改jni目录下的Android.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)

编译ndk.


六 加入调用代码

修改HelloJni.java:

 TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() +" uid:"+Unix.getuid());
        setContentView(tv);

编译运行


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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!关于在Android开发中使用SWIG生成JNI代码的问题,我可以给您一些指导。 SWIG(Simplified Wrapper and Interface Generator)是一个工具,可以用于将C/C++代码包装成其他编程语言(如Java)的接口。在Android开发中,您可以使用SWIG生成JNI(Java Native Interface)代码,以便在Java和C/C++之间进行交互。 下面是一些基本的步骤来使用SWIG生成JNI代码: 1. 安装SWIG:首先,您需要安装SWIG工具。您可以从SWIG的官方网站(http://www.swig.org)下载适合您操作系统的版本,并按照安装指南进行安装。 2. 编写SWIG接口文件:创建一个名为`example.i`的SWIG接口文件,并在其中定义您要包装的C/C++代码的接口。例如,如果您要包装一个名为`example.h`的头文件中的函数和结构体,您可以在接口文件中使用类似以下的代码: ``` %module example %{ #include "example.h" %} %include "example.h" ``` 3. 生成JNI代码使用以下命令来生成JNI代码: ``` swig -java example.i ``` 该命令将生成一系列的JNI源文件和一个Java类文件,用于在Java中访问C/C++代码。 4. 将生成的文件添加到Android项目:将生成JNI源文件(通常是`.c`和`.h`文件)添加到您的Android项目的`jni`目录中。确保您的项目已正确配置NDK构建系统。 5. 在Java中使用JNI代码:在Java类中,您可以使用生成的Java类文件中的JNI包装器来访问C/C++代码。例如,您可以使用`System.loadLibrary("example")`来加载生成JNI库,并使用JNI函数来调用C/C++函数。 这是一个简单的概述,描述了如何使用SWIG生成JNI代码。请注意,SWIG提供了许多高级功能和选项,可以根据需求进行配置和定制。 希望这些信息对您有帮助!如果您有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值