Як отримати доступ до папки даних / даних на пристрої Android?


316

Я розробляю додаток, і я знаю, що моя база даних *.dbз’явиться вdata/data/com.****.***

Я можу отримати доступ до цього файлу з AVD в Eclipse за допомогою менеджера sqlite

Але я не можу отримати доступ до цього файлу в телефоні Android.
Я google це, і він говорить, що я повинен виконувати свій телефон, щоб зробити це, але я не хочу цього робити. (Новий телефон, питання гарантії та проблеми безпеки)

Тож ось моє питання: Як я можу отримати доступ до свого data/data/.....каталогу в телефоні Android « без вкорінення його »?

Чи можу я змінити дозволи користувача для каталогу, data/data.....не вкорінюючи його?


1
у вас є файл database.db .. ???
Аміт Праджапаті

я використовую базу даних - "openOrCreateDatabase (....)"
Naveen Prince P

5
Ви, безумовно, потрібно буде в першу чергу викорінити телефон. Тоді вам знадобиться грамотний додаток-менеджер файлів, який ви можете використовувати. Файловий менеджер ASTRO користується популярністю, але він не підтримує кореневий доступ, тому він не потрібен користувачам живлення. Ви повинні мати можливість використовувати ES File Explorer або File Expert. Нещодавно у ES File Explorer були проблеми з переглядом / даними / даними або іншими захищеними папками, і я майже відмовився від цього, і зараз я використовую File Expert. Вони обидва вимагають ввійти в налаштування та включити опцію root Explorer (а іноді також змонтувати файлову систему в якості запису). Тож вам потрібно це зробити спочатку.
Самір

Це не програмне питання, ані відповіді.
SkyWalker

Відповіді:


375

Доступ до файлів безпосередньо на телефоні є важким, але ви можете скопіювати їх на свій комп’ютер, де з ним можна робити все, що завгодно. Без вкорінення у вас є 2 варіанти:

  1. Якщо додаток є налагоджувальним, ви можете використовувати run-asкоманду в оболонці adb

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
  2. Можна також скористатися функцією резервного копіювання Android.

    adb backup -noapk com.your.packagename

    Тепер вам буде запропоновано "розблокувати пристрій і підтвердити операцію резервного копіювання". Краще НЕ вводити пароль, інакше читати дані стає складніше. Просто натисніть на "резервна копія моїх даних". Отриманий файл 'backup.ab' на вашому комп'ютері містить усі дані програми у форматі резервного копіювання Android. В основному це стислий файл tar. На цій сторінці пояснюється, як ви можете використовувати команду zlib OpenSSL для її розпакування. За допомогою adb restore backup.dbкоманди можна відновити резервну копію.


15
adb backup -f \location\on\local\drive -noapk app.package.nameпрацював на мене без кореня
theblang

24
Скористайтеся цією командою, щоб розпакувати файл резервного копіювання:dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman

11
У варіанті 1, як сказати команді cp, щоб зберегти їх на своєму ноутбуці (Mac)? Якщо ви наводите приклад Win, я також хотів би знати, і я просто перекладу його. Дякую.
Джерард

10
Важливо: Запуск adb backup -noapk com.your.packagenameзбереже файл ab у поточному каталозі , тому переконайтеся, що ви перейшли в потрібний каталог (наприклад cd Desktop..)
Menelaos Kotsollaris

6
Зауважте, що підхід резервного копіювання видасть порожню резервну копію, якщо ваша програма відключила резервні копії через android:allowBackup="false"маніфест.
Том

130

Якщо ви використовуєте Android Studio 3.0 або новішу версію, виконайте ці дії.

  1. Клацніть Перегляд > Інструмент Windows > Провідник файлів пристроїв .
  2. Розгорніть / дані / дані / [назва пакета] .

Ви можете розширювати пакети, які працюють у режимі налагодження на не вкоріненому пристрої.

Кроки виконуються в Android Studio 3.0


1
Я не можу побачити будь-яку річ на цьому доці. і скажи мені нічого не показуй. ти знаєш, у чому проблема?
Махді Азадбар

1
Це працює лише в режимі налагодження, а не для
версій версій

Дякуємо, що показали не піта-спосіб заглянути у файлову систему!
Lensflare

У мене, здається, немає варіанту у версії 3.0.1, він перемістився?
Кодування

1
Це круто. Бажаю, я це знав деякий час тому.
checkmate711

59

Ви також можете спробувати отримати db за допомогою програми root Explorer. І якщо це не допоможе, ви можете спробувати це:

  1. Відкрити cmd
  2. Змініть свій каталог і перейдіть у "Інструменти платформи"
  3. Тип ' adb shell'
  4. su
  5. Натисніть "Дозволити" на пристрої
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. Відкрийте подання DDMS у програмі Eclipse і звідти відкрийте «FileExplorer», щоб отримати потрібний файл

