标签: jniwrapper

单元测试JNI调用

我有一些用于某些C++代码的Android JNI包装器.C++代码有自己的单元测试集.
我想为JNI包装类编写Java单元测试.

有没有办法.so从桌面控制台(例如Windows)对Android JNI 包装器API 进行单元测试?也许使用桌面Java框架,但使用所有Android SDK调用?

java-native-interface android unit-testing android-ndk jniwrapper

7
推荐指数
1
解决办法
2116
查看次数

带有 JNI 的 C++ 应用程序抛出错误“找不到 jvm.dll。重新安装应用程序可以修复......”

我在 VC6 中编写了一个普通的 C++ 应用程序,它使用 jni 调用 java 中的方法。为此,我在项目目录中包含了 jni.h 和其他 lib 文件夹。

代码编译但是当我运行应用程序时它失败说“找不到jvm.dll。重新安装应用程序会修复它”。但是 jvm.dll 存在于我的电脑中。

如果我将应用程序的工作目录设置为 jvm.dll 所在的位置,那么它就像一个魅力。我无法将应用程序的工作目录设置为 jvm.dll 目录,因为该应用程序将来会成为 dll。

我也尝试将系统变量中的 PATH 变量更新到 jvm.dll 的位置,但没有任何效果..

我怀疑 jvm.lib 正在从我的应用程序未提供的某个目录位置加载 jvm.dll .. 因此它失败了,..

请建议我出了什么问题。

提前致谢。

问候拉加文德拉

java-native-interface jniwrapper jnienv

5
推荐指数
1
解决办法
2389
查看次数

JNI - SetByteArrayRegion不起作用

我在包装器代码中编码/解码音频有一些问题,我调试了我的代码,最后发现SetByteArrayRegion它没有按预期工作.开始了:

// incoming parameters => jbyteArray jencoded
jbyte encoded[320]; //
... // fill encoded with 'encodedSize' number of bytes
int i;
for (i = 0; i < encodedSize; i++) {
    fprintf(encodeDbg, "%02X ", (unsigned char)(encoded[i]));
}
fprintf(encodeDbg, "\n");
fflush(encodeDbg);
(*env)->SetByteArrayRegion(env, jencoded, 0, encodedSize, encoded);
jbyte* encoded_test = (*env)->GetByteArrayElements(env, jencoded, NULL);
for (i = 0; i < encodedSize; i++) {
    fprintf(encodeDbg, "%02X ", (unsigned char)(encoded_test[i]));
}
fprintf(encodeDbg, "\n");
fflush(encodeDbg);
(*env)->ReleaseByteArrayElements(env, jencoded, encoded_test, JNI_ABORT);
Run Code Online (Sandbox Code Playgroud)

encodedjencoded(即encoded_test)中的值不匹配!多次调用此过程后, …

c java java-native-interface jniwrapper

5
推荐指数
0
解决办法
858
查看次数

如何将C结构的以下元素映射到Java?

我有以下C结构,需要映射到Java.因为我需要从C代码生成的DLL中调用一个方法.以下是我的结构.

typedef struct _ipj_iri_device
{
IPJ_READER_CONTEXT    reader_context;
IPJ_READER_IDENTIFIER reader_identifier;
uint32_t              receive_timeout_ms;

/* Internal Only */
uint8_t               sync_state;
bool                  wait_for_response;
uint32_t              frame_length;
uint32_t              receive_index;
uint8_t               receive_buffer[IPJ_RECEIVE_BUFFER_SIZE];

#if !defined(IRI_RX_ONLY)
uint8_t               transmit_buffer[IPJ_TRANSMIT_BUFFER_SIZE];
#endif

} ipj_iri_device;
Run Code Online (Sandbox Code Playgroud)

IPJ_READER_CONTEXT和IPJ_READER_IDENTIFIER如下所示.

typedef void* IPJ_READER_CONTEXT;
typedef void* IPJ_READER_IDENTIFIER;
Run Code Online (Sandbox Code Playgroud)

如何解析这两个元素以映射到Java?请指教.

c java java-native-interface jniwrapper

5
推荐指数
1
解决办法
779
查看次数