AndroidScannerDemo移植总结

前言

最近项目里要用到AndroidScannerDemo的效果,在移植的过程中遇到一些问题,在这里进行一个整理。

移植过程

主要应该是Android.mk和Application.mk的移植

这个两个文件应该是涉及到jni的时候都会用到的,里面有一些配置信息。下面我附上原项目的文件和我最终的文件。
AndroidScannerDemo 中Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
include sdk/native/jni/OpenCV.mk

LOCAL_MODULE    := Scanner
LOCAL_SRC_FILES := scan.cpp
LOCAL_LDLIBS    += -lm -llog -landroid
LOCAL_LDFLAGS += -ljnigraphics
include $(BUILD_SHARED_LIBRARY)

移植后我的Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)


OpenCV_INSTALL_MODULES := on
OpenCV_CAMERA_MODULES := off

OPENCV_LIB_TYPE :=STATIC

ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
include F:\我的工程目录\library\native\jni\OpenCV.mk //这里native文件夹的位置我换过了,换到根目录里面了
else
include $(OPENCV_MK_PATH)
endif

LOCAL_MODULE := Scanner

LOCAL_SRC_FILES := scan.cpp

LOCAL_LDLIBS +=  -lm -llog -ljnigraphics

include $(BUILD_SHARED_LIBRARY)

这个配置是从OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)里面来的,使用的是里面的第一种方式,静态加载的方式(其实如果只是想移植AndroidScannerDemo的话,不需要我这么写,我这么写主要是为了减少包的大小,之前的时候只适配armeabi-v7a的话,安装包大小有5m多,现在是2m多,感觉应该能更小一些,只是还没找到方法。)。里面有一些参数的解释,OpenCV_INSTALL_MODULES:=on的意思是自动将依赖的OpenCV的so库拷贝到libs目录下,但很遗憾的是,这个命令只对OPENCV_CAMERA_MODULES有效。只有当OPENCV_CAMERA_MODULES:=on时,可以看到他会自动将里面的带camera的so拷贝至工程下的libs文件夹下。 这里我有个问题是,按照这种解释,那么上面的OpenCV_INSTALL_MODULES:=on好像没有意义,不清楚里面是不是还有一些其他考虑。LOCAL_MODULE 是要生成的库的名字,LOCAL_SRC_FILES 是jni文件夹下的cpp文件。有一个要注意的是LOCAL_LDLIBS ,这个后面有一个-ljnigraphics,这个是要加上的,而且是要和gradle配合 在gradle的defaultConfig中要加上下面这一段

ndk {
    moduleName "Scanner"
    ldLibs "jnigraphics"//在opencv里起到导入这个包的作用,不然会提示Bitmap这个类找不到
}

AndroidScannerDemo 中Application.mk

APP_STL := stlport_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-14

移植后我的Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-14

这两个差别只在APP_STL的值,一个是stlport_static一个是gnustl_static。区别是stlport_static - 使用STLport作为静态库,gnustl_static - 使用 GNU libstdc++ 作为静态库。这里我不太清楚两者的具体差别,只是看到有说GNU libstdc++相比较而言会生成的问价体积大一些,运行效率低一些,但这里如果不用gnustl_static的话编译时会报错,各种找不到类。

javah命令

把代码拿过来之后,如果想要进行javah命令,可能有的人会发现有错,比如报Bitmap找不到之类的。这里把我现在的javah命令贴出来,我的是用android studio的External Tools生成的一个工具,里面Parameters的值为

-classpath D:\Develop\Android\Sdk\platforms\android-24\android.jar;. -jni -d $ModuleFileDir$\src\main\jni $FileClass$
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值