标签: java-native-interface

如何设置java库路径进行处理

我正在使用PDE运行Processing sketch,我收到以下错误:

验证java.library.path属性是否已正确设置.

你们有人能告诉我如何解决这个问题吗?

java java-native-interface

22
推荐指数
4
解决办法
8万
查看次数

将字符串从Java传递到JNI

我想将一个字符串传递给我正在写的JNI,它必须分配给一个const char*.下面提到我是如何做到的:

JNI...(...,jstring jstr...){

const char* str = env->GetStringUTFChars(jstr,0);
env->ReleaseStringUTFChars(str,jstr,0);

}
Run Code Online (Sandbox Code Playgroud)

但是如果我在分配给jstring后打印const char*str,那么与我直接在JNI和printf中分配str值相比,我看到的是不同的.

这是正确的方法吗?或者是否还有其他方法可以将字符串从java分配给JNI中的const char*?

java java-native-interface

22
推荐指数
1
解决办法
4万
查看次数

使用Android NDK的SQLite

是否有可能在Android手机上使用SQLite和C++?我没有找到任何关于如何实现这一目标的文件.

c++ java-native-interface android android-ndk

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

Android ndk:使用jni从c ++调用Java方法的问题

我尝试在Android NDK上工作,我的第一次测试不是很确定,我需要帮助,因为我没有看到我的错误在哪里.

以下代码编译没有问题,但是当在模拟器上运行时,程序返回SIGSEGV信号,并且没有在logcat中显式写入错误.但是,会出现一条警告,指示未找到Java类.经过一天的研究,这一切看起来都是正确的.

这是我的Java代码:JNITestActivity.java

package com.test.jnitest;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class JNITestActivity extends Activity {

    private static String LIB_NAME = "JNItest";

    static {
        System.loadLibrary(LIB_NAME);
    }

    public static native void javaCallJNI();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Log.i("onCreate", "Native function begining");
        javaCallJNI();
        Log.i("onCreate", "Native function ending");
    }

    void callFromCPP() {
        Log.i("callFromCPP", "JNI can call JAVA !");
        return ;
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的C++代码:testjni.cpp

#include <jni.h>
#include <android/log.h>

#define  LOG_TAG    "testjni"
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)

