2015-01-11 1 views
0

Я сделал это в простом Java программеSystem.loadLibrary в андроид

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

    System.out.println("\nRunning FaceDetector"); 

    String cascade= "img/test.xml"; 
    String imgloc= "img/asd.png"; 

    CascadeClassifier faceDetector = new CascadeClassifier(cascade); 
    Mat image = Highgui.imread(imgloc); 

    MatOfRect faceDetections = new MatOfRect(); 
    faceDetector.detectMultiScale(image, faceDetections); 

    System.out.println(String.format("Detected %s faces", faceDetections.toArray().length)); 

    for (Rect rect : faceDetections.toArray()) { 
     Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), 
       new Scalar(0, 255, 0)); 
    } 

    String filename = "ouput.jpg"; 
    System.out.println(String.format("Writing %s", filename)); 
    Highgui.imwrite(filename, image); 

Он обнаруживает лицо из изображения и выводит обнаруженное лицо. Теперь я хочу включить его в проект Android, но System.loadLibrary делает мое приложение. авария. Как я могу это решить?

Вот crashlog

01-11 10:44:23.296: E/AndroidRuntime(1564): FATAL EXCEPTION: main 
01-11 10:44:23.296: E/AndroidRuntime(1564): Process: com.tppa.detector, PID: 1564 
01-11 10:44:23.296: E/AndroidRuntime(1564): java.lang.NoClassDefFoundError: org.opencv.core.Core 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at com.tppa.detector.MainActivity.onCreate(MainActivity.java:25) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at android.app.Activity.performCreate(Activity.java:5231) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at android.os.Handler.dispatchMessage(Handler.java:102) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at android.os.Looper.loop(Looper.java:136) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at android.app.ActivityThread.main(ActivityThread.java:5001) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at java.lang.reflect.Method.invoke(Method.java:515) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
01-11 10:44:23.296: E/AndroidRuntime(1564):  at dalvik.system.NativeStart.main(Native Method) 
01-11 10:44:23.304: W/ActivityManager(479): Force finishing activity com.tppa.detector/.MainActivity 
01-11 10:44:23.452: D/dalvikvm(479): GC_FOR_ALLOC freed 543K, 23% free 6457K/8320K, paused 13ms, total 13ms 
01-11 10:44:23.956: W/ActivityManager(479): Activity pause timeout for ActivityRecord{528f2d70 u0 com.tppa.detector/.MainActivity t8 f} 
01-11 10:44:24.004: W/EGL_genymotion(655): eglSurfaceAttrib not implemented 
01-11 10:44:33.080: E/WindowManager(479): Starting window AppWindowToken{529d5a4c token=Token{528e29fc ActivityRecord{528f2d70 u0 com.tppa.detector/.MainActivity t8}}} timed out 

Он работал в простом Java, я добавил .jar в новую библиотеку в пути сборки, и как родную библиотеку я добавил .dll, но это, кажется, для андроидов это не будет работать.

+2

отправить журнал сбоев –

+1

Вы построили нативную часть с помощью NDK? https://developer.android.com/tools/sdk/ndk/index.html#Tools –

+0

Я никогда не размещал crashlog, я сделал это правильно? Я также не понимаю, что такое родной язык. –

ответ

1

Как сказано в ваших комментариях, вы должны скомпилировать свою библиотеку для андроидной архитектуры. Файлы DLL для Windows. Вот почему ваш компилятор не может найти символ.

Android NDK позволяет вам скомпилировать статическую (.a) или общую (.so) библиотеку для различных архитектур, таких как armeabi, armeabi-v7a или x86, в зависимости от ваших потребностей.

Смежные вопросы