0

我在 Android 应用程序的本机部分创建了一个对象,如下所示:

CascadeClassifier face_cascade;
face_cascade.load( "haarcascades/haarcascade_frontalface_alt2.xml" );

在纯 c++ 中,您将haarcascade_frontalface_alt2.xml放在haarcascades文件夹中,除了您的源代码。但是现在我真的很困惑它应该放在哪里?在 jni/haarcascades 目录中?或者别的地方?
提前致谢。

4

1 回答 1

1

Android 应用程序以文件系统根目录作为当前目录启动。此外,当您部署 Android 应用程序时,通常将文件放在res/raw目录中或assetsJava 项目的目录中。您可以assets直接访问本机代码(请参阅http://www.costrategix.com/blog/reading-files-from-android-assets-folder-using-c-ndk/AssetManager 和本机代码)。

Android 隔离不同应用程序的文件访问,以便每个应用程序都可以存储其私有文件。Android 应用程序经常使用/sdcard/文件存储,因为那里通常有更多空间。此外,本机代码更容易找到sdcard上的文件。但请注意:/sdcard/在某些情况下,某些设备上可能不存在。通常,Android 系统会有一个环境变量 EXTERNAL_STORAGE来代替它;但官方支持的查找此路径的方法是通过Java API

从 Java 中操作当前目录是不可能的,但您可以使用 JNI。

无论如何,本机代码具有与 Java 代码相同的文件访问权限。

于 2013-02-24T18:30:53.663 回答