4

我一直在尝试将一些内容复制assetsexternal storage我的 Java 代码中,并将目录传递给我的本机C/C++代码以进行读取。但是,问题是,如果no SD card设备上有getExternalFilesDir()返回类似"storage/emulated/0/Android/data/com.example.app/files"的东西,当我传递给native codefopen 和 fread 时,会导致应用程序坠毁。我相信原因是因为目录是人造的或符号链接或类似的东西。但是,即使我stdlib.h function realpath()在传递给本机代码的路径上使用 ,它仍然会崩溃。但是,如果我在路径中手动替换emulated/0/为,突然工作并将其转换为文件存储的实际位置,并且emulated/legacy/realpath()fread()工作正常,没有崩溃。不知何故emulated/legacy/是实际的符号链接,emulated/0/还有别的吗?

问题是我想编写从长远来看可靠的代码,无论 Android 组织外部存储和这些符号链接/虚拟文件系统的方式如何变化。我还希望无论在哪个设备上运行代码都能正常工作(我相信这些模拟目录因设备而异)。

是否有某种方法可以external storage directory在 Java 中获得可以在本机代码中写入和可靠读取的内容,而无需执行此替换旧版黑客操作?

谢谢你能给我的任何帮助。

编辑:调用getPath()getCanonicalPath()并返回所有返回相同getAbsolutePath()的路径。FilegetExternalFilesDir()

4

0 回答 0