我出于性能原因使用Android NDK主要在C中创建应用程序,但似乎fopen等文件操作在Android中无法正常运行.每当我尝试使用这些功能时,应用程序崩溃.
如何使用Android NDK创建/写入文件?
我正在尝试构建一个利用NativeActivityNDK设施的Android应用程序.我有以下结构:
/system/vendor/<company>; 我正在使用自定义构建的Android映像,因此使用具有适当权限和所有内容的库是没有问题的NativeActivity依次依赖于上面提到的库安装在/ system/vendor中的库和我的应用程序使用几个配置文件.使用标准C API读取它们没有问题
fopen/fclose.但是那些库和我的应用程序还需要存储一些文件作为其操作的结果,如配置,一些运行时参数,校准数据,日志文件等.随着文件的存储,有一个小问题因为我是不允许写入/system/vendor/...(因为"/ system/..."下的文件系统是以只读方式挂载的,我不想破解它).
那么创建和存储这些文件的最佳方式是什么?哪些是最符合"Android"存储区域的?
我一直在阅读android-ndk谷歌组中的几个主题,在这里提到内部应用程序私有存储或外部SD卡,但由于我没有Android的扩展经验,我不知道是什么将是正确的方法.如果该方法涉及某些特定的Android API,那么C++中的一个小代码示例将非常有用; 我已经看过几个涉及Java和JNI的例子(例如在这个SO问题中),但我现在想远离它.从C++使用本机活动的internalDataPath/externalDataPath配对(一个使它们总是为NULL的错误)似乎也存在问题
.
除了在SD卡上,还有其他方法可以在其他地方写入文件吗?
我在文件系统上尝试了很多不同的路径但是fopen总是返回NULL,除了我在/ sdcard /中写入/读取的任何文件...
还有别的东西相当于:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
那允许你在文件系统上写一些东西?
为了说明我测试的地方,HTC Desire S,Android 2.3.5和ndk-r8.
我在ndk-r7b和ndk-r8中使用android_app-> activity-> internalDataPath或externalDataPath访问本地读写目录时遇到问题,因为它们都是NULL.我看到这已经发布在以前的版本中,根据这篇文章,更新将解决这个问题: -
现在也许这可以在冰淇淋三明治中修复,但这远非理想,因为我的工具链完全支持向后兼容性,以捕捉那些不更新的人.所以我的问题是有一个已知的修复还是我必须手动添加目录结构,如"/data/data/com.example.mytest/files/somefile.dat",直到它修复?