簡體   English   中英

android ndk(opencv)

[英]android ndk (opencv)

當我在android應用程序中調用本機函數時出現崩潰,這是我的代碼:

lib libo=new lib();
public void onPreviewFrame(byte[] data, Camera camera)
{
    int s;// where w and h are width and height are the parameters of the camera
    s=libo.getdata(data);/: and getdata is my native function
}                   

我的getdata.c:

#include "getdata.h"
JNIEXPORT int JNICALL JAVA_android_video8_libo_som
(JNIEnv* env, jobject obj,jbyte* data)
{
    return (data[1]);
}

getdata.h:

#include <jni.h>


#ifndef _Included_android_video8_lib
#define _Included_android_video8_lib
#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT int JNICALL JAVA_android_video8_libo_som(JNIEnv* env, jobject obj, jbyte*);

#ifdef __cplusplus
}
#endif
#endif

Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := opcv
LOCAL_SRC_FILES := getdata.c
include $(BUILD_SHARED_LIBRARY)

還有我稱之為lib的類:

package android.video8;

public class libo { 
    static {
        System.loadLibrary("opcv");
            }
        public native static  int som(int s);
}

庫生成沒有問題,但是應用程序的執行使我崩潰了,我不知道哪里出錯了,謝謝

您的問題似乎有誤。 無論如何,您為JNI函數使用了錯誤的原型。 您應該使用以下簽名:

JNIEXPORT
jint JNICALL JAVA_android_video8_libo_getData(JNIEnv*, jclass, jbyteArray);

JNIEXPORT
jint JNICALL JAVA_android_video8_libo_som(JNIEnv*, jclass, jint);

每次更改本機方法的原型時,請使用javah工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM