【问题标题】:GetFilesDir() from NDK?来自 NDK 的 GetFilesDir()?
【发布时间】:2011-09-10 17:46:06
【问题描述】:

有没有办法直接从 NDK 获取应用程序的目录以将私有数据保存到我的应用程序的文件中?换句话说,我需要一个等效的 Java 函数 mContext.getFilesDir()。

我注意到其他帖子,例如这个: Android NDK Write File

提及该目录的“通常”位置是什么。但要使其在所有版本和所有设备中都正确,肯定需要等效的系统调用。

我目前使用的是 NativeActivity,根本没有使用 Java。

感谢您的宝贵时间。

【问题讨论】:

    标签: android android-ndk


    【解决方案1】:

    我有用于访问各种路径的自定义帮助程序类,对于数据目录我这样做:

    1. 阅读/proc/self/cmdline/proc/**MyPID**/cmdline
    2. 将#1 的结果追加到/data/data/

    示例结果:

    /data/data/com.yourcompany.yourproduct/
    

    【讨论】:

    • 对于那些想知道如何获得MyPID 的人,您可以简单地将其替换为“self”,即阅读/proc/self/cmdline,这样可以省去一些额外的麻烦。
    • @MultiColourPixel 好点,我已经更新了答案以显示两者。
    【解决方案2】:

    如果您使用的是NativeActivity,那么您可以从本机代码访问具有internalDataPathexternalDataPath 成员的ANativeActivity 实例(请参阅<ndk_root>/platforms/android-9/arch-arm/usr/include/android/native_activity.h)。

    【讨论】:

    • 谢谢,这正是我想要的。不幸的是,internalDataPath 和 externalDataPath 在运行时都是 NULL..?有任何想法吗?这是在 google nexus S 设备上运行时。
    • 根据这个链接确定:groups.google.com/group/android-ndk/browse_thread/thread/… 这是 android 2.3.x 的一个已知错误,它已在 3.0 中修复。伟大的!所以我需要考虑为此实现 jni...
    • 我走上了同样的路,在查看了已安装设备操作系统版本的分布后,我意识到我根本无法忽视 v2.1。所以 NativeActivity 成为一个非问题。事实证明,实现一个完整的 JNI shim 非常简单,并且具有额外的优势,即每当您发现 NativeActivity 遗漏的内容时,您已经准备好添加它。
    猜你喜欢
    • 2017-10-03
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多