【发布时间】:2013-12-05 13:46:55
【问题描述】:
我正在为 Android 开发一个原生库,我需要写入/读取一些临时文件。由于它是库,我不知道以后会在什么情况下使用它。
在 SO 上搜索我发现 data/data/<Your_package_name_usually com.android.appName>/files/ 是放置写入/读取文件的好地方,但我不知道如何使用 NDK 获取包名称,而且这似乎并非在所有条件下都有效( Android NDK Write File)
其他解决方案是使用ANativeActivity 中的internalDataPath,但我不知道如何从库中获取有效的ANativeActivity 对象(GetFilesDir() from NDK?)
有没有什么安全的地方可以使用 C++ 在 Android 上放置临时文件?
如果我在这里写了一些愚蠢的东西,请原谅我,我是Android开发的新手。谢谢!
编辑:作为设计要求,我不允许使用 Java/JNI 调用。
【问题讨论】:
-
@benjymous 请看我的编辑
-
这肯定会让事情变得更加困难。您甚至不能将缓存文件夹路径传递到您的初始 NDK 启动代码中吗?
-
您的无 JNI 要求似乎很无知。没有 JNI 调用就没有 Android 应用程序功能,因为即使您自己不编写任何代码,平台提供的代码也充满了它们。但是,您可以使用诸如 unix 域套接字之类的选项,甚至可以从 java 打开文件并使用本机代码在 /proc/pid##/fd 中发现它。您有多种方法可以找到包名称,例如查看 /proc/pid##/maps 文件以找到您的 apk。
-
@ChrisStratton 我不是库设计者......类似的方法适用于除 Android 之外的 14 个不同平台。我认为谷歌只制作 Java API 的方法是无知的,不是我的:)
-
Google 的决定当然令人沮丧,但是您认为可以避免 JNI 的想法是多么无知,因为即使您在自己编写的代码中不故意使用任何代码,您的程序仍然充满了这种用法.如果您的雇主更满意,我已经为您提供了几种明显用法的替代方法,但作为技术问题,无论您是否“许可”使用它,JNI 都会被使用。
标签: android c++ android-ndk