我在Android应用程序的本机部分创建了一个对象,如下所示:
CascadeClassifier face_cascade;
face_cascade.load( "haarcascades/haarcascade_frontalface_alt2.xml" );
在纯c ++中,除了你的来源之外,你将 haarcascade_frontalface_alt2.xml 放在 haarcascades 文件夹中。但现在我真的很困惑应该放在哪里?在jni / haarcascades目录中?或者在其他地方?
提前谢谢。
答案 0 :(得分:1)
Android应用程序以文件系统root作为当前目录启动。此外,在部署Android应用程序时,通常将文件放在res/raw
目录或Java项目的assets
目录中。您可以直接使用原生代码访问assets
(请参阅http://www.costrategix.com/blog/reading-files-from-android-assets-folder-using-c-ndk/和AssetManager and native code)。
Android隔离了不同应用程序的文件访问权限,因此每个应用程序都可以存储其私有文件。 Android应用通常使用/sdcard/
进行文件存储,因为那里通常有更多的空间。此外,本机代码更容易在 sdcard 上查找文件。但请注意:在某些情况下,/sdcard/
可能不会出现在某些设备上。通常,Android系统会有一个环境变量 EXTERNAL_STORAGE
,可以使用它;但官方支持的寻找此途径的方法是Java API。
无法从Java操作当前目录,但您可以使用JNI。
无论如何,本机代码具有与Java代码相同的文件访问权限。