Jak uzyskać dostęp do danych / folderu danych na urządzeniu z Androidem?


316

Tworzę aplikację i wiem, że moja baza danych *.dbpojawi się wdata/data/com.****.***

Mogę uzyskać dostęp do tego pliku z AVD w Eclipse przy pomocy menedżera sqlite

Ale nie mogę uzyskać dostępu do tego pliku na telefonie z Androidem.
Używam google i mówi, że muszę to zrootować, ale nie chcę tego robić. (Nowe problemy z telefonem, gwarancją i bezpieczeństwem)

Oto moje pytanie: jak mogę uzyskać dostęp do mojego data/data/.....katalogu na telefonie z Androidem „ bez rootowania ”?

Czy mogę zmienić uprawnienia użytkownika do katalogu data/data.....bez rootowania go?


1
czy masz plik database.db .. ???
Amit Prajapati

używam bazy danych - „openOrCreateDatabase (....)”
Naveen Prince P

5
Na pewno będziesz musiał najpierw zrootować telefon. Następnie potrzebujesz kompetentnej aplikacji do zarządzania plikami, której możesz użyć. Menedżer plików ASTRO jest popularny, ale nie obsługuje dostępu do katalogu głównego, więc jest bezużyteczny dla zaawansowanych użytkowników. Powinieneś być w stanie korzystać z ES File Explorer lub File Expert. Niedawno miałem problemy z przeglądaniem / danymi / danymi lub innymi chronionymi folderami w ES File Explorer i prawie go porzuciłem, a teraz używam File Expert. Oba wymagają przejścia do ustawień i włączenia opcji eksploratora roota (a czasem także zamontowania systemu plików jako zapisywalnego). Musisz to zrobić najpierw.
Samir

To nie jest pytanie związane z programowaniem ani odpowiedzi.
SkyWalker,

Odpowiedzi:


375

Dostęp do plików bezpośrednio w telefonie jest trudny, ale możesz być w stanie skopiować je na komputer, gdzie możesz zrobić z nim wszystko, co chcesz. Bez rootowania masz 2 opcje:

  1. Jeśli aplikacja jest debuggowana, możesz użyć run-aspolecenia w powłoce adb

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
  2. Alternatywnie możesz użyć funkcji kopii zapasowej Androida.

    adb backup -noapk com.your.packagename

    Zostaniesz teraz poproszony o „odblokowanie urządzenia i potwierdzenie operacji tworzenia kopii zapasowej”. Najlepiej NIE podawać hasła, w przeciwnym razie odczyt danych będzie trudniejszy. Wystarczy kliknąć „zrób kopię zapasową moich danych”. Wynikowy plik „backup.ab” na komputerze zawiera wszystkie dane aplikacji w formacie kopii zapasowej Androida. Zasadniczo jest to skompresowany plik tar. Ta strona wyjaśnia, w jaki sposób można użyć polecenia zlib OpenSSL do jego rozpakowania. Możesz użyć adb restore backup.dbpolecenia, aby przywrócić kopię zapasową.


15
adb backup -f \location\on\local\drive -noapk app.package.namepracował dla mnie bez roota
theblang

24
Użyj tego polecenia, aby rozpakować plik kopii zapasowej:dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman,

11
W Opcji 1, w jaki sposób mam nakazać cp polecenie zapisania ich na moim laptopie (Mac)? Jeśli podasz przykład Win, też chciałbym wiedzieć i po prostu go przetłumaczę. Dzięki.
Gerard

10
Ważne: Uruchomienie adb backup -noapk com.your.packagenamespowoduje zapisanie pliku ab w bieżącym katalogu , więc upewnij się, że nawigowałeś w odpowiednim katalogu (np. cd Desktop..)
Menelaos Kotsollaris

6
Pamiętaj, że metoda tworzenia kopii zapasowych da pustą kopię zapasową, jeśli aplikacja wyłączyła kopie zapasowe za pośrednictwem android:allowBackup="false"manifestu.
Tom

130

Jeśli używasz Androida Studio 3.0 lub nowszej wersji, wykonaj następujące kroki.

  1. Kliknij Widok > Narzędzie Windows > Eksplorator plików urządzenia .
  2. Rozwiń węzły / data / data / [nazwa-pakietu] .

Możesz rozwijać tylko pakiety, które działają w trybie debugowania na nierootowanym urządzeniu.

Kroki w Android Studio 3.0


1
nie mogę nic zobaczyć w tym doku. i nie mów mi nic. czy wiesz jaki jest problem?
Mahdi Azadbar,

1
Działa to tylko w trybie debugowania, a nie w kompilacjach wersji
itinance

