Siempre puede acceder al directorio en el que se coloca su aplicación.
Este directorio es por lo general:
data/data/<Your_package_name_usually com.android.appName>/files/<your_filename>
pero mejor uso getFilesDir()
a garantizar ruta de archivo válida con los futuros cambios de versión de androide.
Si quieres usar almacenamiento externo lugar, asegúrese de colocar esta línea de código en su aplicación manifiesta a permiso ganancia.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
A continuación, utilice el directorio sdcard:
getExternalStorageDirectory(); //usually : /sdcard/<your_filename>
De lo contrario, puede arrancar de raíz el dispositivo y tener acceso a todo el sistema de archivos . Pero tendrá que solicitar a todos los usuarios de su aplicación obtener acceso raíz en su dispositivo antes de usando su aplicación. Algunos juegos usan esta forma de hacer las cosas, pero yo no lo recomendaría. Si todavía está quiere hacer esto, busque Superuser
aplicación para Android, es gratis y confiable.
Una vez que tenga el directorio androide, basta con crear un método nativo JNI que reciben un parámetro jstring, y configurarlo 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 tenga manualy crea los/archivos en C antes de poder usarlo en el primer tiempo:
int result_code = mkdir("/data/data/com.app/files/", 0770)
Saludos !
Respondido en este enlace: –
vgokul129