JNIWrapper学习

        最近开始用JNIWrapper来封装C++接口,以前接触过一些JNI的东西,感觉这些东西都异曲同工。比起来JNI来说我感觉JNIWrapper更加好用一些。

 

       有了JNIWrapper,就可以不再创建本地类来调用开发系统API函数或者任意的动态库的函数,只需编写一些java语言代码,JNIWrapper完成剩下的工作。

 

       JNIWrapper目前支持windows、linux、MAX os。下载windows版本的JNIWrapper之后会看到这样一个目录结构,

 



        在bin目录中能够看到这样这样几个文件。



 

        其中最重要的就是jniwrap.dll/jniwrap64.dll,jniwrap.lic,dll文件是jniwrapper的核心文件,而lic文件是jniwrapper的授权文件。


        Docs目录是JNIWrapper的帮助文件夹。

        Lib文件夹是jniwrapper使用所需要的jar包。这里如果是仅仅是调用的话,jniwrap-generator.jar可以不用导入项目中。

        Samples文件夹是jniwarpper的实例文件夹,在里面可以看到jniwrapper的使用的一些demo。

        WinPack文件夹存放着JNIWrapper的源代码,可以将这源代码导入到项目中便于调试。

 

        了解了JNIWrapper目录结构之后来做一个简单的demo来看一下JNIWrapper的简单使用。

 

        需要准备这样几步,第一步建立工程,建立一个dll文件夹,将jniwrap.dll、jniwrap.lic、jniwrap64.dll、JNIWrapper64SampleDLL.dll、JNIWrapperSampleDLL.dll。



 

        第二步需要将dll文件夹配置到环境变量中,如果是在Eclipse打开之后再配置的环境变量的时候,这时候需要重新启动Eclipse,才能加载刚刚配置的环境变量。

 



        第三部需要将native文件夹拷贝到项目src的同级目录下。



 

        第四部将jar包导入classpath中。

 


 

        到此为止所有的工作都准备好了,可以建立类文件了,并且输入下面的代码,执行一下就可以看到会输出110的。

 

package com.test.jniwrapper;

import com.jniwrapper.Function;
import com.jniwrapper.Int;
import com.jniwrapper.Library;
import com.jniwrapper.Parameter;

public class TestJNIWrapper {

	private static Library SAMPLE_LIB=new Library("../dll/JNIWrapperSampleDLL.dll");
	
	public static void returnValueSample(){
		int a=10;
		int b=100;
		Function add=SAMPLE_LIB.getFunction("sumStdCall");
		Int result=new Int();
		add.invoke(result,new Int(a),new Int(b));
		System.out.println("a+b="+result.getValue());
	}
	
	public static void main(String[] args) {
		returnValueSample();
	}

}

 

       这个例子是一个比较简单的实例,比较深入的了解之后其实JNIWrapper就是这样简单的,仅仅需要编写java代码就可以了,另外需要注意的是授权问题,下载之后的jniwarpper试用期为30天。最后还有一个最大的问题就是一个表格,这个表格非常重要,可以说如果能够把表格的内容全都深入了解了,那么JNIWrapper也就用起来得心应手了。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
"main" prio=5 tid=1 Native | group="main" sCount=1 dsCount=0 flags=1 obj=0x70ceec28 self=0xe3944610 | sysTid=11129 nice=-10 cgrp=default sched=0/0 handle=0xf0019470 | state=S schedstat=( 2777072384 454588865 4567 ) utm=234 stm=43 core=2 HZ=100 | stack=0xff12f000-0xff131000 stackSize=8192KB | held mutexes= native: #00 pc 00071654 /apex/com.android.runtime/lib/bionic/libc.so (__ioctl+12) native: #01 pc 0003f76f /apex/com.android.runtime/lib/bionic/libc.so (ioctl+26) native: #02 pc 00039eab /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+238) native: #03 pc 0003aae5 /system/lib/libbinder.so (android::IPCThreadState::waitForResponse(android::Parcel*, int*)+32) native: #04 pc 0003a8bb /system/lib/libbinder.so (android::IPCThreadState::transact(int, unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+126) native: #05 pc 000355bf /system/lib/libbinder.so (android::BpBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+98) native: #06 pc 00032625 /system/lib/libcamera_client.so (android::hardware::BpCamera::setPreviewTarget(android::sp<android::IGraphicBufferProducer> const&)+188) native: #07 pc 0002afcf /system/lib/libcamera_client.so (android::Camera::setPreviewTarget(android::sp<android::IGraphicBufferProducer> const&)+50) native: #08 pc 000de767 /system/lib/libandroid_runtime.so (android_hardware_Camera_setPreviewSurface(_JNIEnv*, _jobject*, _jobject*)+130) at android.hardware.Camera.setPreviewSurface(Native method) at android.hardware.Camera.setPreviewDisplay(Camera.java:798) at org.linphone.mediastream.video.capture.AndroidVideoApi5JniWrapper.setPreviewDisplaySurface(AndroidVideoApi5JniWrapper.java:153) at org.linphone.mediastream.video.capture.AndroidVideoApi9JniWrapper.setPreviewDisplaySurface(AndroidVideoApi9JniWrapper.java:206) at org.linphone.core.LinphoneCoreImpl.setPreviewWindowId(Native method) at org.linphone.core.LinphoneCoreImpl.setPreviewWindow(LinphoneCoreImpl.java:618) - locked <0x08a07223> (a org.linphone.core.LinphoneCoreImpl) at com.winew.core.impl.VoipCoreManagerImpl.setPreviewWindow(VoipCoreManagerImpl.java:556)
最新发布
07-15

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值