如何在Android中仅包含必要的OpenCV库?

前端之家收集整理的这篇文章主要介绍了如何在Android中仅包含必要的OpenCV库?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Android应用程序中通过JNI使用OpenCV.
libopencv_java.so太大了,大约7M.显然,我只需要几个库.
我检查OpenCV4Android中的libs,找出一些静态库,比如libopencv_core.a
这是我在Android.mk中的新代码,包含必要的OpenCV库.我包括libopencv_core.a,libopencv_highgui.a,libopencv_imgproc.a和一些第三方库,它们是:liblibjasper.a,liblibjpeg.a,liblibpng.a,liblibtiff.a
  1. include $(CLEAR_VARS)
  2. LOCAL_MODULE := libopencv_highgui_prebuilt
  3. LOCAL_SRC_FILES := libopencv_highgui.a
  4. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include
  5. include $(PREBUILT_STATIC_LIBRARY)
  6.  
  7.  
  8. include $(CLEAR_VARS)
  9. LOCAL_MODULE := libopencv_imgproc_prebuilt
  10. LOCAL_SRC_FILES := libopencv_imgproc.a
  11. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include
  12. include $(PREBUILT_STATIC_LIBRARY)
  13.  
  14. include $(CLEAR_VARS)
  15. LOCAL_MODULE := libopencv_core_prebuilt
  16. LOCAL_SRC_FILES := libopencv_core.a
  17. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include
  18. include $(PREBUILT_STATIC_LIBRARY)
  19.  
  20. include $(CLEAR_VARS)
  21. LOCAL_MODULE := liblibjpeg_prebuilt
  22. LOCAL_SRC_FILES := liblibjpeg.a
  23. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include
  24. include $(PREBUILT_STATIC_LIBRARY)
  25.  
  26. include $(CLEAR_VARS)
  27. LOCAL_MODULE := liblibpng_prebuilt
  28. LOCAL_SRC_FILES := liblibpng.a
  29. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include
  30. include $(PREBUILT_STATIC_LIBRARY)
  31.  
  32. include $(CLEAR_VARS)
  33. LOCAL_MODULE := liblibtiff_prebuilt
  34. LOCAL_SRC_FILES := liblibtiff.a
  35. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include
  36. include $(PREBUILT_STATIC_LIBRARY)
  37.  
  38.  
  39. include $(CLEAR_VARS)
  40. LOCAL_MODULE := liblibjasper_prebuilt
  41. LOCAL_SRC_FILES := liblibjasper.a
  42. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/OpenCV242AndroidSDKNativeJNI/include
  43. include $(PREBUILT_STATIC_LIBRARY)
  44.  
  45.  
  46.  
  47. include $(CLEAR_VARS)
  48. LOCAL_MODULE := native_jni
  49. LOCAL_SRC_FILES := jni_part.cpp
  50. LOCAL_CFLAGS += -fpermissive
  51.  
  52. LOCAL_STATIC_LIBRARIES += libopencv_highgui_prebuilt
  53. LOCAL_STATIC_LIBRARIES += libopencv_imgproc_prebuilt
  54. LOCAL_STATIC_LIBRARIES += libopencv_core_prebuilt
  55. LOCAL_STATIC_LIBRARIES += liblibjpeg_prebuilt
  56. LOCAL_STATIC_LIBRARIES += liblibpng_prebuilt
  57. LOCAL_STATIC_LIBRARIES += liblibtiff_prebuilt
  58. LOCAL_STATIC_LIBRARIES += liblibjasper_prebuilt
  59.  
  60. LOCAL_LDLIBS += -llog -ldl
  61. LOCAL_LDLIBS += -ljnigraphics
  62. LOCAL_LDLIBS += -lz
  63.  
  64. include $(BUILD_SHARED_LIBRARY)

但它没有经过编译.一个长错误列表,所有与断言相关的失败:

  1. /usr/src/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld: BFD (GNU Binutils) 2.21 assertion fail /usr/local/google/home/andrewhsieh/ndk-andrewhsieh/src/build/../binutils/binutils-2.21/bfd/elf32-arm.c:10190
  2. Install : libnative_jni.so => libs/armeabi-v7a/libnative_jni.so
  3. /usr/src/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld: BFD (GNU Binutils) 2.21 assertion fail /usr/local/google/home/andrewhsieh/ndk-andrewhsieh/src/build/../binutils/binutils-2.21/bfd/elf32-arm.c:10190

我也试图改变这些静态库的顺序;但它不起作用.
有什么建议吗?

解决方法

静态库链接只会引入您在代码中实际使用的功能,而不是像.so一样引入整个库. 查看OpenCV Android示例项目,了解如何使用静态链接.

猜你在找的Android相关文章