做为OpenCV4Android的系列博客,本文将给出一个打包OpenCV API到APK使Android应用脱离OpenCV-Manager的例子。
首先依然强调一点:不要盲目相信任何“大神”的博客,官方文档才是最佳的参考资料。
关于脱离OpenCV Manager的方法,官方文档给出了一个解决方案,链接如下:
http://docs.opencv.org/trunk/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html#application-development-with-static-initialization
具体操作方法,我们从Application Development with Static Initilalization部分开始阅读就好。
下面,给出我的实践例子:
Android.mk文件部分:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) OPENCV_CAMERA_MODULES:=on OPENCV_INSTALL_MODULES:=on #OPENCV_LIB_TYPE:=SHARED OPENCV_LIB_TYPE:=STATIC include ../sdk/native/jni/OpenCV.mk #include E:/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk LOCAL_SRC_FILES := GetString.cpp LOCAL_C_INCLUDES += $(LOCAL_PATH) LOCAL_LDLIBS += -llog -ldl LOCAL_MODULE :=helloJNI include $(BUILD_SHARED_LIBRARY)
这个问题纠结了很久,最后在stackoverflow上找到了解决方案:把绝对路径改成相对路径,编译成功时也着实无语。
stackoverflow链接:http://stackoverflow.com/questions/601516/cygwin-make-error-target-pattern-contains-no
主文件部分(加载So库):
public class MainActivity extends ActionBarActivity implements OnClickListener { private TextView mTextView; private ImageView imageView; private Bitmap bmp; private Button btnProc; static { if (!OpenCVLoader.initDebug()) { } System.loadLibrary("helloJNI"); } …… }
1、卸载OpenCV Manager后使用penCVLoader.initAsync()的APK,无法启动
2、脱离OpenCV Manager的APK
3、调用JNI方法处理图像