使用Swig自动生成JNI代码

此记录适用于AndroidStudio,Eclipse下适当修改亦可,但是一般Eclipse有UI下的操作方式。

Swig生成一个JNI代理类需要一个.i类的文件作为接口描述:

示例:

%module Unix
%{
#include<unistd.h>
%}

typedef unsigned int uid_t;

extern uid_t getuid(void);

这个描述文件定义了

1.这个模块的名称Unix,

2.插入的预处理指令#include<unistd.h>,

3.为了防止swig把uid_t看成对象的类型声明

4.函数原型

为了能够在ndk-build的时候将使用swig生成的代理和包装JNI/Java代码连接到库中,自定义一个Makefile文件如下(放到jni目录下):

 1 ifndef SWIG_PACKAGE
 2     $(error SWIG_PACKAGE is not define.)
 3 endif
 4
 5 SWIG_OUTDIR := $(NDK_PROJECT_PATH)/java/$(subst .,/,$(SWIG_PACKAGE))
 6 ifndef SWIG_TYPE
 7     SWIG_TYPE := c
 8 endif
 9
10 ifeq ($(SWIG_TYPE),cxx)
11     SWIG_MODE := - c++
12 else
13     SWIG_MODE :=
14 endif
15
16 LOCAL_SRC_FILES += $(foreach SWIG_INTERFACE,$(SWIG_INTERFACES),$(basename $(SWIG_INTERFACE))_wrap.$(SWIG_TYPE))
17
18 LOCAL_CPP_EXTENSION += .cxx
19
20 %_wrap.$(SWIG_TYPE) : %.i
21     $(call host-mkdir,$(SWIG_OUTDIR))
22     swig -java $(SWIG_MODE) -package $(SWIG_PACKAGE) -outdir $(SWIG_OUTDIR) $<

实际上这个mk是通过编译过程中的定义来实现这个命令:

swig -java -package com.examples.swig -outdir src/com/examples/swig jni/Unix.i

为了能够实现在编译中确定这些参数的值,需要在Android.mk中定义他们并且在编译成共享库/其他库之前调用上述mk文件:

 1 LOCAL_PATH := $(call my-dir)
 2
 3 include $(CLEAR_VARS)
 4
 5 LOCAL_MODULE    := com_examples_jnidemo_MainActivity
 6 LOCAL_SRC_FILES := com_examples_jnidemo_MainActivity.c
 7 LOCAL_LDLIBS := -llog
 8
 9 SWIG_PACKAGE := com.examples.swig
10 SWIG_INTERFACES := Unix.i
11 SWIG_TYPE := c
12
13 include $(LOCAL_PATH)/swig_generate.mk
14
15
16 include $(BUILD_SHARED_LIBRARY)

这样,执行构建编译的结果是:

这样只需要把libs中的文件转移到jniLibs中,然后把java合并到项目的和jniLibs同级的java目录即可:

此时我们只需要调用就好了:

运行结果:

时间: 2024-11-08 23:00:42

使用Swig自动生成JNI代码的相关文章

[Linux: vim]vim自动生成html代码

如果直接将vim编辑的文字复制粘贴到一些blog的编辑器中,这些代码将会是死板的白纸黑字.如果能加入关键字高亮功能就好了,这样代码阅读起来会很方便.一些blog的编辑器提供了这项功能,一些没有,一些支持的语言不够全面.好在vim的syntax支持的语言够多,绝大部分流行的语言都可以直接找到支持.如果能将vim显示的代码直接转换成为html就好多了,这样很多支持HTML编辑的blog就可以直接使用格式化好的代码. 使用vim将代码转换为html有两种方式,TOhtml和syntax/2html.v

Eclipse快捷键自动生成注释代码,修改预格式

用Eclipse编写Java代码,可以快捷键自动生成注释代码,但是自动生成的注释信息都是预先设置好的格式. 其实我们可以在Eclipse中进行设置自己希望显示的信息格式. 方法:点击Windows->Preferences->Java->Code Style->Code Templates, 选择右边窗口中的Comments,对具体的注释信息进行编辑设置. 例如:设置作者作者信息以及日期信息. 选择Types,点击Edit,可以对原来的模板进行修改,原格式如下: /**  * @a

Asp.net自动生成三层代码视频教程

下载地址,百度网盘: http://pan.baidu.com/s/1jG4GwDo 目前已经录制4集. 第一集:自动生成三层框架代码,自动生成的代码是Model层,DAL层,BLL层等. 第二集:使用delegate排序,使用Lambda排序,使用Predicate使用条件,选择List集合. 第三集:使用LINQ进行跨表查询并显示. 第四集:将选出的表数据导出到Excel当中.

IDEA——mybatis-generator插件自动生成实体代码(Maven)

利用MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件.  mysql-connector-java-5.1.6-bin.jar mysql驱动包  mybatis-generator-core-1.3.5.jar 自动生成器包 maven 配置mybatis-generator插件 一.pom.xml 两处配置 (1) (2) 二.创建 generatorConfig.xml 配置如下: 1 <?xml version="1.0" encoding=&quo

Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码

Intellij IDEA 14 作为Java IDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱. 然而在使用的过程中会发现Intellij IDEA也有一些不尽如意的地方,难免会有些不爽:Intellij IDEA 的插件库远不及eclipse的丰富. mybatis-generator在eclipse中有专门的插件,而没有开发出Intellij IDEA能够使用的插件. 不过不用灰心,如果你的项目是使用mave

myBatis自动生成相关代码文件配置(Maven)

pom.xml文件添加配置 <build> <finalName>generator</finalName> <plugins> <!-- maven编译环境指定JDK版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <

用maven插件自动生成mybatis代码(转载http://blog.csdn.net/yinkgh/article/details/52512983)

1.在springmvc+mybatis项目的pom.xml文件中加如下内容,添加之后,maven会自动下载相关jar包,时间较长,需要耐心等待~~ <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>

IDEA 中使用MyBatis-generator 自动生成MyBatis代码

0.在Intellij IDEA创建maven项目 1. 在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件 <build> <finalName>xxx</finalName> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-

JAVA入门[7]-Mybatis generator(MBG)自动生成mybatis代码

一.新建测试项目 新建Maven项目MybatisDemo2,修改pom.xml引入依赖.dependencies在上节基础上新增 <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency>