Как открыть файл другого приложения, скопированный во внутреннюю память моего приложения, с правами root - PullRequest
0 голосов
/ 07 октября 2019

Я новичок в программировании на 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.

Заранее спасибо!

...