相信越来越多Android程序员需要用到Android ndk开发swig编译jni接口,因为这设计到底层编程,如果开发的项目是有硬件产品的话,那更要熟悉这方面的编程。我网上也看了很多关于这方面博客。总的来说,都有一定区别。那我介绍也是跟网上有一定的区别,首先说一下编译环境配置。Android开发编译环境就不用我多说了吧。我用ndk版本是这个android-ndk-r8d-windows,swig编译时这个swigwin-3.0.2。如果怕网上找不到这两个压缩包,就评论区留下邮箱吧。
1、加载ndk位置,首先说一下这个路径,一定不能有空格,或者中文。
window—-preferences——Android——NDK 如下图:
二、项目右键找到Android tool——add native suppot 按下去,出现下图:确定
三、现在项目的目录结构是这样的。如下图所示:
四、配置swig路径。以及输出目录。
点击如下图上方箭头所示,出现external tool configurations,点击这个。如图
在上图中左侧新建,输入名称。然后是swig的路径,每个人按照自已去弄。
working directory: 这个是一样 ${project_loc}
arguments:
-c++ -java -package com.example.jnidmeo -outdir src/com/example/jnidmeo jni/Unix.i
这里意思是编译成java存放的目录,以及需要编译c++文件的位置,根据自已项目包名填写。
apply同意,如果你还没写好c++,就不要点击run。写好要编译c++,在点击run。
五、jni目录下application.mk配置如下,如果没有这个文件,自已新建一个,写下配置.
APP_ABI := armeabi
APP_STL := stlport_static
六 Android.mk配置
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JniDmeoLib //这个是生成库的名字LOCAL_SRC_FILES := Unix_wrap.cxx
include $(BUILD_SHARED_LIBRARY)
这上面意思自已去百度一下,篇幅过长,先不做解释
七 Unix.i文件配置如下:
%module JniDmeoLib
%include "std_string.i"
%{#include <src\Ctest.cpp>#include <src\CoutputChar.cpp>%}%include <src\Ctest.h>%include <src\CoutputChar.h>
八 此时目录如下图:
九 现在就回到那个按键点击 Run 返回刚才你配置那里Run,出现下图,不报错就是那个样子:
十、最后生成效果,以及目录找到那个JniDmeoLibJNI.class
打开,写上加载库
static{System.loadLibrary("JniDmeoLib");}
如下代码:加粗的地方就是需要写的,双引号是你的库名字。
/* —————————————————————————- * This file was automatically generated by SWIG (). * Version 3.0.2 * * Do not make changes to this file unless you know what you are doing–modify * the SWIG interface file instead. * —————————————————————————– */package com.example.jnidmeo;public class JniDmeoLibJNI {<span style="color:#000000;"><strong>//下面static要自已写上去,加载生成JniDmeoLib库."JniDmeoLib"是库名字static{System.loadLibrary("JniDmeoLib");}</strong></span> public final static native long new_CTest(); public final static native void delete_CTest(long jarg1); public final static native double CTest_getTest(long jarg1, CTest jarg1_, double jarg2, double jarg3); public final static native long new_CoutputChar(); public final static native void delete_CoutputChar(long jarg1); public final static native String CoutputChar_getfileName(long jarg1, CoutputChar jarg1_); public final static native void CoutputChar_setfileName(long jarg1, CoutputChar jarg1_, String jarg2);}
十一、选中你的项目,再点击project—–build project,出现图下:生成so库,以及存放的路径
它不同于旅游,那需要一个风景稍微漂亮的地方,