Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NDK应用程序-集成文本文件进行部署的最佳方式 我正在测试集成C++代码的Android应用程序的创建。在本例中,我使用的是OpenCV库_Android_C++_Opencv_Android Ndk_Java Native Interface - Fatal编程技术网

Android NDK应用程序-集成文本文件进行部署的最佳方式 我正在测试集成C++代码的Android应用程序的创建。在本例中,我使用的是OpenCV库

Android NDK应用程序-集成文本文件进行部署的最佳方式 我正在测试集成C++代码的Android应用程序的创建。在本例中,我使用的是OpenCV库,android,c++,opencv,android-ndk,java-native-interface,Android,C++,Opencv,Android Ndk,Java Native Interface,我设置了环境,还能够编译和部署。该应用程序工作正常。直到这里都很美。不过有一点用户体验问题。该应用程序使用两个xml文件: 但目前,最终用户需要在设备和给定文件夹中发布下载内容,否则应用程序将无法执行相应的检测。到目前为止,情况如下: JNIEXPORT void JNICALL Java_com_demo_test_opencvsample_OpenCVClass_faceDetection (JNIEnv *, jclass, jlong addrRgba){ Mat&

我设置了环境,还能够编译和部署。该应用程序工作正常。直到这里都很美。不过有一点用户体验问题。该应用程序使用两个xml文件:


但目前,最终用户需要在设备和给定文件夹中发布下载内容,否则应用程序将无法执行相应的检测。到目前为止,情况如下:

JNIEXPORT void JNICALL Java_com_demo_test_opencvsample_OpenCVClass_faceDetection
  (JNIEnv *, jclass, jlong addrRgba){
    Mat& frame = *(Mat*)addrRgba;

    detect(frame);
}

void detect(Mat& frame){
    // these files will be loaded from a specific folder in the phone memory
    String face_cascade_name = "/storage/emulated/0/data/haarcascade_frontalface_alt.xml";
    String eyes_cascade_name = "/storage/emulated/0/data/haarcascade_eye_tree_eyeglasses.xml";
    CascadeClassifier face_cascade;
    CascadeClassifier eyes_cascade;

    //-- 1. Load the cascades
    if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return; };
    if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return; };

->问题:是否有办法将两个xml文件直接集成到apk中,以避免最终用户在安装应用程序后必须在其设备上单独下载它们?我希望他在安装应用程序和C++代码后直接获得它们,也因为它们不应该被改变

在回答之前请注意:我对在最终的应用程序中添加两个下载按钮不感兴趣,甚至对拥有完整的android解决方案也不感兴趣。我想用C++核心

来维护当前的体系结构
提前感谢那些试图提供帮助的人

资产API在其中提到可用,请转发到此页面

在这里,它描述了一组类似于fopen的API,允许打开捆绑资产

硬编码路径不是管理文件的正确方法,因为不同的设备或未来/过去的操作系统可能会重新排列文件系统

显示如何从NDK调用android函数,特别是如何加载externalDirectory—SD卡的根目录(当设备连接到计算机时用户可见)

对于仅与项目相关的文件(这里似乎是这样),我建议将xml文件存储在应用程序目录中,可以通过jni从Context->getFilesDir()访问该目录(请参阅

  • 如果您的xml文件是静态的,并且不可能比您的应用程序更频繁地更改,请使用资产
  • 如果您的xml文件将由应用程序或您自己更新,请使用getFilesDir()
  • 如果您想让用户查看XML文件(并能够编辑它们?),请使用getExternalDirectory()

  • 您是否考虑过使用资产?()ciao@VolAnd,谢谢你的回答!我正在为Steve检查答案,答案更完整一点。我读过关于Assets文件夹的文章,这是一种简单的处理方法,使用纯Android方法,我也看到了这篇文章,这篇文章非常好:但是-一旦移动到Assets文件夹中-问题是能够通过C++ C++代码,有一个好的日子!Ciaa@ MkStuvi,我阅读了你的链接文档,非常感谢你的时间。我还不清楚如何在代码的角度下进行。我把两个XML文件放到了资产文件夹中。我的想法现在是一个接近C++的东西,基本上是FACEYSCALL。“app/src/main/Assets/haarcascade_frontalface_alt.xml”)。因此,要从android中获取信息,您的建议是更改原始的OpenCV加载函数[调用AAsset_openFileDescriptor()?您知道/有任何示例吗?