Dziękujemy za pokazanie sposobu przeglądania systemu plików bez użycia pity!
Lensflare

Wydaje mi się, że nie mam opcji w wersji 3.0.1, czy to się zmieniło?
Codingale

1
to jest niesamowite. Chciałbym to wiedzieć jakiś czas temu.
checkmate711,

59

Możesz także spróbować pobrać bazę danych za pomocą aplikacji root explorer. A jeśli to nie zadziała, możesz spróbować:

  1. Otwórz cmd
  2. Zmień katalog i przejdź do „Narzędzia platformy”
  3. Wpisz adb shell'
  4. su
  5. Naciśnij „Zezwól” na urządzeniu
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. Otwórz widok DDMS w Eclipse, a następnie otwórz „FileExplorer”, aby uzyskać żądany plik

Po tym powinieneś być w stanie przeglądać pliki na zrootowanym urządzeniu.


2
myślę, że aplikacja root explorer działa tylko na zrootowanych telefonach. Wypróbuję drugą metodę
Naveen Prince P

5
Nie można
przesłać

@bredredo Myślę, że to dlatego, że Twój telefon nie jest zrootowany. powinieneś
zrootować

1
@mahemadhi tak, prawdopodobnie będziesz musiał uruchomić to polecenie ręcznie dla każdego katalogu, ponieważ wszystkie katalogi mają uprawnienia do nich prywatne.
Sheraz Ahmad Khilji

1
@VivekChavda tak, wymagają
zrootowanego

21

Aby wykonać którąkolwiek z powyższych czynności (tj. Uzyskać dostęp do chronionych folderów z poziomu samego telefonu), nadal potrzebujesz roota. (Obejmuje to zmianę uprawnień montowania w folderze / data i dostęp do niego)

Bez roota dostęp do /databezpośrednio do odczytu z wyjątkiem z poziomu aplikacji za pomocą kodu nie jest możliwy. Możesz więc spróbować skopiować ten plik na sdcard lub w inny dostępny sposób, a następnie powinieneś być w stanie uzyskać do niego normalny dostęp.

Rootowanie nie spowoduje utraty gwarancji, jeśli masz urządzenie programistyczne. Przepraszam, nie ma innego sposobu AFAIK.


nie używam urządzenia programisty. Mój to Xperia U
Naveen Prince P

czy mogę edytować uprawnienia użytkownika do folderu danych za pomocą komend chmode?
Naveen Prince P

Cała partycja jest montowana jako tylko do odczytu. Powiedziałbym, że twój najlepszy zakład byłby taki, adb pulljak wspomniano w poniższej odpowiedzi.
Anirudh Ramanathan

Jest to możliwe, jeśli aplikacja na to pozwala. Wszystkie katalogi mają uprawnienia x dla wszystkich (ale nie dla wszystkich, więc musisz znać ścieżkę). To zależy od tego, czy aplikacja udostępniła świat plików, czy nie. Niektóre pliki są, większość nie.
Jan Hudec

Najpierw mówisz, że nie można go odczytać, a następnie sugerujesz skopiowanie pliku w inne miejsce. Ale jak skopiować plik bez czytania go w pierwszej kolejności? Myślę, że ta odpowiedź jest błędna.
do

13

Najprostszym sposobem (tylko jednym prostym krokiem), aby pobrać plik z folderu aplikacji do debugowania (powiedzmy /data/data/package.name/databases/file) na nieukorzenionym urządzeniu z systemem Android 5.0+ jest użycie tego polecenia:

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

12
  1. Otwórz wiersz polecenia
  2. Zmień katalog na E: \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools
  3. Wpisz poniższe polecenia
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. Zmień katalog, aby cd /sdcardupewnić się, że database.dbtam jest.
  7. adb pull /sdcard/database.db lub po prostu możesz skopiować database.db z urządzenia.

Działa idealnie dla mnie. Dzięki! Ale w moim przypadku nazwa pliku bazy danych nie ma rozszerzenia .db.
technik

10

Użyj Eksploratora plików w środowisku Eclipse. Wybierz Windows => Pokaż widok => Inne ... => Eksplorator plików.

Innym sposobem jest pobranie pliku przez adb:

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

5

Raz miałem również ten sam problem. Nie ma sposobu na bezpośredni dostęp do pliku na urządzeniach z Androidem, z wyjątkiem powłoki adb lub urządzenia do rootowania.

Obok są 02 alternatywy:

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) Spróbuj tego: https://github.com/sanathp/DatabaseManager_For_Android


5