extern "C" {
    JNIEXPORT void …
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface android android-ndk

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

JNI:在GetMethodID的函数签名中传递多个参数

我试图用Java(从C)执行具有以下签名的函数:

public void execute(int x, int y, int action);
Run Code Online (Sandbox Code Playgroud)

我的问题是在GetMethodID中定义函数签名:

env->GetMethodID(hostClass, "execute", "(I;I;I;)V");
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是:

W/dalvikvm( 1849): Bogus method descriptor: (I;I;I;)V
W/dalvikvm( 1849): Bogus method descriptor: (I;I;I;)V
D/dalvikvm( 1849): GetMethodID: method not found: Lcom/device/client/HostConnection;.execute:(I;I;I;)V
Run Code Online (Sandbox Code Playgroud)

我不知道如何在GetMethodID中指定方法签名(对于3个整数作为参数).我看到人们使用";" 为String和File类分隔其他帖子中的参数,但没有像整数这样的原语.

请问这样做的正确方法是什么?

谢谢.

java-native-interface android

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

是否可以使用sun.misc.Unsafe在没有JNI的情况下调用C函数?

一段C/C++代码可以为JNI方法提供一个函数指针数组.但是有没有办法直接从Java代码内部(不使用JNI或类似代码)调用数组指针指向的函数?JNI以某种方式做了类似的事情,所以必须有办法.JNI是如何做到的?是通过sun.misc.Unsafe吗?即使不是,我们是否可以使用一些不安全的解决方法来获取执行此操作的JVM代码?

我当然不打算在商业上使用它.我甚至不是专业人士,我只是非常喜欢编码而且我最近一直在研究CUDA所以我想也许我可以尝试将所有东西混合在一起,但JNI调用的开销会破坏GPU加速代码的目的.

c java java-native-interface jvm native-code

22
推荐指数
1
解决办法
3923
查看次数

如何使用Eclipse调试JNI代码(Java和C/C++)

虽然我可以使用用于Java代码的Eclipse JDT调试器和用于C代码的GDB调试我的应用程序,但我更倾向于使用单个工具进行所有调试.我找到了几个在Eclipse中启用"混合模式"调试的项目,并支持Java和本机代码之间的单步执行.

不幸的是,一个声称是预发布质量,另一个目前没有维护. 是否有任何插件以可靠的方式为Eclipse带来混合模式调试功能,还是应该继续使用两个单独的调试器?

java eclipse debugging java-native-interface android-ndk

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

在Android NDK中编写本机方法签名的正确方法是什么?

我有一个NDK库和相应的Java类的工作实现.但我无法将重载方法添加到该类.目前我的班级包含:

package com.package;

public class MyClass
{
  public static native String getFileName();
  static
  {
    System.loadLibrary("mylib");
  }
}
Run Code Online (Sandbox Code Playgroud)

我的jniwrappers.cpp文件有以下声明:

JNIEXPORT jstring JNICALL
Java_com_package_MyClass_getFileName(_JNIEnv* env, jobject thiz);
Run Code Online (Sandbox Code Playgroud)

到目前为止一切正常.但接下来我修改了我的课程:

package com.package;

public class MyClass
{
  public static native String getFileName();
  public static native String getFileName(int index);
  ...
}
Run Code Online (Sandbox Code Playgroud)

并添加到jniwrappers.cpp另一个声明:

JNIEXPORT jstring JNICALL
Java_com_package_MyClass_getFileName__I(_JNIEnv* env, jobject thiz, jint index);
Run Code Online (Sandbox Code Playgroud)

它编译得很好,Android应用程序启动,没有得到UnsatisfiedLinkError,但是当它调用带参数的第二个方法时,第一个C++函数被调用但不是第二个.我在该类中有其他方法参数,但它们都没有重载,所以它们各自的JNI签名不包含参数.

那么,我做错了什么?

java-native-interface android-ndk

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

将Java嵌入到C++应用程序中?

我得到了一个用C++编写的应用程序,我可以通过在C++中编写插件来扩展应用程序功能.

我基本上想要做的是将Java嵌入到这个应用程序中.这已经用Python完成了(不是由我完成的).

我读了一些关于JNI的内容,但总是有一个使用Java类的完整程序的演讲.

我想要做的是,使用Java中的C++类来与应用程序进行交互.
在这种情况下,它是一个3D应用程序,称为Cinema 4D.

有没有办法在应用程序运行时(使用某种脚本语言)使用JNI或类似的东西编译和评估Java代码?

嵌入完成后的虚构代码示例:

import c4d.documents.*;

class Main {
  public static void main() {
    BaseDocument doc = GetActiveDocument();
    BaseObject op = doc.GetActiveObject();
    if (op != null) {
      op.Remove();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

此代码应与Cinema 4D交互以删除所选对象.

c++ java embed java-native-interface

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

一个使用Eigen库和jni的简单ndk项目

所以今天在这里的人们的帮助下,我整理了一个使用ndk的简单Android应用程序.我将特征库直接导入到我在源代码树中创建的jni文件夹中,然后使用cygwin我能够编译项目.继承源,以便其他人尝试学习jni基础知识,从c ++到java传递数据,然后返回一些代码.该应用程序在edittext字段中只占用6个数字,当用户单击该按钮时,两个浮点数组将传递给本机方法并加载到两个特征浮点向量中,然后将它们相加.两个向量的乘积传递回java,然后显示在textview中.

下面是android的特征库的链接:

https://bitbucket.org/erublee/eigen-android
Run Code Online (Sandbox Code Playgroud)

您只需要在文件树中向下一层的实际特征文件夹.只需将一层的特征文件夹复制并粘贴到特征源中,然后放入您创建的jni文件夹中,以便在您的android项目中保存您的c ++代码.

继承人java:

package jnimath.act;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class JnimathActivity extends Activity {
 /** Called when the activity is first created. */

public EditText x;
public EditText y;
public EditText z;

public EditText x2;
public EditText y2;
public EditText z2;

public float[] vecArray;

public TextView textView1;
public Button run;

float[] array3 = new float[3];
float[] array1 = new float[3];
 float[] array2 = new float[3]; …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android android-ndk

21
推荐指数
1
解决办法
6372
查看次数