0
最近我滿足我的項目JNI的要求,我不知道如何簽名我的本地方法,這就像public void f(byte[] byte, Camera camera)
JNI相機簽名
我知道byte[]
的簽名爲([B)V
,但相機真麻煩我,任何人都可以請這個簽名幫我嗎?
最近我滿足我的項目JNI的要求,我不知道如何簽名我的本地方法,這就像public void f(byte[] byte, Camera camera)
JNI相機簽名
我知道byte[]
的簽名爲([B)V
,但相機真麻煩我,任何人都可以請這個簽名幫我嗎?
簽名取決於你在本地進行的操作。
如果你正在用C語言做你的相機readinf,那麼它看起來就像這樣。
在Java端的簽名看起來像
class TestMe {
public native void acquireFromCamera(int camera, byte[] buffer);
}
JAVAH使得像
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestMe */
#ifndef _Included_TestMe
#define _Included_TestMe
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: TestMe
* Method: acquireFromCamera
* Signature: (I[B)V
*/
JNIEXPORT void JNICALL Java_TestMe_acquireFromCamera
(JNIEnv *, jobject, jint, jbyteArray);
#ifdef __cplusplus
}
#endifm
#endif
頭文件如果您傳遞從Java緩存陣列下來JNI不要忘了鎖緩衝區在傳遞之前。否則,GC可能會在您獲取時移動它。
C面調用參數
(JNIEnv *myEnvironment, jobject this, jint camera, jbyteArray buffer);
這種接口的效果很好,如果你想使用底層C函數(S)看上去隱約像這樣...
無效readCamera(INT相機,無符號字符*數據);
如果底層C庫要求您首先打開相機/採集流,最好在一個JNI函數中完成並在另一箇中讀取。 您的本地代碼最終會在單個DLL /共享庫中只加載一次。
從Java到C代碼的相機接口工作不難。
你的C代碼可以調用Java代碼的方法。用你的JNI方法來做,這是非常痛苦的。
我不會建議嘗試從您的庫到Java執行異步回調。它可以完成,但是非常耗時,難以泄漏內存。
非常感謝你,我會盡快試用:) – wayne
我嘗試javah與對象相機相機,它結束了「Landroid /硬件/相機;」 ,最後... :) – wayne