Aby wykonać kopię zapasową z Androida na komputer

Otwórz wiersz polecenia cmd i uruchom to: adb backup -f C: \ Intel \ xxx.ab -noapk your.app.package . Nie wpisuj hasła i kliknij Utwórz kopię zapasową moich danych. Pamiętaj, aby nie zapisywać na katalogu głównym dysku C. Możesz zostać odrzucony. Właśnie dlatego zapisałem na C: \ Intel.

Aby wyodrębnić plik * .ab

  1. Idź tutaj i pobierz: https://sourceforge.net/projects/adbextractor/
  2. Wyodrębnij pobrany plik i przejdź do folderu, do którego wyodrębniono.
  3. uruchom to z własnymi nazwami plików: java -jar abe.jar rozpakuj c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar

1
To świetna odpowiedź, dziękuję. Pracowałem dla mnie, aby wyodrębnić kopię zapasową jednej aplikacji utworzoną na urządzeniu Xiaomi (z rozszerzeniem .bak). Nie wymaga rootowania
rosyjski

4

Na zrootowanym urządzeniu poprawne rozwiązanie jest następujące:

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

Oryginalne rozwiązanie działało, ale chmod zwrócił nieznany katalog. Zmiana polecenia chmod na / data / data / * zapewniła dostęp do wszystkich podfolderów w katalogu danych z DDMS w Intellij. Zakładam, że to samo rozwiązanie dotyczy Eclipse DDMS.

AKTUALIZACJA To, co znalazłem, jest dziwne. Korzystam z Nexusa 6 za pomocą DDMS w IntelliJ (Android Device Monitor). Zbudowałem małą aplikację startową. Wspomniana aplikacja zapisuje dane do pliku .csv w plikach data / data / com.example.myapp /

