前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NDK学习笔记(三)SWIG:自动生成JNI代码

NDK学习笔记(三)SWIG:自动生成JNI代码

作者头像
LeoXu
发布2018-08-15 14:40:59
2.2K0
发布2018-08-15 14:40:59
举报

编写JNI封装器的代码,还有处理数据类型的转换耗时且费力,所以要用到 SWIG。

SWIG 的全称是 Simplified Wrapper and Interface Generator,它是一个开发工具,在Android Native开发中可被用来自动生成需要的 JNI 封装器代码。

当然,SWIG 不只是能被用在 Android 和 Java 开发领域,它是一个扩展性方面很强大的工具,也可以用来自动生成其它编程语言的代码。

当期用于 Android Native 开发中时,需要了解如下一些知识:

  • 定义原生代码的 SWIG 接口。
  • 基于定义的接口生成 JNI 代码。
  • 将 SWIG 集成到 Android 的构建流程中。
  • 封装 C/C++ 代码。
  • 异常处理。
  • 使用内存管理。
  • 原生代码调用 Java。

关于SWIG

SWIG是一个运用于编译环节的软件开发工具,它能生成出代码来使得用 C/C++ 编写的代码可以同其它编程语言连接在一起。

SWIG以接口文件作为输入,输出的是特定语言(如Java)的代码文件,输出的文件直接可以编译运行。

SWIG诞生于1995年,开始的时候用于科研,如今作为通用工具在以 GUI GPL 协议开放了源代码,官网是:www.swig.org。

SWIG在三大主力平台都可以安装,下载地址:www.swig.org/download.html,windows 中下载到的是一个zip压缩包,解压然后配置好环境变量(SWIG_HOME,Path)即可使用了。

示例,获取Linux 用户 ID

Android 平台基于 Linux OS 构建,Linux 是一个多用户平台,Android 利用了这一点,在其上的每个APP都是在不同 Linux 用户下的虚拟机沙盒中运行的,这样具有安全性方面的好处。Java 不能直接获取到 Linux 的用户 ID,所需必须通过 Native 的方式调用原生 POSIX OS API 中的 getuid 才能获取到。流程如下:

  • 编写一个SWIG接口文件暴露出 getuid 函数。
  • 将 SWIG 集成到 Android 构建流程。
  • 将 SWIG 生成的源代码文件添加到 Android.mk 构建文件。
  • 使用 SWIG 生成的 Java 代理类来查询 getuid 函数。
  • 在 APP 界面上显示结果。

SWIG 接口文件

接口文件包含了函数原型、类以及变量的声明。语法同普通的 C/C++ 头文件相同,不过除了可以在其中使用 C/C++ 关键词以及预处理指令以外,还包含了 SWIG 特有的指令,利用它们能生成封装的代码。

接口文件可以被放在Android工程的jni目录下,后缀名为.i,例如:Unix.i。

在命令行中运行 swig 命令就可以在相应文职生成原生代码和Java代理类,例如:

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

我们可以在 Android 的Java类中调用生成的 Java 代理类中暴露的方法来实现对原生功能函数的调用。

实现原生代码调用 Java

这在回调场景中可以被用到,对于处理一些延时长操作比较有用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/01/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于SWIG
  • 示例,获取Linux 用户 ID
  • SWIG 接口文件
  • 实现原生代码调用 Java
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档