#android #sqlite
#Android #sqlite
Вопрос:
РЕДАКТИРОВАТЬ: предположим, что для этого сообщения используется корневой телефон.
Я удалил предыдущий вопрос, который я опубликовал в этой теме, потому что ни один из ответов даже не приблизился к ответу на вопрос. Короче говоря, мне нужно открыть базу данных и изменить существующую запись. Я не хочу использовать «вспомогательный класс», потому что я на самом деле хочу видеть и понимать, что происходит в нескольких строках кода, а не в ненужном (для моих целей) классе, который содержит 100 строк кода. Поэтому, пожалуйста, не говорите мне «использовать учебник по блокноту». У меня есть, и это не объясняет, что мне нужно.
Чтобы упростить, вот что я делаю:
SQLiteDatabase myDB = this.openOrCreateDatabase("/data/data/MY_APP/databases/settings.db", MODE_PRIVATE, null);
myDB.execSQL("INSERT INTO my_table (SOME_FIELD) VALUES ('SOME_VALUE');");
Это работает очень хорошо. Однако это не удается, если я пытаюсь открыть / отредактировать базу данных по другому пути. Например, я мог бы захотеть отредактировать базу данных, которую использует другое приложение. Как я могу это сделать? Это простой вопрос разрешений? Должно ли это работать, если мое приложение запрашивает и получает root-доступ?
РЕДАКТИРОВАТЬ: есть множество приложений, которые я могу установить на свой телефон, которые способны редактировать каждую отдельную базу данных в системе, поэтому очевидно, что это МОЖНО сделать.
Комментарии:
1. «редактирование каждой отдельной базы данных в системе» — что это за волшебные приложения, о которых вы говорите?
2. @Merlin Вы действительно никогда не видели приложение для редактирования БД? На рынке появился «Редактор SQLite». Это позволяет открывать, просматривать, редактировать ЛЮБУЮ базу данных на вашем телефоне. Я сомневаюсь, что это волшебство.
3. Если он не внедрен, вы ничего не увидите в
/data/data/some_other_app
4. Хорошо, предположим, что он внедрен… Что теперь? Я все еще не могу заставить его работать с кодом, который я опубликовал.
5. Ошибка просто «не удается открыть файл базы данных». Возможно, я неправильно запрашиваю SU. Я сообщу об этом, когда протестирую это…
Ответ №1:
Что касается безопасности Android, вы не можете напрямую обращаться к базе данных приложений других пользователей. Если другие приложения создают ContentProvider, вы можете получить доступ к их базам данных (если они существуют) через его поставщиков. В противном случае выхода из AFAIK нет.
Комментарии:
1. Очевидно, что это неверно, иначе такие приложения, как «Редактор SQLite», не существовали бы на рынке. Очевидно, что это возможно.
2. xjaphx.эта вещь, о которой вы говорите, внутренняя БД, но если БД находится на SDcard, я думаю, что смогу получить доступ к другому приложению.
Ответ №2:
Я не знаю, ищете ли вы еще этот ответ. Я хотел сделать то же самое, но ничего не смог найти. Я знал, что мне нужно использовать root для процесса, но опять же, ничего не смог найти. Я начал возиться и просто пробовал много случайных вещей и, наконец, нашел способ сделать это.
Короткая версия, которая сработала для меня, заключается в том, что вам нужно, как root, изменить разрешения базы данных, получить к ней прямой доступ (не через помощника sqlite), делать все, что пожелаете, а затем вернуть разрешения обратно. Я подробно описываю все это в своем блоге: