Ответ 1
-
Вы всегда можете получить доступ к каталогу в котором размещено ваше приложение.
Этот каталог обычно:
data/data/<Your_package_name_usually com.android.appName>/files/<your_filename>
но лучше использовать
getFilesDir()
для обеспечить действительный путь к файлу с будущим версии андроида. -
Если вы хотите использовать внешнее хранилище вместо этого убедитесь, что вы поместите это строка кода в манифесте приложения получить разрешение.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Затем используйте каталог sdcard:
getExternalStorageDirectory(); //usually : /sdcard/<your_filename>
-
В противном случае вы можете подключить устройство и получить доступ ко всему файловая система. Но вам придется попросите всех пользователей вашего приложения получить доступа root на своем устройстве до используя ваше приложение. Некоторые игры используйте этот способ делать что-то, но я не рекомендовал бы это. Если вы все еще хочу сделать это, искать
Superuser
приложение для Android, оно бесплатно и надёжная.
Как только у вас есть каталог Android, просто создайте собственный метод JNI, который получит параметр jstring, и вы установите его внутри своего собственного кода. Преобразуйте его в 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);
}
Изменить:
Возможно, вам понадобится вручную создать/файлы на C, прежде чем использовать его в первый раз:
int result_code = mkdir("/data/data/com.app/files/", 0770)
Приветствия!