간단한 C 코드에 대해 jni 호출을 작성하려고했습니다. 나는 2.3.3을 실행하는 전화에이 파일을 설치하려고 할 때 설치가 안되는 경우가 있는데, 설치 한 후에도 강제로 닫히고 있습니다. 제발 도와주세요. 코드 세부 정보는 다음과 같습니다.Android JNI 호출
헤더 파일을 생성하는 Java 코드입니다. 고유 기능의 구현
#include "com_hosa_edgejava.h"
#include <jni.h>
#include <cv.h>
#include <highgui.h>
using namespace cv;
JNIEXPORT jint JNICALL Java_com_pes_edgejava_main(JNIEnv *, jobject){
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat edges;
namedWindow("edges",CV_WINDOW_AUTOSIZE);
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
Canny(edges, edges, 0, 30, 3);
imshow("edges", edges);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
android.mk 아래와 같다
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_hosa_edgejava */
#ifndef _Included_com_hosa_edgejava
#define _Included_com_hosa_edgejava
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_hosa_edgejava
* Method: main
* Signature:()I
*/
JNIEXPORT jint JNICALL Java_com_hosa_edgejava_main
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
아래로
package com.hosa;
public class edgejava
{
static{
System.loadLibrary("edgejava");
}
public native int main();
}는
생성 된 헤더 파일은 fi 르
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include /home/srijith/android-opencv/OpenCV-2.3.1/share/OpenCV/OpenCV.mk
LOCAL_MODULE := edgejava
LOCAL_SRC_FILES := edgecpp.cpp
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
application.mk
APP_MODULES := edgejava
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
package com.hosa;
import android.app.Activity;
import android.os.Bundle;
public class Andedge2Activity extends Activity {
edgejava nativelib;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nativelib= new edgejava();
int i=nativelib.main();
System.out.println("value returned to andedgeactivity "+i);
}
}
매니페스트에 대한 모든 필요한 변경을 사용의 언급처럼 수행 된 다음과 같은 활동 파일입니다 카메라 및 사용 권한이 설정되었습니다.
편집 : 나는 com_hosa_edgejava_main
에 com_pes_edgejava
을 변경하지만 여전히 작동하지 않은 ...
다른 솔루션 ??????
응용 프로그램을 강제 종료 할 때 Android 로그에 표시되는 내용은 무엇입니까? 상황을 디버그하는 데 도움이되는 충돌 메시지일까요? – gfour
StackOverflow는 포럼이 아닙니다. 우리는 * 실제로 대답에 대한 답변을 기대합니다 *. 다른 사용자와 상호 작용해야하는 경우 답변에 댓글을 남길 수 있습니다.50 명의 담당자를 쳤을 때 모든 곳에서 의견을 남길 수 있습니다. 세부 사항을 추가해야하는 경우 질문을 편집 할 수 있습니다. 다른 모든 문제에 대해서는 [faq]를 보거나 [StackOverflow]를 토론하는 [meta]를 방문하십시오. – Will
@ Gaurav : 사람들의 대답을 편집하여 질문을 추가하지 마십시오. 원래 질문을 편집하거나 질문에 대한 의견을 게시하십시오. – Goz