Android应用程序的本机部分中的相对寻址

时间:2013-02-24 13:31:25

标签: android android-ndk relative-addressing

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

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

在纯c ++中,除了你的来源之外,你将 haarcascade_frontalface_alt2.xml 放在 haarcascades 文件夹中。但现在我真的很困惑应该放在哪里?在jni / haarcascades目录中?或者在其他地方?
提前谢谢。

1 个答案:

答案 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代码相同的文件访问权限。