Как получить доступ к папке данных / данных на устройстве Android?
Я занимаюсь разработкой приложения и знаю свою базу данных *.db
появится в data/data/com.****.***
Я могу получить доступ к этому файлу из AVD в Eclipse с помощью менеджера sqlite
Но я не могу получить доступ к этому файлу на моем телефоне Android.
Я гуглю его, и он говорит, что мне нужно рутировать мой телефон, чтобы сделать это, но я не хочу это делать. (Новый телефон, проблемы с гарантией и проблемы с безопасностью)
Итак, вот мой вопрос: как я могу получить доступ к моей data/data/.....
каталог в моем телефоне Android "без рута"?
Могу ли я изменить права пользователя для каталога data/data.....
без рута это?
19 ответов
Доступ к файлам непосредственно на вашем телефоне затруднен, но вы можете скопировать их на свой компьютер, где вы сможете делать с ним все, что захотите. Без рута у вас есть 2 варианта:
Если приложение отлаживаемо, вы можете использовать
run-as
команда в оболочке adbadb shell run-as com.your.packagename cp /data/data/com.your.packagename/
В качестве альтернативы вы можете использовать функцию резервного копирования Android.
adb backup -noapk com.your.packagename
Теперь вам будет предложено "разблокировать устройство и подтвердить операцию резервного копирования". Лучше НЕ предоставлять пароль, иначе становится сложнее читать данные. Просто нажмите "Резервное копирование моих данных". В результате файл "backup.ab" на вашем компьютере содержит все данные приложения в формате резервной копии Android. По сути это сжатый tar-файл. На этой странице объясняется, как вы можете использовать команду zlib OpenSSL, чтобы распаковать ее. Вы можете использовать
adb restore backup.db
Команда для восстановления резервной копии.
Если вы используете Android Studio 3.0 или более позднюю версию, выполните следующие действия.
- Нажмите " Вид" > " Инструменты Windows" > " Проводник".
- Разверните /data/data/[имя-пакета] узлы.
Вы можете разворачивать пакеты, которые работают в режиме отладки, только на некорневом устройстве.
Вы также можете попробовать получить базу данных с помощью приложения root explorer. И если это не работает, то вы можете попробовать это:
- Открыть cmd
- Измените каталог и перейдите в "Инструменты платформы"
- Тип '
adb shell
' su
- Нажмите "Разрешить" на устройстве
chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
- Откройте представление DDMS в Eclipse и оттуда откройте FileExplorer, чтобы получить нужный файл
После этого вы сможете просматривать файлы на рутированном устройстве.
Чтобы сделать что-либо из вышеперечисленного (например, получить доступ к защищенным папкам из самого телефона), вам все еще нужен root. (Это включает в себя изменение разрешений на монтирование папки /data и доступ к ней)
Без рута, доступ к /data
читать напрямую, кроме как из вашего приложения через код, невозможно. Таким образом, вы можете попробовать скопировать этот файл на SDCard или куда-нибудь доступный, и тогда вы сможете получить к нему обычный доступ.
Rooting не аннулирует вашу гарантию, если у вас есть устройство разработчика. Извините, другого пути нет, AFAIK.
- Откройте командную строку
- Перейдите в каталог E:\Android\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\platform-tools
- Введите ниже команды
adb -d shell
run-as com.your.packagename cat databases/database.db > /sdcard/database.db
- Изменить каталог на
cd /sdcard
Чтобы убедитьсяdatabase.db
есть. adb pull /sdcard/database.db
или просто вы можете скопировать database.db с устройства.
Самый простой способ (всего один простой шаг) извлечь файл из папки отлаживаемого приложения (скажем, /data/data/package.name/databases/file
) на некорневом устройстве Android 5.0+ с помощью этой команды:
adb exec-out run-as package.name cat databases/file > file
Используйте Проводник в затмении. Выберите Windows => Показать представление => Прочее... => Проводник.
Другой способ - извлечь файл через adb:
adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard
Для резервного копирования с Android на рабочий стол
Откройте командную строку cmd и запустите: adb backup -f C: \ Intel \ xxx.ab -noapk your.app.package. Не вводите пароль и нажмите Резервное копирование моих данных. Убедитесь, что вы не сохранили на диске C root. Вам может быть отказано. Вот почему я сохранил на C:\Intel.
Чтобы извлечь файл *.ab
- Зайдите сюда и загрузите: https://sourceforge.net/projects/adbextractor/
- Распакуйте загруженный файл и перейдите в папку, в которую вы распаковали.
- запустите его со своими собственными именами файлов: java -jar abe.jar распакуйте c:\Intel\xxx.ab c:\Intel\xxx.tar
У меня тоже была одна и та же проблема. Невозможно получить прямой доступ к файлу на устройствах Android, кроме оболочки adb или рутирующего устройства.
Кроме того, здесь есть 2 варианта:
1)
public void exportDatabse(String databaseName)
{
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
String backupDBPath = "backupname.db";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
} catch (Exception e) {
}
}
2) Попробуйте это: https://github.com/sanathp/DatabaseManager_For_Android
adb backup
у меня ничего не вышло, вот что я сделал (Xiaomi Redmi Note 4X, Android 6.0):
1. Перейдите в Настройки> Дополнительные настройки> Резервное копирование и сброс> Локальные резервные копии.
2. Нажмите "Резервное копирование" в нижней части экрана.
3. Снимите флажки "Система" и "Приложения".
4. Нажмите кнопку подробного раскрытия в правой части ячейки "Приложения", чтобы перейти к экрану выбора приложения.
5. Выберите нужное приложение и коснитесь OK.
6. После того, как резервное копирование было завершено, нужно как-то найти фактический файл. Мою можно найти в / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_.
7. Затем я выполнил шаги из этого ответа RonTLV, чтобы фактически преобразовать файл резервной копии (.bak в моем случае) в tar (дублируя исходный ответ):
"
а) Зайдите сюда и загрузите: https://sourceforge.net/projects/adbextractor/
б) Извлеките загруженный файл и перейдите в папку, куда вы извлекли.
c) запустите это с вашими собственными именами файлов: java -jar abe.jar распакуйте c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar
"
На рутованном устройстве правильное решение таково:
Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file
Исходное решение работало, но chmod возвращал неизвестный каталог. Изменение команды chmod на /data/data/* дало доступ ко всем подпапкам в каталоге данных из DDMS в Intellij. Я предполагаю, что то же решение верно для Eclipse DDMS.
ОБНОВЛЕНИЕ Итак, то, что я нашел, странно. Я использую Nexus 6, используя DDMS в IntelliJ (Android Device Monitor). Я построил небольшое приложение для начинающих. Указанное приложение сохраняет данные в файл.csv в data/data/com.example.myapp/files
Когда я впервые начал пытаться получить доступ к этому файлу на своем Nexus 6, я обнаружил, что должен рутировать устройство. Я мог видеть папку данных, но попытка открыть ее не сработала. Как упоминалось в Интернете в других местах, расширение + исчезнет, а затем вскоре появится снова (обратите внимание, что в Интернете есть решения, которые утверждают, что разрешают доступ к этим папкам без рутирования, я не нашел их слишком поздно, и я не уверен, что предпочитаю не получать root-права ((я бы предпочел сделать это вручную, чем полагаться на приложение или командную строку, чтобы дать мне свои решения))). Я рутировал свои 6 и снова попробовал DDMS.
В этот момент он показал мне папку с данными, и я смог развернуть папку и увидеть ком. каталоги, но я не смог открыть ни один из них. Именно тогда я обнаружил вышеуказанное решение. Начальные инструкции не будут работать на этой части:
chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*
Именно тогда я попробовал решение, которое я отправил:
chmod 777 /data /data/data /data/data/*
Казалось, что это решение работает, но только для определенных папок. Теперь я могу развернуть папку myapp, но не могу развернуть в ней папку files.
В этот момент я немного поигрался, а потом подумал, почему бы просто не попробовать его в каталоге, который мне нужен, вместо того, чтобы пробовать эти подстановочные записи.
chmod 777 /data /data/data /data/data/com.example.myapp/*
С последующим:
chmod 777 /data /data/data /data/data/com.example.myapp/files
Эти команды позволили мне развернуть и просмотреть файлы в каталоге моего приложения, чтобы убедиться, что файл.csv был сохранен правильно.
Надеюсь, это кому-нибудь поможет. Я боролся с этим часами!
(немного сложнее, как ни странно, разрешения не передавались в файл.csv, который передавался в каталог файлов. Мои права доступа к каталогу файлов для чтения drwxrwxrwx и мои права доступа для файла log.csv для чтения -rw-rw---- .. просто к вашему сведению)
Возможно, для доступа к этой папке вам необходимы права администратора.
так что у вас есть два варианта: -
- root ваше устройство, а затем попробуйте получить доступ к этой папке
- использовать эмулятор
PS: если вы используете любой из двух вышеуказанных вариантов, вы можете получить доступ к этой папке, выполнив следующие действия
откройте перспективу DDMS -> ваше устройство ->(выберите File Explorer из правого окна), выберите пакет -> данные -> данные -> имя пакета -> файлы
и оттуда вы можете поднять свой файл
Вы можете скачать файл Sigle следующим образом:
adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4
Перед загрузкой вы, возможно, не захотите взглянуть на структуру файлов в вашем App-Directory. Для этого сделайте следующие шаги, которые THelper заметит выше:
adb shell
run-as com.your.packagename
cd files
ls -als .
Android-Studio, как упоминает Шахидул ( /questions/39522286/kak-poluchit-dostup-k-papke-dannyih-dannyih-na-ustrojstve-android/39522301#39522301), также работает. Для тех, кто не видит DeviceFile Explorer
Вариант в меню: Обязательно откройте / android-каталог в Android Studio. Например, у активных пользователей это находится в папке Project прямо на том же уровне, что и /ios-Directory.
Простой ответ НЕТ. В грядущей версии Android 13 вы не сможете получить доступ к чему-либо в каталоге /storage/emulated/0/Android/* без рутирования вашего устройства или подключения к ПК, особенно на устройствах Pixel.
Прочитайте страницу Android Source для такого доступа к данным приложения с помощью ADB здесь:https://developer.android.com/training/data-storage/manage-all-files
Одним из простых способов является создание базы данных на SD-карте. Потому что вы не можете получить доступ к папке данных вашего телефона во внутренней памяти, если вы не рутируете свой телефон. Так почему бы просто не создать свою базу данных на SD-карте.
Более того, если вы хотите, вы можете написать некоторый код для копирования файлов, чтобы скопировать существующий файл базы данных (из внутренней памяти) во внешнюю память, не требуя какого-либо рута.
Вы также можете попробовать скопировать файл в папку SD Card, которая является общей папкой, затем вы можете скопировать файл на свой ПК, где вы можете использовать sqlite для доступа к нему.
Вот некоторый код, который вы можете использовать для копирования файла из данных / данных в папку общего хранилища:
private void copyFile(final Context context) {
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath =
context.getDatabasePath(DATABASE_NAME).getAbsolutePath();
String backupDBPath = "data.db";
File currentDB = new File(currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
Manifest:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
Вы можете скопировать этот файл базы данных куда-нибудь в обозревателе eclipse (например, SDCard или ПК), и вы можете использовать sqlite для доступа и обновления этого файла базы данных.
База данных SQLlite хранится на телефоне пользователя и скрывается по пути:
/Data/Data/com.companyname.AppName/File/
у вас есть 2 варианта:
- вы можете рутировать свой телефон, чтобы получить доступ для просмотра скрытого файла db3
- это не решение, а обходной путь. Почему бы просто не создать тестовую страницу, которая отображала бы вашу таблицу базы данных в ней, используя статус "select".
Вопрос: как получить доступ к данным-данным-папке-в-андроид-устройстве?
Если android-устройство Bluestacks * Root Browser APK показывает данные / данные /..
Попробуйте загрузить Root Browser с https://apkpure.com/root-browser/com.jrummy.root.browserfree
Если файл представляет собой текстовый файл, вам необходимо нажать "Открыть как", "Текстовый файл", "Открыть как", "Текстовый редактор РБ".