我一直在尝试将一些内容复制assets
到external storage
我的 Java 代码中,并将目录传递给我的本机C/C++
代码以进行读取。但是,问题是,如果no SD card
设备上有getExternalFilesDir()
返回类似"storage/emulated/0/Android/data/com.example.app/files"的东西,当我传递给native code
fopen 和 fread 时,会导致应用程序坠毁。我相信原因是因为目录是人造的或符号链接或类似的东西。但是,即使我stdlib.h function realpath()
在传递给本机代码的路径上使用 ,它仍然会崩溃。但是,如果我在路径中手动替换emulated/0/
为,突然工作并将其转换为文件存储的实际位置,并且emulated/legacy/
realpath()
fread()
工作正常,没有崩溃。不知何故emulated/legacy/
是实际的符号链接,emulated/0/
还有别的吗?
问题是我想编写从长远来看可靠的代码,无论 Android 组织外部存储和这些符号链接/虚拟文件系统的方式如何变化。我还希望无论在哪个设备上运行代码都能正常工作(我相信这些模拟目录因设备而异)。
是否有某种方法可以external storage directory
在 Java 中获得可以在本机代码中写入和可靠读取的内容,而无需执行此替换旧版黑客操作?
谢谢你能给我的任何帮助。
编辑:调用getPath()
,getCanonicalPath()
并返回所有返回相同getAbsolutePath()
的路径。File
getExternalFilesDir()