标签: java-native-interface

使用Maven管理DLL依赖项

我有一个Java程序,Maven管理它的依赖项.其中一个依赖项是另一个程序的JNI包装器.Maven负责处理相关JAR文件的引用,但我自己还在搞乱DLL文件.

有没有一个让Maven处理DLL的好方法?理想情况下,我希望将DLL加载到我们的本地存储库中,如JAR文件.

java dll java-native-interface maven-2

30
推荐指数
1
解决办法
3万
查看次数

Android的FaceDetector的基础技术

我正在Android上实现一个人脸跟踪器,作为一个文献研究,想要确定Android的FaceDetector的基础技术.

简单地说:我想了解android.media.FaceDetector分类器的工作原理.

一个简短的谷歌搜索没有提供任何信息,所以我想我会看看代码.

通过查看Java源代码,FaceDetector.java没有太多需要学习的内容:FaceDetector只是提供图像尺寸和面数的类,然后返回一个面数组.

Android源代码包含此类的JNI代码.我跟着函数调用,在那里,简化为基本要素,我学到了:

  1. "FaceFinder"创建于 FaceFinder.c:75
  2. 在第90行,bbs_MemSeg_alloc返回一个btk_HFaceFinder对象(其中包含实际查找面的函数),基本上将其复制到initialize()()中初始化hsdkA->contextE.memTblE.espArrE的原始btk_HSDK对象的数组中FaceDetector_jni.cpp:145.btk_SDK_create()
  3. 似乎迷宫的函数彼此提供了指针和实例btk_HSDK,但我无处可寻找具体的实例,sdk->contextE.memTblE.espArrE[0]其中包含了魔法.

已经发现,是一个小线索:JNI代码引用FFTEm库,我无法找到的源代码.然而,从它的外观来看,FFT是快速傅立叶变换,它可能与预训练的神经网络一起使用.我能找到的唯一符合这一理论的文献是Ben-Yacoub等人的论文.

我甚至不知道自己是否走上了正确的道路,所以任何建议都无疑会有所帮助.

编辑:我为任何可以提供任何见解的人添加了+100赏金.

java-native-interface android fft face-detection

30
推荐指数
1
解决办法
6097
查看次数

如何在没有用户输入的情况下创建Android RFCOMM套接字?

这是场景:

我需要编写一个Android应用程序来创建一个带有蓝牙适配器的PC的RFCOMM插槽(我也要编写服务器).

我的要求是用户不必手动配对设备.

实际上,有一个大黑客,我正在使用createInsecureRfcommSocket.

一个小场景:我有一个Android应用程序,它与一个打开了RFCOMM套接字的Linux盒子交换信息.我可以在设备上手动设置PIN(硬编码是一种选择)

我正在寻找不同的道路:

编写JNI包装器

如已完成在这里的最大凯勒曼,我可以写一个JNI层,使所有配对阶段.这应该是一个不错的选择,但是有一个问题:

NDK 4b不提供libbluetooth库,因此-lbluetooth失败,以及NDK v.3.

选项:

  1. 找到NDK 1.5(包括lib bluetooth).经过几天的网络搜索,我一直无法找到答案.有人知道我能在哪里找到它吗?
  2. 自己编译libbluetooth for Android并将它们用于-lbluetooth.没有幸运,我无法建造它们.任何提示?

使用API​​公开的内容

任何人都知道如何使用createRfcommSocketToServiceRecord并让用户不要手动配对设备?可能吗?我应该怎么写服务器?

我不知道的东西

也许(肯定!)有一些我不知道的东西.也许我可以用别的东西?不是RFCOMM?SDP?

也许我可以手动配对Android API?

我希望已经足够清楚,如果不是只是问.再次,因为这不是第一次,我在你的手中:)

感谢所有支持人员!

java-native-interface android bluetooth android-ndk rfcomm

30
推荐指数
1
解决办法
9289
查看次数

使用JNI将字符串数组从java传递给C.

我有一个字符串数组一样{"myname","yourname","hisname"},我想这个数组发送到ç使用JNI.我找不到任何明确的解决方案.我试图把这个字符串作为一个chararray但没有成功.

有没有办法做到这一点?

c java java-native-interface

30
推荐指数
2
解决办法
4万
查看次数

在Java中获取活动窗口信息

