Android OpenCV独立安装程序OpenCV

Android OpenCV独立安装程序OpenCV,android,c++,opencv,Android,C++,Opencv,我正在开发一个OpenCV应用程序,它工作得很好,但当我尝试安装该应用程序时,它会要求下载OpenCV管理器,而我不想要。我想为OpenCV应用程序制作一个独立的安装程序,其中包括OpenCV manager inbuit?我确实检查了,但它仍然显示了安装opencv的弹出窗口?根据我的经验,您可能只需要执行以下2(或3)个步骤: 1.更改java中的load lib代码,如下所示: static { Log.i(TAG,"OpenCV library load!"); if (!Ope

我正在开发一个OpenCV应用程序,它工作得很好,但当我尝试安装该应用程序时,它会要求下载OpenCV管理器,而我不想要。我想为OpenCV应用程序制作一个独立的安装程序,其中包括OpenCV manager inbuit?我确实检查了,但它仍然显示了安装opencv的弹出窗口?

根据我的经验,您可能只需要执行以下2(或3)个步骤:

1.更改java中的load lib代码,如下所示:

static {
  Log.i(TAG,"OpenCV library load!");
  if (!OpenCVLoader.initDebug()) {
    Log.i(TAG,"OpenCV load not successfully");
  }
  else {
    System.loadLibrary("opencv_java");// load other libraries
  }
}
OpenCV_CAMERA_MODULES:=on
OpenCV_INSTALL_MODULES:=on
OpenCV_LIB_TYPE:=SHARED
2.删除java中的此代码:

OpenCVLoader.initAsync(OpenCVLoader.OpenCV_VERSION_2_4_3, this, mLoaderCallback);
3.如果您已经将ndk代码添加到您的项目中,那么您可能需要像下面这样编辑Android.mk文件:

static {
  Log.i(TAG,"OpenCV library load!");
  if (!OpenCVLoader.initDebug()) {
    Log.i(TAG,"OpenCV load not successfully");
  }
  else {
    System.loadLibrary("opencv_java");// load other libraries
  }
}
OpenCV_CAMERA_MODULES:=on
OpenCV_INSTALL_MODULES:=on
OpenCV_LIB_TYPE:=SHARED
解决方案 当您提供libopencv_java3.so时,使用APK,OpenCV加载程序不需要OpenCV管理器

只需将OpenCV libs文件夹(请参见下面的上下文)复制到包含AndroidManifext.xml的文件夹中。现在将这个libs文件夹重命名为jniLibs。结果应如下图所示。还有更多的细节

android studio project/
├──libs/
|  └── *.jar       <-- if your library has jar files, they go here
├──src/
   └── main/
       ├── AndroidManifest.xml
       ├── java/
       └── jniLibs/ 
           ├── arm64-v8a/                       <-- ARM 64bit
           │   └── libopencv_java3.so
           ├── armeabi-v7a/                     <-- ARM 32bit
           │   └── libopencv_java3.so
           ├── x86/                             <-- Intel 32bit
           │   └── libopencv_java3.so
           └── ...
               └── libopencv_java3.so
  
只需使用您选择的Zip程序打开您的APK。以上列出的*.so文件应列在APK中:

APK file/
├──lib/
|  ├── arm64-v8a/                       
|  │   └── libopencv_java3.so
|  ├── armeabi-v7a/                     
|  │   └── libopencv_java3.so
|  ├── x86/                             
|  │   └── libopencv_java3.so
|  └── ...
|      └── libopencv_java3.so
├─ ...
使用此APK将导致OpenCV不再寻找OpenCV Manager应用程序。当然,通过为每个ABI提供库,您的APK变得非常大。根据您的用例,只为目标ABI/平台提供库可能会变得有用。可以为支持的ABI创建筛选器。以防相关问题

享受吧!
上下文 在运行时,应用程序需要OpenCV库文件 libopencv_java3.so。此文件有不同的版本,具体取决于要使用它的目标平台。在以下位置查看您的本地OpenCV SDK目录:

  • [OpenCV SDK]\SDK\native\libs\
通过提供相应的OpenCV库文件,您可以在这里找到提供的ABI/平台的简短列表:

  • 阿姆亚比
  • armeabi-v7a
  • x86
  • x86_64
  • arm64-v8a
Android OpenCV管理器 据我所知,OpenCV Manager应用程序除了在以下位置调用时向应用程序提供所需的OpenCV库外,没有其他功能:

if (!OpenCVLoader.initDebug()) {
        Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
    } else {
        Log.d(TAG, "OpenCV library found inside package. Using it!");
        mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
    }
当您有多个应用程序需要OpenCV库时,这是有意义的。所以你只能在你的移动设备上存储一次,而不是作为每个应用的一部分

在OpenCV源代码中查找OpenCVLoader.initDebug()的功能时:


因此,基本上,OpenCVLoader会在查询OpenCV管理器之前尝试在APK中查找OpenCV库文件。

请参阅此[链接][1]。这可能对你有帮助。[1] :您可以直接将OpenCV库放入项目中,我相信发行版中有一个jar文件。OpenCV管理器只是帮助您避免将大型库添加到每个使用OpenCV的项目中。