Kiedy po raz pierwszy zacząłem próbować uzyskać dostęp do tego pliku na moim Nexusie 6, stwierdziłem, że muszę zrootować urządzenie. Widziałem folder danych, ale próba otwarcia go nie zadziałałaby. Jak wspomniano online w innych miejscach, rozwinięcie + zniknie, a następnie pojawi się wkrótce potem (należy zauważyć, że w Internecie istnieją rozwiązania, które twierdzą, że umożliwiają dostęp do tych folderów bez rootowania, nie znalazłem ich zbyt późno i jestem nie jestem pewien, czy wolę zrezygnować z rootowania ((wolałbym to zrobić ręcznie niż polegać na aplikacji lub wierszu poleceń, aby podać moje rozwiązania)). Zrootowałem moją 6 i ponownie wypróbowałem DDMS.

W tym momencie pokazał mi folder danych i mogłem go rozwinąć i zobaczyć com. katalogi, ale nie mogłem otworzyć żadnego z nich. Wtedy odkryłem powyższe rozwiązanie. Wstępne instrukcje nie działałyby w tej części:

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

Właśnie wtedy wypróbowałem opublikowane przeze mnie rozwiązanie:

chmod 777 /data /data/data /data/data/*

To rozwiązanie wydawało się działać, ale tylko w niektórych folderach. Teraz mogę rozwinąć mój folder myapp, ale nie mogę rozwinąć w nim katalogu plików.

W tym momencie bawiłem się przez chwilę, a potem pomyślałem, dlaczego po prostu nie wypróbować tego w katalogu, którego potrzebuję, zamiast wypróbować te znaki zastępcze.

chmod 777 /data /data/data /data/data/com.example.myapp/*

Śledzony przez:

chmod 777 /data /data/data /data/data/com.example.myapp/files

Te polecenia pozwoliły mi rozwinąć i wyświetlić pliki w katalogu mojej aplikacji, aby potwierdzić, że plik .csv został poprawnie zapisany.

Mam nadzieję, że to komuś pomoże. Walczyłem z tym godzinami!

(co nieco bardziej skomplikowane, co dziwne, uprawnienia nie przeszły do ​​pliku .csv, który przeszedł do katalogu plików. moje uprawnienia do katalogu plików czytają drwxrwxrwx, a moje uprawnienia do pliku log.csv czytane -rw-rw --- - .. tylko fyi)


2

Możesz pobrać taki plik Sigle:

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

Przed pobraniem możesz nie przyjrzeć się strukturze plików w katalogu aplikacji. W tym celu wykonaj następujące kroki THelperwymienione powyżej:

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

Android Studio sposób Shahidulwymienić ( https://stackoverflow.com/a/44089388/1256697 ) również pracę. Dla tych, którzy nie widzą DeviceFile Exploreropcji w menu: Pamiętaj, aby otworzyć katalog / android-in Android Studio. Np. Natywni użytkownicy mają to w swoim folderze projektu na tym samym poziomie, co katalog / ios.


1

Jednym z prostych sposobów jest utworzenie bazy danych na karcie SD. Ponieważ nie możesz uzyskać dostępu do folderu danych telefonu w pamięci wewnętrznej, chyba że zrootujesz telefon. Dlaczego więc nie utworzyć bazy danych na karcie SD.

Ponadto, jeśli chcesz, możesz napisać kod do kopiowania plików, aby skopiować istniejący plik bazy danych (z pamięci wewnętrznej) do pamięci zewnętrznej bez konieczności rootowania.


jak to zrobić? jak mogę utworzyć db w sdcard
Naveen Prince P

Ta metoda pomoże ci stworzyć bazę danych na karcie SD. Po prostu podaj ścieżkę Filewskazującą na kartę SD i możesz zacząć
waqaslam,

1

dostęp do tego folderu może wymagać uprawnień administracyjnych.

więc masz dwie opcje: -

  1. zrootuj urządzenie i spróbuj uzyskać dostęp do tego folderu
  2. użyj emulatora

ps: jeśli używasz jednej z powyższych dwóch opcji, możesz uzyskać dostęp do tego folderu, wykonując następujące kroki

otwórz perspektywę DDMS -> twoje urządzenie -> (wybierz Eksplorator plików z opcji po prawej stronie okna) wybierz pakiet -> dane -> dane -> nazwa pakietu -> pliki

i stamtąd możesz wyciągnąć plik


1

adb backupnie działało dla mnie, więc oto co zrobiłem (Xiaomi Redmi Note 4X, Android 6.0):
1. Przejdź do Ustawienia> Ustawienia dodatkowe> Kopia zapasowa i resetowanie> Lokalne kopie zapasowe .
2. Stuknij „Utwórz kopię zapasową” u dołu ekranu.
3. Odznacz „System” i „Aplikacje”.
4. Stuknij przycisk ujawnienia szczegółów po prawej stronie komórki „Aplikacje”, aby przejść do ekranu wyboru aplikacji.
5. Wybierz żądaną aplikację i dotknij OK.
6. Po zakończeniu tworzenia kopii zapasowej rzeczywisty plik musi zostać w jakiś sposób zlokalizowany. Mój można znaleźć w / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ .
7. Następnie wykonałem kroki od tej odpowiedzi przez RonTLVaby faktycznie przekonwertować plik kopii zapasowej (w moim przypadku .bak) na tar (duplikacja oryginalnej odpowiedzi):

a) Idź tutaj i pobierz: https://sourceforge.net/projects/adbextractor/
b) Wyodrębnij pobrany plik i przejdź do folderu, do którego rozpakowałeś.
c) uruchom to z własnymi nazwami plików: java -jar abe.jar rozpakuj c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar
"


0

możesz skopiować ten plik db gdzieś w eksploratorze eclipse (np .: sdcard lub PC) i możesz użyć sqlite, aby uzyskać dostęp do tego pliku db i zaktualizować go.


0

Pytanie brzmi: jak uzyskać dostęp do danych-folderów-danych na urządzeniu z Androidem?


Jeśli urządzenie z Androidem to Bluestacks * Root Browser APK wyświetla dane / dane / ..


Spróbuj pobrać przeglądarkę root z https://apkpure.com/root-browser/com.jrummy.root.browserfree


Jeśli plik jest plikiem tekstowym, musisz kliknąć „Otwórz jako”, „Plik tekstowy”, „Otwórz jako”, „RB Text Editor”


0

Możesz także spróbować skopiować plik do folderu SD Card, który jest folderem publicznym, a następnie możesz skopiować plik na komputer, gdzie możesz użyć sqlite, aby uzyskać do niego dostęp.

Oto kod, którego możesz użyć do skopiowania pliku z danych / danych do publicznego folderu przechowywania:

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();
    }
}

Oczywisty:

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

Wszystkie działania na rzecz kopiowania pliku nie są dostępne, jeśli plik nie jest udostępniony. Uprawnienia do odczytu dla innych
Steve Luck

0

Baza danych SQLlite jest przechowywana na telefonie użytkownika i ukrywa się pod ścieżką:

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

masz tutaj 2 opcje:

  1. możesz zrootować telefon, aby uzyskać dostęp do wyświetlania pliku db3 ukrywania
  2. to nie jest rozwiązanie, ale obejście. Dlaczego nie stworzyć strony testowej, która wyświetli w niej tabelę bazy danych, używając statystyki „wybierz”.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.