【问题标题】:Get path to put temporary files on Android using C++ [duplicate]使用 C++ 获取在 Android 上放置临时文件的路径 [重复]
【发布时间】: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


【解决方案1】:

我已经能够使用 /data/local/tmp/ 做这些事情,但我不确定它是否适用于所有情况。

【讨论】:

  • 不鼓励这样的路径,因为可用的路径因版本而异。
猜你喜欢
  • 2018-01-21
  • 2013-08-27
  • 2019-12-24
  • 2012-08-19
  • 2013-10-08
  • 1970-01-01
  • 2013-07-26
  • 2012-12-23
  • 1970-01-01
相关资源
最近更新 更多