Я новичок в android и JNI. Я хочу получить доступ к файлам на устройстве. Я добавил разрешения на манифест, но он не работает.Операции с файлами JNI
код Java:
public class MainActivity extends ActionBarActivity {
public native String setFilePath(String path);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = new TextView(this);
tv.setText("1111");
setContentView(tv);
String path = Environment.getExternalStorageDirectory().getPath()+"/xyz";
Log.i("java ", path);
setFilePath(path);
}
}
Код C:
jint Java_package_MainActivity_setFilePath(JNIEnv* env, jobject this,jstring Path){
path = (*env)->GetStringUTFChars(env, Path , NULL) ;
__android_log_print(ANDROID_LOG_DEBUG, "SO", "fopen(%s)", path);
FILE* file = fopen(path,"ab+");
(*env)->ReleaseStringUTFChars(env, Path , path);
fputs("Testing!\n", file);
fclose(file);
return 0;
}
ошибка появляется как:
Fatal signal 11 (SIGSEGV) at 0x0000000c (code=1), thread 16152
Я думаю, что это проблема, связанная с использованием памяти. Вы искали ее? –
fopen() принимает const char *, то есть строку с нулевым завершением в стиле C, а не в jstring. Используйте GetStringUTFChars(). –
@ АнирудШарма Я везде искал. Я где-то читал, что возможно, что одна из переменных равна нулю. Но я не могу подтвердить это, потому что эта ошибка возникает, даже когда я пытаюсь ее распечатать на консоли – pheno