Після цього ви маєте змогу переглядати файли на укоріненому пристрої.


2
Я думаю, що програма root root працює лише для вкорінених телефонів. Я спробую другий метод
Naveen Prince P

5
Неможливо chmod / data: Операція не дозволена
bofredo

@bofredo Я думаю, що це тому, що телефон не вкорінений. ви маєте викорінити свій телефон, а потім спробуйте це
Шераз Ахмад Хілджі

1
@mahemadhi так, вам, ймовірно, доведеться запускати цю команду вручну для кожного каталогу, оскільки всі каталоги мають приватні дозволи.
Шераз Ахмад Хілджі

1
@VivekChavda yup їм потрібен укорінений телефон
Sheraz Ahmad Khilji

21

Щоб виконати будь-яке з перерахованого вище (тобто отримати доступ до захищених папок із самого телефону), вам все одно потрібний root. (Це включає зміну дозволів на встановлення в папці / data та доступ до неї)

Без кореня доступ до /dataпрямого читання, за винятком всередині програми, за допомогою коду неможливий. Таким чином, ви можете спробувати скопіювати цей файл на sdcard або десь доступний, і тоді ви повинні мати доступ до нього нормально.

Укорінення не втратить гарантії, якщо у вас є пристрій розробника. Вибачте, іншого способу AFAIK немає.


я не використовую пристрій розробників. My is Xperia U
Naveen Prince P

Чи можу я редагувати дозвіл користувача на папку даних за допомогою команд chmode?
Naveen Prince P

Весь розділ змонтований як лише для читання. Я б сказав, що ваша найкраща ставка буде такою, adb pullпро яку йдеться у відповіді нижче.
Аніруд Рамананат

Я можливий, якщо програма дозволяє. У всіх каталогах є x дозвіл на всіх (але немає r для всіх, тому ви повинні знати шлях). Тоді це залежить від того, зробила програма доступною для світу файл чи ні. Деякі файли є, більшість - ні.
Ян Худек

Спочатку ви кажете, що читати неможливо, потім пропонуєте скопіювати файл в іншому місці. Але, як скопіювати файл, не читаючи його в першу чергу? Я вважаю, що ця відповідь є помилковою.
до

13

Найпростіший спосіб (лише один простий крок) витягнути файл із папки додатків, що налагоджується (скажімо /data/data/package.name/databases/file), на не вкоріненому пристрої Android 5.0+ за допомогою цієї команди:

adb exec-out run-as package.name cat databases/file > file

12
  1. Відкрийте командний рядок
  2. Змінити каталог на E: \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools
  3. Введіть команди нижче
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. Змініть каталог, щоб cd /sdcardпереконатися database.dbв наявності.
  7. adb pull /sdcard/database.db або просто ви можете скопіювати database.db з пристрою.

Мені ідеально підходить. Дякую! Але в моєму випадку ім'я файлу бази даних не має розширення .db.
технік

10

Використовуйте Провідник файлів у затемненні. Виберіть Windows => Показати перегляд => Інше ... => Провідник файлів.

Ще один спосіб - це витягнути файл через adb:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard

5

У мене теж колись була така ж проблема. Немає ніякого доступу до файлу безпосередньо на пристроях Android, крім оболонки adb або пристрою для вкорінення.

Тут також є 02 альтернативи:

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


5

Для резервного копіювання з Android на робочий стіл

Відкрийте командний рядок cmd та запустіть це: adb backup -f C: \ Intel \ xxx.ab -noapk your.app.package . Не вводьте пароль і натисніть Резервне копіювання моїх даних. Переконайтеся, що не економити на корені диска C. Вам можуть відмовити. Ось чому я заощадив на C: \ Intel.

Для вилучення файлу * .ab

  1. Перейдіть сюди та скачайте: https://sourceforge.net/projects/adbextractor/
  2. Витягніть завантажений файл і перейдіть до папки, де ви вилучили.
  3. запустіть це за допомогою власних імен файлів: java -jar abe.jar розпакуйте c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar

1
Це чудова відповідь, дякую. Мені працювали над вилученням резервної копії одного додатка, створеної на пристрої Xiaomi (з розширенням .bak). Укорінення не потрібно
росіянин

4

На кореневому пристрої правильним рішенням є таке:

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, я виявив, що я повинен викорінювати пристрій. Я міг бачити папку даних, але намагатися відкрити це не вийшло. Як згадується в Інтернеті в інших місцях, розширення + зникне, а потім з’явиться незабаром після цього (зауважте, в Інтернеті є рішення, які стверджують, що дозволяють отримати доступ до цих папок без вкорінення, я не знайшов їх до пізнього часу, і я не впевнений, чи бажаю я все-таки не викорінювати корінь ((я скоріше зможу це зробити вручну, ніж покладатися на додаток чи командний рядок, щоб дати мені свої рішення))). Я вкоренив свої 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, але не зміг розгорнути каталог файлів у ній.

