Я новичок в программировании на Android и заметил, что когда мое приложение пытается открыть файл, принадлежащий другому приложению, возникает ошибка «Отказано в доступе». я знаю, что у каждого приложения есть собственная внутренняя память, недоступная для других, однако проблема сохраняется даже после того, как я скопировал / переместил файл в каталог данных моего приложения. (после получения прав доступа root)
Я уже пытался вызвать chmod 777 как для файла, так и для каталога без результата. Кроме того, я попытался изменить владельца / группу скопированного файла на UID моего приложения, но в разрешении на его открытие по-прежнему отказано.
Вот пример попытки доступа к базе данных другого скопированного приложенияв каталог кэша моего приложения.
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
String cp_db_command = "cp " + main.getPackageManager().getPackageInfo(PACKAGE_NAME, 0).applicationInfo.dataDir + "/databases/db_name " + main.getCacheDir();
//main is my Context
os.writeBytes(cp_db_command + " \n");
os.writeBytes("chown " + main.getApplicationInfo().uid + " " + main.getCacheDir()+ "/db_name" +" \n");
os.writeBytes("exit\n");
os.flush();
p.waitFor();
String url = main.getCacheDir()+ "/db_name";
SQLiteDatabase mDataBase = null;
mDataBase = SQLiteDatabase.openOrCreateDatabase(url, null);
Приведенный выше код создает исключение со следующим сообщением android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): не удалось открыть базу данных. Проблема не ограничивается базами данных, но также возникает с другими файлами, открытыми, например, с помощью. FileInputStream. Однако я могу открыть файлы, изначально созданные моим приложением. Я хотел бы знать, как Android распознает, что файл изначально не принадлежит моему приложению даже после изменения прав владельца, группы или r, w, x.
Заранее спасибо!