使用 Android NDK 将文件写入 SD 卡以外的位置?

2024-05-14

除了SD卡之外,还有其他方法可以将文件写入其他位置吗?

我在文件系统上尝试了许多不同的路径,但 fopen 总是返回 NULL,除了我在 /sdcard/... 内写入/读取的任何文件。

还有其他相当于:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

这允许你像在文件系统上写东西一样?


  1. 您可以随时访问该目录 您的应用程序所在的位置。

    该目录通常是:

    data/data/<Your_package_name_usually com.android.appName>/files/<your_filename>

    但更好地利用getFilesDir()到 确保未来的文件路径有效 安卓版本变化。

  2. 如果您想使用外部存储 相反,请确保您将其放置在 应用程序清单中的代码行 获得许可。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    然后使用 sdcard 目录:

    getExternalStorageDirectory(); //usually : /sdcard/<your_filename>

  3. 否则,您可以root设备 并获得对整个 文件系统。但你必须 请求您的所有应用用户获取 之前在其设备上获得 root 访问权限 使用您的应用程序。一些游戏 使用这种做事方式,但我 不会推荐它。如果你还 想做这个,查找Superuser适用于 Android 的应用程序,它是免费的 值得信赖。

拥有 android 目录后,只需创建一个接收 jstring 参数的 JNI 本机方法,然后在本机代码中进行设置。将其转换为 std::string,然后您就可以将其与 fopen() 一起使用。

//Inside your java activity
File f = this.getApplicationContext().getFilesDir(); 
LibLoader.setupArchiveDir(f.toString());

//Inside your JNI wrapper
JNIEXPORT bool JNICALL Java_com_android_appName_LibLoader_setupArchiveDir(JNIEnv * env, jobject obj, jstring dir)
{
        const char* temp = env->GetStringUTFChars(dir, NULL);
    std::string stringDir(temp);

        // Will be receive as a std::string inside C++ code 
    MyNativeObjectInC++->SetupArchiveDir(stringDir);
}

Edit :

您可能需要在 C 中手动创建 /files,然后才能第一次使用它:

int result_code = mkdir("/data/data/com.app/files/", 0770)

Cheers !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Android NDK 将文件写入 SD 卡以外的位置? 的相关文章

随机推荐