我有NDK的问题.
在我的JNI_OnLoad方法中,我缓存了JavaVm指针,调用该方法的类以及稍后使用的方法ID:
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved){
JNIEnv *env;
cachedJVM = jvm;
if((*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_6)){
LOG_ERROR("Could not get JNIEnv*");
return JNI_ERR;
}
javaClass = (*env)->FindClass(env, "org/test/opensl/AudioProcessor");
if(javaClass == NULL){
LOG_ERROR("Could not get java class");
return JNI_ERR;
}
javaCallbackMID = (*env)->GetMethodID(env, javaClass, "enqueueAudio", "([B)V");
if(javaCallbackMID == NULL){
LOG_ERROR("Could not get method identifier");
return JNI_ERR;
}
return JNI_VERSION_1_6;
}
Run Code Online (Sandbox Code Playgroud)
我有一个小的实用程序方法定义如下,应该给我一个指向JNIEnv的指针:
JNIEnv* JNU_GetEnv(){
JNIEnv* env;
(*cachedJVM)->GetEnv(cachedJVM, (void**)&env, JNI_VERSION_1_6);
return env;
}
Run Code Online (Sandbox Code Playgroud)
最后,我有一个来自OpenSL ES的回调SLAndroidSimpleBufferQueueItf,我想从以下处理录制的音频SLRecordItf:
void recorderCallback(SLAndroidSimpleBufferQueueItf bq, void …Run Code Online (Sandbox Code Playgroud) 我正在努力创建我的自定义对象类型ShareStruct的二维数组:
jobjectArray ret ;
jobjectArray ins ;
jobjectArray outs;
jclass myClass = (*env)->FindClass(env,"org/apache/s4/core/ShareStruct");
if (myClass==NULL) fprintf(stderr, "Class ShareStruct not found");
jclass myClassArray = (*env)->FindClass(env, "[Lorg/apache/s4/core/ShareStruct");
if (myClassArray==NULL) fprintf(stderr, "Class ShareStruct[] not found");
ins = (*env)->NewObjectArray(env, in, myClass, NULL);
outs = (*env)->NewObjectArray(env, out, myClass, NULL);
ret = (*env)->NewObjectArray(env, 2, myClassArray, NULL);
Run Code Online (Sandbox Code Playgroud)
第一个类加载有效(ShareStruct很好),而另一个(尝试加载ShareStruct []类)则无效。我已经尝试过带或不带L,但没有运气。有任何想法吗?我是JNI的新手。
谢谢!