Android NDK应用程序-集成文本文件进行部署的最佳方式 我正在测试集成C++代码的Android应用程序的创建。在本例中,我使用的是OpenCV库
我设置了环境,还能够编译和部署。该应用程序工作正常。直到这里都很美。不过有一点用户体验问题。该应用程序使用两个xml文件: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&
但目前,最终用户需要在设备和给定文件夹中发布下载内容,否则应用程序将无法执行相应的检测。到目前为止,情况如下:
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()访问该目录(请参阅
您是否考虑过使用资产?()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()?您知道/有任何示例吗?