我是JNI和C++的新手,这里我要把一个数组从安卓的Java传递给JNI,在JNI中只需要用泡泡的方式对数组进行排序。然而,这似乎从来没有工作过,我的意思是数组从来没有得到排序。我不知道数组是否从未被传递,或者JNI中的函数有一些问题。
下面是演示代码。
文件.h:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_jni_jniDemo_JniInterface */
#ifndef _Included_com_jni_jniDemo_Jn
我正在使用JNI/NDK将一些C++库与一个Android应用程序绑定在一起。其中一个方法使用字节数组,因此我需要在JNI绑定中调用GetByteArrayElements。在什么情况下GetByteArrayElements会返回NULL?甲骨文的简单地说:
Returns a pointer to the array elements, or NULL if the operation fails.
什么情况会导致操作失败并返回NULL?
linux :我有一个简单的c++ jni测试库,它可以用qtcreator创建。
现在,我需要将真正的jni库代码(作为常规qt应用程序和一些java的一部分)测试到最终的jni库中。
我还根据下面的代码段创建了一个非常简单的控制台输出小部件,它在我的所有qt应用程序中运行得很好。
class TConsole : public QPlainTextEdit
{
Q_OBJECT
static void Printf (const char *form, ...) ;
and more
}
我尝试使用一些虚拟的、argc、和arv调用jni库构造函数中的以下虚拟主funct
我想知道是否有可能在C代码中更新ByteArray,而不是从C中返回它。
我遇到过这样的情况,我需要通过JNI多次更新单个bytearray,而从C返回bytearray需要大量的JNI调用。如果有人知道怎么做,请告诉我?
代码应该是这样的
Java代码
byte[] storeData;
updateFromNative(storeData); //update the byteArray in native code;
//use the storeData in Java with updated value.
我对jni很陌生,我正在复习一个教程来实现一个简单的本地方法,但是我得到了一个无法满足的链接错误。据我所知,我完全遵循了教程中的步骤。请帮帮我。
以下是java包装器代码:
package com.cookbook.jni;
public class SquaredWrapper {
// Declare native method (and make it public to expose it directly)
public static native int squared(int base);
// Provide additional functiona
我有一个JAVA应用程序,因为我希望使用JNI将对象作为参数传递给C代码,然后再一次使用JNI将对象从C代码接收到JAVA。
在JAVA端,我只创建了一个应用程序,并将它传递给方法,如下所示
JlibFprint.fp_image_data fpimg = new JlibFprint.fp_image_data(); //object to be pass
//fp_image_data is the static inner class of the class JlibFprint
JlibFprint.fp_image_data fpimg1 = new JlibFprin
我在做一个特别的项目。
我想通过JNI获取C++上的Android联系人数据。
下面是我的JAVA端代码。(获取Android联系人数据库)
//For Map, HashMap, List
Map map;
List list = new ArrayList();
.
.
//add values into Hashmap
map = new HashMap();
map.put("name", name);
map.put("email", email);
.
.
// Gather Contact data and add a list
list.add
我正在处理JNI,我需要将一个jstring解析为一个const *,它可以正常工作,直到传入长度超过87个字符的字符串为止。以下是Java代码:
final StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append('.');
for(int i = 86; --i >= 0;) {
stringBuilder.append('a');
}
System.out.println(stringBuilder.length()); //I used this to
我使用std::vector在一个类桥接JNI入口点与一个新的C++库。
因为有很多JNI调用涉及到jbyteArray,所以我编写了简单的转换函数:
std::vector<uint8_t> Jni::Types::vectorForJarray(jbyteArray a) {
auto env = Jni::getEnv();
auto len = env->GetArrayLength(a);
std::vector<uint8_t> result;
result.reserve(static_cast<unsigned
例如,我有一个Java类:
public class JniTest {
public int member_int_;
public int member_int_2_;
public boolean member_bool_;
public static int member_static_int_ = 90;
public String member_str_;
void print() {};
}
在JNI中,我希望在事先不知道成员姓名的情况下获取每个成员:
JNIEXPORT void JNICALL Java_com_tencent_
我为下面的c++代码创建了JNI包装器。
add.h
class MyClass
{
public:
int add(int x, int y, int &z);
int sub(int x, int y);
};
上面提到的代码是.h文件
add.cpp
int MyClass::add(int x, int y, int &sum)
{
sum=x+y;
return 0;
}
int MyClass::sub(int x, int y)
{
return x - y;
}
s