У цей момент я пограв деякий час, а потім зрозумів, чому б не просто спробувати його в потрібному мені каталозі, а не пробувати ці підстановки.

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 --- - .. просто фій)


2

Ви можете завантажити такий сигл-файл:

adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

Перед завантаженням ви, можливо, не зможете ознайомитися зі структурою файлів у вашому додатку-каталогу. Для цього виконайте наступні кроки, THelperпомічені вище:

adb shell
run-as com.your.packagename 
cd files
ls -als .

Android-Studio спосіб Shahidulзгадується ( https://stackoverflow.com/a/44089388/1256697 ) і роботу. Для тих, хто не бачить DeviceFile Explorerопцію в меню: обов’язково відкрийте / android-Directory в Android Studio. Наприклад, у власних користувачів, які реагують, це має всередині своєї папки проектів прямо на тому ж рівні, що і каталог / ios-Directory.


1

Один з простих способів - створити свою базу даних на SD-картці. Тому що ви не можете отримати доступ до папки даних свого телефону у внутрішній пам'яті, якщо ви не користуєтесь кодом. То чому б просто не створити свою базу даних на SD-Card.

Більше того, якщо ви хочете, ви можете написати якийсь код копіювання файлу, щоб скопіювати існуючий файл бази даних (з внутрішньої пам'яті) у зовнішню пам'ять, не вимагаючи жодного кореня.


як це зробити? як я можу створити db у sdcard
Naveen Prince P

Цей метод допоможе вам створити базу даних на sd-картці. Просто вкажіть шлях Fileна SD-карту, і вам добре йти
waqaslam

1

можливо, для доступу до цієї папки потрібні адміністративні права.

тож у вас є два варіанти: -

  1. викорінюйте свій пристрій і намагайтеся отримати доступ до цієї папки
  2. використовувати емулятор

ps: якщо ви використовуєте будь-який із наведених вище варіантів, ви можете отримати доступ до цієї папки, виконавши ці кроки

відкрити перспективу DDMS -> свій пристрій -> (Виберіть Провідник файлів у вікні правого вікна) виберіть пакет -> дані -> дані -> назва пакета -> файли

і звідти ви можете витягнути свій файл


1

adb backupне працювало для мене, тому ось що я зробив (Xiaomi Redmi Note 4X, Android 6.0):
1. Перейдіть у Налаштування> Додаткові налаштування> Резервне копіювання та скидання> Локальні резервні копії .
2. Торкніться "Резервне копіювання" в нижній частині екрана.
3. Зніміть прапорець "Система" та "Програми".
4. Натисніть кнопку розкриття деталей праворуч від клітинки "Програми", щоб перейти до екрана вибору додатків.
5. Виберіть потрібну програму та натисніть OK.
6. Після завершення резервного копіювання фактичний файл потрібно якось розташовувати. Шахту можна знайти за адресою / MIUI / резервне копіювання / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ .
7. Потім я дотримувався кроків з цієї відповіді від RonTLVфактично перетворити файл резервного копіювання (.bak в моєму випадку) у tar (дублюючи оригінальну відповідь):
"
a) Перейдіть сюди та скачайте: https://sourceforge.net/projects/adbextractor/
b) Витягніть завантажений файл і перейдіть до папки, де ви вилучили.
c) запустіть це своїми іменами файлів: java -jar abe.jar розпакуйте c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar
"


0

Ви можете скопіювати цей db-файл кудись із програми eclipse explorer (наприклад: sdcard або PC), і ви можете використовувати sqlite для доступу та оновлення цього файлу db.


0

Питання: як отримати доступ до даних-даних-папки-в-android-пристрої?


Якщо Android-пристрій Bluestacks * Root Browser APK показує дані / дані / ..


Спробуйте завантажити Root Browser з https://apkpure.com/root-browser/com.jrummy.root.browserfree


Якщо файл є текстовим файлом, вам потрібно натиснути "Відкрити як", "Текстовий файл", "Відкрити як", "Текстовий редактор RB"


0

Ви також можете спробувати скопіювати файл у папку 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();
    }
}

Маніфест:

<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" />

Усі дії для копіювання файлів недоступні, якщо файл не надає дозвіл на читання іншим
Стів Лук

0

База даних SQLlite зберігається на телефоні користувача, і вона ховається під шляхом:

/Data/Data/com.companyname.AppName/File/

у вас є 2 варіанти тут:

  1. ви можете викорінити свій телефон, щоб отримати доступ до перегляду свого прихованого файлу db3
  2. це не рішення, а обробка. Чому б просто не створити тестову сторінку, яка відображає в ній таблицю вашої бази даних за допомогою вибору "select".
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.