我正在尝试使用Java升级我的应用程序,只有在具有特定名称的进程窗口处于活动状态时才能工作.我发现使用JNI可以实现这一点,但我不知道究竟是怎么做到的.我找不到任何可以解释它的描述或例子.我的问题是 - 如何在Windows中获取当前活动窗口的进程名称(通过JNI或其他任何方式 - 我接受任何其他解决方案)?

java java-native-interface jna

30
推荐指数
2
解决办法
2万
查看次数

JNI - 如何从C++或C回调到Java?

我有Java应用程序调用本机C++/C代码.C++/C代码需要回调到Java.你能举几个例子来说明这个吗?

java java-native-interface callback

30
推荐指数
1
解决办法
3万
查看次数

错误:' - >'的基本操作数有非指针类型'JNIEnv'

#include <stdio.h>
#include <jni.h>

 JNIEnv* create_vm() {
    JavaVM* jvm;
    JNIEnv* env;
    JavaVMInitArgs args;
    JavaVMOption options[1];

    /* There is a new JNI_VERSION_1_4, but it doesn't add anything for the purposes of our example. */
    args.version = JNI_VERSION_1_2;
    args.nOptions = 1;
    options[0].optionString = "-Djava.class.path=/home/test/workspace/pankajs/"
            "jikes/JikesRVMia32-linuxproduction/target/tests/stress/prototype/basic/classes";
    args.options = options;
    args.ignoreUnrecognized = JNI_FALSE;

    JNI_CreateJavaVM(&jvm, (void **)&env, &args);
    return env;
}

void invoke_class(JNIEnv* env) {
    jclass helloWorldClass;
    jmethodID mainMethod;
    jobjectArray applicationArgs;
    jstring applicationArg0;

    helloWorldClass = (*env)->FindClass(env, "/test/org/jikesrvm/basic/core/bytecode/TestSwitch");

    mainMethod = (*env)->GetStaticMethodID(env, helloWorldClass, "main", "([Ljava/lang/String;)V");

    applicationArgs = …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface

30
推荐指数
1
解决办法
2万
查看次数

JNI与JNA表现

我们有一个c/asm使用GPU(OpenCL)的本机应用程序,用于encrypt/decrypt使用特定方法的大数据,它只是工作完美,没问题.项目的一部分(Web和分发)一直在开发JEE,我们只需要调用本机应用程序/库.

我们试图使用Processclass 将其称为分离外部进程.问题是我们无法控制应用程序(事件,处理程序,线程等).我们还尝试将C代码切换为Java代码,但性能已经消失.除了将本机代码作为进程运行之外,我正在考虑JNA和JNI,但是有一些问题.

问题:

  1. 为了更好(更快)的读/写解决方案,是否可以通过ByteBuffer#allocateDirect()JNI和JNA中的直接(非托管)内存[Java()] 交换数据?
  2. 是否可以通过本机代码管理和处理进程,并通过Java代码(OpenCL lib)访问GPU(共享)内存?
  3. 性能怎么样?JNA比JNI快吗?

我们在Redhat Linux6 x64上有两个AMD W7000集群设备.

c java concurrency java-native-interface jna

30
推荐指数
4
解决办法
3万
查看次数

从Java调用Rust

我正在使用Rust 1.0 beta并且能够创建一个小例子来调用从Java编写的Rust函数.我只是使用rustc在mylib.rs中编译以下Rust代码,在Windows上生成mylib.dll:

#![crate_type = "dylib"]
use std::any::Any;

#[no_mangle]
pub extern fn Java_tests_Test_hello(env: *const Any, jclass: *const Any) {
    println!("hello from rust");
}

#[no_mangle]
pub extern fn Java_tests_Test_sum(env: *const Any, jclass: *const Any, a: i32, b: i32) -> i32 {
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

然后我可以从Java类test.Test调用这些函数:

package tests;

import java.io.File;

public class Test {

    public static native void hello();

    public static native int sum(int a, int b);

    public static void main(String[] args) {
        File f = new File("mylib.dll");
        System.load(f.getAbsolutePath());
        Test.hello(); …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface rust

30
推荐指数
3
解决办法
6244
查看次数

无法在android中启动cygpath

当我尝试将项目导入我的工作区时,它显示错误

[2013-03-17 16:14:15 - 无法启动cygpath.是Cygwin的路径吗?] java.io.IOException:无法运行程序"cygpath":CreateProcess error = 2,系统找不到指定的文件

这个项目包含jni库,它是一个基于ndk的项目.为什么会发生这个错误我不能将这个项目导入我的系统.

java-native-interface android android-ndk cygpath

29
推荐指数
1
解决办法
3万
查看次数