Archivo de escritura Android NDK

¿Hay alguna otra manera de escribir un archivo en otro lugar que no sea en la tarjeta SD?

Intenté muchas rutas diferentes en el sistema de archivos, pero fopen siempre devuelve NULL, excepto cualquier archivo que escriba / lea dentro de / sdcard / …

¿Hay algo más equivalente a:

¿Eso te permite escribir como en el sistema de archivos o algo así?

  1. Siempre puede acceder al directorio en el que se coloca su aplicación.

    Este directorio generalmente es:

    data/data//files/

    pero mejor use getFilesDir() para asegurar una ruta de archivo válida con futuros cambios de versión de android.

  2. Si quieres usar almacenamiento externo, asegúrate de colocar esta línea de código en el manifiesto de tu aplicación para obtener permiso.

      

    Luego usa el directorio sdcard:

    getExternalStorageDirectory(); //usually : /sdcard/

  3. De lo contrario, puede rootear el dispositivo y obtener acceso a todo el sistema de archivos. Pero tendrá que solicitar a todos los usuarios de su aplicación que obtengan acceso de administrador en su dispositivo antes de usar su aplicación. Algunos juegos usan esta forma de hacer las cosas, pero yo no lo recomendaría. Si aún quieres hacer esto, busca la aplicación Superuser para Android, es gratis y confiable.

Una vez que tenga el directorio de Android, simplemente cree un método nativo JNI que reciba un parámetro jstring y lo configure dentro de su código nativo. Conviértalo en std :: string, y estará listo para usarlo con 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); } 

Editar:

Es posible que necesite crear manualmente los / archivos en C antes de poder usarlos por primera vez:

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

¡Salud!

Tiene acceso a dos ubicaciones desde su aplicación, la tarjeta SD y un directorio de datos especial para su aplicación. Cualquier otro lugar está fuera de los límites a menos que tenga acceso de root.

Uno debe crear el archivo antes de usar la función fopen(filePath, "a+") . O use fopen(filePath, "a")