Каково расположение базы данных по умолчанию для приложения Android для нерутированного устройства? Это то же самое, что и для рутированного?

У меня вполне конкретный вопрос.

Сначала позвольте мне объяснить, что я пытаюсь сделать, а затем проблему.

По сути, я пытаюсь сохранить существующий файл базы данных .db в папке assets, а затем после установки я хочу скопировать файл .db из активов в расположение базы данных по умолчанию в Android. Что-то похожее на ответ на эту страницу [ссылка] Как использовать существующая база данных с приложением для Android.

Проблема Для нерутированного устройства я не могу получить доступ к /data/data/<<package name folder>> . В этом случае где хранится файл базы данных. Другими словами, я хочу скопировать файл из активов в расположение приложения по умолчанию для базы данных, которое DB_PATH = "/data/data/" + context.getPackageName() + "/databases/" в случае корневого устройства. Будет ли то же самое для нерутированного устройства.


person user2129794    schedule 10.03.2013    source источник
comment
да, но вы не сможете ничего прочитать, если у вас нет root-прав   -  person DjHacktorReborn    schedule 10.03.2013


Ответы (3)


Да, в обоих случаях это будет один и тот же путь. /data/data/<application_package_name>/databases

Теперь на нерутированном устройстве вы не можете получить доступ к каталогу /data/ внутренней памяти устройства. Вот почему вы не можете видеть файл базы данных.

Если вы хотите получить файл, вы можете скопировать файл базы данных из внутреннего хранилища /data/data/<application_package_name>/databases во внешнее хранилище (sdcard), а затем с помощью ddms или adb pull получить файл базы данных.

Также просто попробуйте команду adb pull /data/data/<application_package_name>/databases/<database_file_name> из вашей системы, чтобы получить файл базы данных.

Но по умолчанию все базы данных приложений Android хранятся на внутреннем пути хранения /data/data/<application_package_name>/databases. И это применимо ко всем устройствам с рутом или без рута.

person user370305    schedule 10.03.2013
comment
Я согласен, что не могу увидеть каталог на устройстве без рута, но могу ли я выполнить операцию, предполагая, что каталог /data/data/<application_package_name>/databases существует. Я хочу скопировать файл из папки assets в папку баз данных. Могу ли я скопировать, предполагая один и тот же путь к каталогу для рутированного и нерутированного устройства. - person user2129794; 10.03.2013
comment
Да, вы не можете видеть файл, но вы можете получить доступ к файлу базы данных в своем приложении и выполнить с ним любую операцию. Поскольку файл уже физически присутствует там. - person user370305; 10.03.2013
comment
есть ли какое-либо приложение, которое может получить файл базы данных из этого места? - person Bugs Happen; 24.06.2016
comment
Этот ответ больше не является правильным. В течение многих лет я использовал этот каталог для копирования баз данных в приложение и из него, сегодня по какой-то причине базы данных хранились в /data/user/0/‹application_package_name›/databases Этот каталог можно получить с помощью context.getDatabasePath(String name ), как указано ниже cja. - person redocoder; 28.07.2017
comment
Стоит отметить, что в Android Studio можно использовать Device File Explorer для извлечения базы данных с устройства; однако он по-прежнему находится в /data/data/‹application_package_name›/databases. - person BluJ IT; 27.07.2019

Согласно документам Android на странице http://developer.android.com/reference/android/content/Context.html#getDatabasePath(java.lang.String) следует использовать context.getDatabasePath.

Работает на меня:

File dbFile = context.getDatabasePath(name_of_database_file);
person cja    schedule 20.02.2014

По умолчанию Android хранит свою базу данных SQLite по этой ссылке ниже, где вы можете получить доступ к файлу .db с помощью shell из командной строки, чтобы получить владельца доступ с использованием chmod для чтения или записи.

String DATABASE_PATH = "/data/data/" + PACKAGE_NAME + "/databases/" + DATABASE_NAME;

Where:
String DATABASE_NAME = "your_dbname";
String PACKAGE_NAME = "com.example.your_app_name";

Для получения более подробной информации вы можете проверить следующую ссылку. Нажмите здесь

person Crime_Master_GoGo    schedule 21.02.2017