使用Swig自动生成JNI代码
2015-03-29 10:50
197 查看
此记录适用于AndroidStudio,Eclipse下适当修改亦可,但是一般Eclipse有UI下的操作方式。
Swig生成一个JNI代理类需要一个.i类的文件作为接口描述:
示例:
这个描述文件定义了
1.这个模块的名称Unix,
2.插入的预处理指令#include<unistd.h>,
3.为了防止swig把uid_t看成对象的类型声明
4.函数原型
为了能够在ndk-build的时候将使用swig生成的代理和包装JNI/Java代码连接到库中,自定义一个Makefile文件如下(放到jni目录下):
实际上这个mk是通过编译过程中的定义来实现这个命令:
swig -java -package com.examples.swig -outdir src/com/examples/swig jni/Unix.i
为了能够实现在编译中确定这些参数的值,需要在Android.mk中定义他们并且在编译成共享库/其他库之前调用上述mk文件:
这样,执行构建编译的结果是:
这样只需要把libs中的文件转移到jniLibs中,然后把java合并到项目的和jniLibs同级的java目录即可:
此时我们只需要调用就好了:
运行结果:
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目录下):
ifndef SWIG_PACKAGE $(error SWIG_PACKAGE is not define.) endif SWIG_OUTDIR := $(NDK_PROJECT_PATH)/java/$(subst .,/,$(SWIG_PACKAGE)) ifndef SWIG_TYPE SWIG_TYPE := c endif ifeq ($(SWIG_TYPE),cxx) SWIG_MODE := - c++ else SWIG_MODE := endif LOCAL_SRC_FILES += $(foreach SWIG_INTERFACE,$(SWIG_INTERFACES),$(basename $(SWIG_INTERFACE))_wrap.$(SWIG_TYPE)) LOCAL_CPP_EXTENSION += .cxx %_wrap.$(SWIG_TYPE) : %.i $(call host-mkdir,$(SWIG_OUTDIR)) 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文件:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := com_examples_jnidemo_MainActivity LOCAL_SRC_FILES := com_examples_jnidemo_MainActivity.c LOCAL_LDLIBS := -llog SWIG_PACKAGE := com.examples.swig SWIG_INTERFACES := Unix.i SWIG_TYPE := c include $(LOCAL_PATH)/swig_generate.mk include $(BUILD_SHARED_LIBRARY)
这样,执行构建编译的结果是:
这样只需要把libs中的文件转移到jniLibs中,然后把java合并到项目的和jniLibs同级的java目录即可:
此时我们只需要调用就好了:
运行结果:
相关文章推荐
- 使用SWIG自动生成JNI代码
- Android Studio JNI学习之(3)-使用SWIG自动生成Jni代码
- 使用SWIG自动生成JNI代码
- Android 使用SWIG生成Jni代码
- Android 使用SWIG生成Jni代码
- Android 使用SWIG生成Jni代码<转>
- Android 使用SWIG生成Jni代码
- ibatis - 自动代码生成工具abator 使用介绍
- C#分析数据库结构,使用XSL模板自动生成代码
- 在自动生成的代码中使用partial关键字
- C#分析数据库结构,使用XSL模板自动生成代码 - 清清月儿 .NET万花筒 Asp.net技术 Asp.net教程 Asp.net源码 Asp.net基础 Asp.net控件 Asp.net入门 - CSDNBlog
- ibatis - 自动代码生成工具abator 使用介绍
- 如何高效地使用XCodeFactory自动生成的数据层代码(二)
- 使用Visual Studio宏来自动生成代码 [ Visual Studio | 宏 | 自动生成代码 ]
- 使用abator自动生成ibatis代码的经验
- 使用CodeSmith根据数据库中的表自动生成WinUI界面(使用TableLayoutPanel布局)的代码.
- C#分析数据库结构,使用XSL模板自动生成代码
- AutoCode (vs插件)自动生成代码插件 下载及使用教程(C#版)
- C#分析数据库结构,使用XSL模板自动生成代码
- ibatis - 自动代码生成工具abator 使用介绍