編寫JNI封裝器的代碼,還有處理數據類型的轉換耗時且費力,因此要用到 SWIG。html
SWIG 的全稱是 Simplified Wrapper and Interface Generator,它是一個開發工具,在Android Native開發中可被用來自動生成須要的 JNI 封裝器代碼。java
固然,SWIG 不僅是能被用在 Android 和 Java 開發領域,它是一個擴展性方面很強大的工具,也能夠用來自動生成其它編程語言的代碼。編程
當期用於 Android Native 開發中時,須要瞭解以下一些知識:windows
SWIG是一個運用於編譯環節的軟件開發工具,它能生成出代碼來使得用 C/C++ 編寫的代碼能夠同其它編程語言鏈接在一塊兒。安全
SWIG以接口文件做爲輸入,輸出的是特定語言(如Java)的代碼文件,輸出的文件直接能夠編譯運行。app
SWIG誕生於1995年,開始的時候用於科研,現在做爲通用工具在以 GUI GPL 協議開放了源代碼,官網是:www.swig.org。編程語言
SWIG在三大主力平臺均可以安裝,下載地址:www.swig.org/download.html,windows 中下載到的是一個zip壓縮包,解壓而後配置好環境變量(SWIG_HOME,Path)便可使用了。函數
Android 平臺基於 Linux OS 構建,Linux 是一個多用戶平臺,Android 利用了這一點,在其上的每一個APP都是在不一樣 Linux 用戶下的虛擬機沙盒中運行的,這樣具備安全性方面的好處。Java 不能直接獲取到 Linux 的用戶 ID,所需必須經過 Native 的方式調用原生 POSIX OS API 中的 getuid 才能獲取到。流程以下:工具
接口文件包含了函數原型、類以及變量的聲明。語法同普通的 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 代理類中暴露的方法來實現對原生功能函數的調用。
這在回調場景中能夠被用到,對於處理一些延時長操做比較有用。