Android - ściąganie bazy danych SQlite urządzenie z systemem Android


101

Szukałem wszędzie i nie mogę znaleźć naprawdę dokładnej odpowiedzi ani samouczka, jak, jeśli to możliwe, zrobić to.

czy można w jakikolwiek sposób pobrać bazę danych urządzenia z systemem Android bez konieczności rootowania? Po prostu muszę wyodrębnić te dane w jakikolwiek sposób, aby zebrać je na moim komputerze, więc jak mogę to zrobić? czy muszę przeprogramować aplikację lub jakąkolwiek metodę, o której wiesz, ale pamiętaj bez rootowania urządzenia. dzięki


tutaj jest wykonalne rozwiązanie: stackoverflow.com/a/29257875/291427
kmalmur



Odpowiedzi:


78

Typowym sposobem osiągnięcia tego, czego pragniesz, jest użycie polecenia ściągania ADB.

Innym sposobem, który preferuję w większości przypadków, jest skopiowanie bazy danych kodem na kartę SD:

try {
    File sd = Environment.getExternalStorageDirectory();

    if (sd.canWrite()) {
        String currentDBPath = "/data/data/" + getPackageName() + "/databases/yourdatabasename";
        String backupDBPath = "backupname.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) {

}

Nie zapomnij ustawić uprawnień do pisania w SD w swoim manifeście, jak poniżej.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

1
cóż, użyję tego na karcie Samsung Galaxy, która nie ma karty SD, więc jak mam to zrobić?
DeX03

i muszę użyć podwójnego //?
DeX03

Tak, dzieje się tak, ponieważ / jest specjalnym ciągiem znaków. // w twoim „//” spowoduje /.
KarlKarlsom

4
Zamiast budować ścieżkę do bazy danych, SQLiteDatabase ma getPathmetodę.
Will

Świetna odpowiedź. bardzo inteligentny, użyteczny i prosty.
Gundu Bandgar,

179

Jeśli na Twoim urządzeniu działa system Android v4 lub nowszy, możesz pobrać dane aplikacji, w tym bazę danych, bezadb backup uprawnień roota, używając polecenia, a następnie wyodrębnić plik kopii zapasowej i uzyskać dostęp do bazy danych sqlite.

Najpierw wykonaj kopię zapasową danych aplikacji na komputerze za pomocą kabla USB za pomocą następującego polecenia, zastąp app.package.namerzeczywistą nazwą pakietu aplikacji.

adb backup -f ~/data.ab -noapk app.package.name

Spowoduje to wyświetlenie monitu o „odblokowanie urządzenia i potwierdzenie operacji tworzenia kopii zapasowej”. Nie podawaj hasła do szyfrowania kopii zapasowej , aby móc je później wyodrębnić. Kliknij przycisk „Utwórz kopię zapasową moich danych” na swoim urządzeniu. Na ekranie zostanie wyświetlona nazwa pakietu, którego kopię zapasową tworzysz, a po pomyślnym zakończeniu zamknie się samoczynnie.

Plik wynikowy data.abw folderze domowym zawiera dane aplikacji w formacie kopii zapasowej systemu Android. Aby go wyodrębnić, użyj następującego polecenia:

dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -

Jeśli powyższe zakończyło się openssl:Error: 'zlib' is an invalid command.błędem, wypróbuj poniższe.

dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -

Rezultatem jest apps/app.package.name/folder zawierający dane aplikacji, w tym bazę danych sqlite.

Więcej informacji znajdziesz w oryginalnym poście na blogu .


9
Dla tych, którzy nie mają skompilowanego zlib bez zlib, sprawdź odpowiedź na blog.shvetsov.com/2013/02/ ... aby wyodrębnić dane za pomocą Pythona.
ingh.am

2
Użytkownicy systemu Windows, w których polecenie rozpakowania jest niedostępne, mogą skorzystać z aplikacji Java „Android Backup Extractor” ( sourceforge.net/projects/adbextractor ). Zobacz forum.xda-developers.com/showthread.php?t=2011811, aby zapoznać się z poleceniami rozpakowywania pliku .ab.
lalitm

7
na moim MacBooku Pro otrzymuję wiadomość openssl:Error: 'zlib' is an invalid command., na którą odpowiedziałem dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -JEDNAK po tym, jak pokazuje, 17+0 records in17+0 records out17 bytes transferred in 0.000064 secsże nie ma żadnych dowodów na to, że coś zostało zrobione w folderze. Ponieważ ma tylko 17 bajtów, zakładam, że to polecenie również się nie powiodło. Myślę, że to źle, jak nie mogę adb pullbazy danych z aplikacji do debugowania !!
Ktoś gdzieś

12
profesjonalna wskazówka: ta kopia zapasowa nie zadziała, jeśli manifest aplikacji pokazujeandroid:allowBackup="false"
Someone Somewhere

9
My opensslna Mac OS X nie obsługują zlibpolecenia albo, więc ponownie zainstalować jeden z wywaru: brew reinstall openssl. To nie zastąpi twojego systemu openssl. Dlatego zmodyfikowałem polecenie PATH tylko dla bieżącej sesji: export PATH=/usr/local/opt/openssl/bin:$PATHpo której mogłem pomyślnie wykonać polecenia z tej odpowiedzi.
Aleks N.

69

Dla debuggable apps 1 na urządzeniach innych niż zakorzenione , można użyć następującego polecenia:

adb shell run-as package.name chmod 666 /data/data/package.name/databases/file
adb pull /data/data/package.name/databases/file

Przykład:

adb shell run-as com.app chmod 666 /data/data/com.app/databases/data.db
adb pull /data/data/com.app/databases/data.db

Ustaw PATH adb dla zmiennych środowiskowych lub użyj polecenia cd w folderze Android SDK platforma-narzędzia.

Przykład:

cd /folder/android-sdk/platform-tools/

następnie użyj powyższego polecenia


1 Pamiętaj, że większości aplikacji w Sklepie Play nie można debugować, ponieważ wymaga to ustawienia flagi debugowania w manifeście.


8
Po wymianie package.namena pakiet aplikacji zwracany jest błąd:run-as: Package 'com.my.app' is unknown
Someone Somewhere

3
Wygląda na to, że nie działa na wszystkich telefonach. Działa na Nexus 4, nie działa na przykład na SGS4.
Roman Minenok

2
Gdzie jest zapisywany plik db?
Vojtěch Pešek

3
Kiedyś to działało dla mnie, ale nie mogę go uruchomić na moim Nexusie 7, który został zaktualizowany do Androida 5. Czy ktoś może potwierdzić, że to działa na Androidzie 5?
treesAreEverywhere

15
Oto hack dla powłoki adb w systemie Android 5 (Lollipop) „run-as [nazwa_pakietu] chmod -R 777 / data / data / [nazwa_pakietu] / databases„ adb shell ”mkdir -p / sdcard / tempDB„ adb shell ”cp -r / data / data / [nazwa_pakietu] / bazy danych / / sdcard / tempDB /. ” adb pull sdcard / tempDB /. powłoka adb „rm -r / sdcard / tempDB / *”
Rubin Yoo

55

Większość odpowiedzi tutaj jest o wiele bardziej skomplikowanych, niż muszą. Jeśli chcesz tylko skopiować bazę danych swojej aplikacji z telefonu na komputer, potrzebujesz tylko tego polecenia:

adb -d shell "run-as your.package.name cat databases/database.name" > target.sqlite

Wszystko, co musisz wpisać w powyższym poleceniu, to nazwa pakietu Twojej aplikacji, nazwa bazy danych i opcjonalnie do czego / gdzie chcesz skopiować bazę danych.

Pamiętaj, że to konkretne polecenie będzie działać tylko wtedy, gdy masz tylko jedno urządzenie podłączone do komputera. W -doznacza parametr że tylko podłączone urządzenie zostanie ukierunkowane. Ale są inne parametry, których możesz użyć zamiast tego:

  • -e będzie kierować na jedyny działający emulator
  • -s <serialnumber> będzie kierować na urządzenie o określonym numerze seryjnym.


Jak mogę otworzyć ten plik?
Jehad

@Jehad: Miałem ten sam problem. Znalazłem ten sposób i to działa dla mnie. Zainstaluj SSHDroid na swoim telefonie, adb -d shell "run-as your.package.name cat databases/database_name.db > /mnt/sdcard/database_name.db" uruchom SSHDroidFileZilla start i połącz się z telefonem przez protokół SFTP. Ustaw / mnt / sdcard jako domyślny katalog zdalny.
Zoltán Süle

Najłatwiejsza odpowiedź, jeśli chcesz uzyskać bazę danych własnej aplikacji. Dwa dodatki: 1) jeśli nie masz pewności co do nazwy bazy danych, możesz użyć polecenia ls, aby wyświetlić listę plików w folderze bazy danych ( adb -d shell "run-as your.package.name ls databases") i 2) możesz chcieć uzyskać inne powiązane pliki wraz z bazą danych, w mój przypadek wyodrębnienie plików -smh i -wal było jedynym sposobem na to, aby przeglądarka DB Browser dla SQLite otworzyła bazę danych
Ronan

36

Korzystając z Android Studio 3.0 lub nowszej wersji, możliwe jest ściągnięcie bazy danych (również preferencji współdzielonych, katalogu pamięci podręcznej i innych), jeśli aplikacja działa w trybie debugowania na urządzeniu nierootowanym.

Aby pobrać bazę danych za pomocą Android Studio, wykonaj następujące kroki.

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

Kroki wykonane w Android Studio 3.0


Dzięki. Pobrane pliki z emulatora, ale nie można ich pobrać z nieukorzenionego Galaxy S4.
CoolMind,

Czy możesz pobrać bazę danych z dowolnej aplikacji lub tylko z własnej aplikacji?
miłość na żywo

Każda aplikacja, której warunkiem jest aplikacja, musi być możliwa do debugowania.
Shahidul

6
 adb shell "run-as [package.name] chmod -R 777 /data/data/[package.name]/databases" 
 adb shell "mkdir -p /sdcard/tempDB" 
 adb shell "cp -r /data/data/[package.name]/databases/ /sdcard/tempDB/." 
 adb pull sdcard/tempDB/ . 
 adb shell "rm -r /sdcard/tempDB/*"

5

Dla Ubuntu (nie tylko?):

zobacz odpowiedź Sergeisa, ale zamiast openssl użyj zlib-flate:

cat appbackup.ab | (dd bs = 24 count = 0 skip = 1; cat) | zlib-flate -uncompress> appbackup.tar

W przeciwnym razie openssl prawdopodobnie wyrzuci:

openssl: Błąd: „zlib” to nieprawidłowe polecenie.

ponieważ openssl nie jest skompilowana z obsługą zlib w Ubuntu


1

Ponieważ tak naprawdę nic dla mnie nie działa. Tworzę mały skrypt Windows BATCH na podstawie innych połączonych razem odpowiedzi. Mam nadzieję, że to komuś pomoże. Proste użycie: backupDatabase <nazwa_pakietu> <nazwa_aplikacji> [katalog_docelowy]. Wykorzystuje metodę tworzenia kopii zapasowych Sergeia i Android Backup Extractor .

@echo off

if [%1]==[] goto usage
if [%2]==[] goto usage
if NOT [%4]==[] goto usage

@echo Processing: preparations
set PACKAGE=%1
set APPLICATION_NAME=%2
set TARGET_DIR=%cd%
IF NOT "%~3"=="" set TARGET_DIR=%3

set PATH_ADB="c:\Program Files (x86)\Android\android-studio\sdk\platform-tools"
set PATH_ABE="c:\Programs\android-backup-extractor-20140630-bin"
set PATH_7Z="c:\Program Files\7-Zip"

@echo Processing: backup
%PATH_ADB%\adb.exe backup -f %TARGET_DIR%\%APPLICATION_NAME%\%APPLICATION_NAME%.ab -noapk %PACKAGE%

@echo Processing: unpack
java -jar %PATH_ABE%\abe.jar unpack %TARGET_DIR%\%APPLICATION_NAME%\%APPLICATION_NAME%.ab %TARGET_DIR%\%APPLICATION_NAME%\%APPLICATION_NAME%.ab.tar

@echo Processing: extract
cd %TARGET_DIR%\%APPLICATION_NAME%
%PATH_7Z%\7z.exe e %APPLICATION_NAME%.ab.tar "apps\%PACKAGE%\db\%APPLICATION_NAME%"

@echo Processing: cleaning
del %APPLICATION_NAME%.ab
del %APPLICATION_NAME%.ab.tar
goto :eof

:usage
@echo.Pull out SQLite database file from your android device.
@echo.Needs: - connected device
@echo.       - device enable backup.
@echo.       - application enable backup
@echo.       - application in debug mode
@echo.       - installed Android Backup Extractor 
@echo.       - installed command line TAR extractor (7z, ...)
@echo.Does NOT need: root device
@echo.
@echo.Uses: - ADB backup (set PATH_ADB)
@echo.      - Android Backup Extractor (http://sourceforge.net/projects/adbextractor/) (set PATH_ABE)
@echo.      - Extract TAR container, uses 7z (set PATH_7Z)
@echo.
@echo.Usage: backupDatabase ^<PackageName^> ^<ApplicationName^> [TargetDirectory]
@echo.Example: backupDatabase com.foo.example ExampleApp 
@echo Example: backupDatabase com.foo.example ExampleApp workspace\AndroidProjects\Example
exit /B 1

1

możesz łatwo wyodrębnić plik sqlite ze swojego urządzenia (root nie jest konieczny)

  1. Przejdź do folderu SDK
  2. narzędzia platformy CD
  3. start adb

    cd / sdk / platform-tools ./adb shell

    Następnie wpisz następujące polecenie w terminalu

    ./adb -d shell "run-as com.your_packagename cat /data/data/com.your_packagename/databases/jokhanaNepal> /sdcard/jokhana.sqlite"

    Na przykład

    ./adb -d shell "run-as com.yuvii.app cat /data/data/com.yuvii.app/databases/jokhanaNepal> /sdcard/jokhana.sqlite"


1

Jeśli próbujesz to zrobić na Androidzie 6, poproś o pozwolenie i użyj kodu odpowiedzi na to pytanie

if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_RC); 
    return; 
} 

Raz jest przyznane

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == STORAGE_PERMISSION_RC) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            //permission granted  start reading or writing database
        } else { 
            Toast.makeText(this, "No permission to read external storage.", Toast.LENGTH_SHORT).show();
        } 
    } 
} 

1

Alternatywnie możesz skorzystać z mojej biblioteki Ultra Debugger . Pozwala na pobranie bazy danych w postaci pliku lub edycję wartości bezpośrednio w przeglądarce. Bez rootowania, bardzo łatwy w użyciu.


1

Na komputerze Mac (bez uprawnień roota)

1. Go to platform-tools folder.
2) Run following command in terminal.

./adb -d shell "run-as your.package.name cat databases/database.sqlite" > database.sqlite

Skopiuje plik sqlite do folderu narzędzi platformy.


Wydaje się, że działa to tylko wtedy, gdy aplikacja jest skompilowana do debugowania.
David Berry

@DavidBerry Tak, pobierze bazę danych, jeśli zostanie skompilowana do debugowania, w przeciwnym razie możesz pobrać bazę danych dowolnej aplikacji. I będzie to poważny problem bezpieczeństwa aplikacji. :)
Yogesh Suthar

0
 > is it possible to pull in any way a database of an Android device without having to root it? 

tak, jeśli aplikacja na Androida tworzy kopię bazy danych, do której każdy ma dostęp.

Android chroni prywatne dane aplikacji, więc nie są one widoczne / dostępne dla innych aplikacji. baza danych to dane prywatne. Twoja aplikacja może oczywiście odczytać plik bazy danych, więc może wykonać kopię pliku do jakiegoś publicznego widocznego pliku.


0

Na zrootowanym urządzeniu możesz:

// check that db is there
>adb shell
# ls /data/data/app.package.name/databases
db_name.sqlite // a custom named db
# exit
// pull it
>adb pull /data/app.package.name/databases/db_name.sqlite

Nie jestem w 100% pewien, ale myślę, że przed ściągnięciem jest potrzebne> su i
wyrażam

0

Na podstawie odpowiedzi udzielonej przez Lama Vinha, oto prosty plik wsadowy, który działa dla mnie na moim Nexusie 7 pierwszej generacji. Prosi użytkownika o wprowadzenie nazwy pakietu, a następnie nazwy bazy danych (bez rozszerzenia .sqlite) i umieszcza ją w c: \ temp. Zakłada się, że zestaw SDK systemu Android jest ustawiony w zmiennych środowiskowych.

@echo off
cd c:\temp\

set /p UserInputPackage= Enter the package name: 
set /p UserInputDB= Enter the database name: 

@echo on
adb shell "run-as %UserInputPackage% chmod 666 /data/data/%UserInputPackage%/databases/%UserInputDB%.sqlite"
adb pull /data/data/%UserInputPackage%/databases/%UserInputDB%.sqlite
@echo off
pause

0

Jeśli korzystasz z Androida 4.0 lub nowszego i korzystasz z komputera Mac , oto skrypt ruby, który zapisze zawartość aplikacji na pulpicie. Sądzę, że to zadziała również w Ubuntu, chociaż nie testowałem tego.

puts "enter your package name"
package_name = gets.chomp
puts "press the 'Back up my data' button on your device"
`adb backup -f ~/Desktop/data.ab -noapk #{package_name}`
puts "press enter once once the 'Backup finished' toast has appeared"
gets.chomp
puts "extracting..."
`dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -`

uruchomić -> ruby ​​your_ruby_file_name.rb

Ten skrypt jest tylko „szczęśliwą ścieżką”, więc upewnij się, że twoje urządzenie jest podłączone i że adb zostało dodane do twojego profilu.


0

Daję kompletne rozwiązanie do „zapisywania” i „przywracania” bazy danych aplikacji do / z pamięci wewnętrznej (nie do komputera z adb).

Zrobiłem dwie metody, jedną do zapisywania, a drugą do przywracania bazy danych. Użyj tych metod na końcu onCreate () w MainActivity (jednej lub drugiej, jeśli chcesz zapisać lub przywrócić bazę danych).

zapisz bazę danych do pamięci wewnętrznej:

void copyDatabase (){
        try {
            final String inFileName = "/data/data/<pakage.name>/databases/database.db";
            final String outFileName = Environment.getExternalStorageDirectory() + "database_backup.db";
            File dbFile = new File(inFileName);
            FileInputStream fis = new FileInputStream(dbFile);


            Log.d(TAG, "copyDatabase: outFile = " + outFileName);

            // Open the empty db as the output stream
            OutputStream output = new FileOutputStream(outFileName);

            // Transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }

            // Close the streams
            output.flush();
            output.close();
            fis.close();
        }catch (Exception e){
            Log.d(TAG, "copyDatabase: backup error");
        }
    }

przywróć bazę danych z pamięci wewnętrznej:

void restoreDatabase (){
        try {
            final String inFileName = Environment.getExternalStorageDirectory() + "database_backup.db";
            final String outFileName = "/data/data/<package.name>/databases/database.db";
            File dbFile = new File(inFileName);
            FileInputStream fis = new FileInputStream(dbFile);

            Log.d(TAG, "copyDatabase: outFile = " + outFileName);

            // Open the empty db as the output stream
            OutputStream output = new FileOutputStream(outFileName);

            // Transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }

            // Close the streams
            output.flush();
            output.close();
            fis.close();
        }catch (Exception e){
            Log.d(TAG, "copyDatabase: backup error");
        }
    }

0

Zawsze lepiej, jeśli wszystko jest zautomatyzowane, dlatego napisałem prosty skrypt w Pythonie do kopiowania pliku db z urządzenia za pomocą ADB. Oszczędza dużo czasu programowania, jeśli robisz to często.

Działa tylko z aplikacjami do debugowania, jeśli urządzenie nie jest zrootowane .

Oto link do istoty.

Uruchom jako: python copyandroiddbfile.py

import sys
import subprocess
import re

#/
# Created by @nieldeokar on 25/05/2018.
#/

# 1. Python script which will copy database file of debuggable apps from the android device to your computer using ADB.
# 2. This script ask for PackageName and DatabaseName at runtime.
# 3. You can make it static by passing -d at as command line argument while running script and setting defaults in following way.
# 4. Edit script and change the values of varialbe packageName and dbName to debuggable app package name and database name then
# run script as : python Copydbfileandroid.py -d 

useDefaults = False


def checkIfPackageInstalled(strSelectedDevice) :

    packageName = 'com.nileshdeokar.healthapp.debug'
    dbName = 'healthapp.db'


    if not useDefaults : 
        print('Please enter package name : ')
        packageName = raw_input()

    packageString = 'package:'+packageName

    try:
        adbCheckIfPackageInstalledOutput = subprocess.check_output('adb -s ' + strSelectedDevice + ' shell pm list packages | grep -x '+ packageString, shell=True)
    except subprocess.CalledProcessError as e:
                print "Package not found"
                return


    if packageString.strip() == adbCheckIfPackageInstalledOutput.strip() : 
        if not useDefaults : 
            print('Please enter db name : ')
            dbName = raw_input()

        adbCopyDbString = 'adb -s '+strSelectedDevice + ' -d shell \"run-as '+packageName+' cat /data/data/'+packageName+'/databases/'+ dbName +'\" > '+dbName

        try:
            copyDbOp = subprocess.check_output(adbCopyDbString,shell=True)
        except subprocess.CalledProcessError as e:
                return

        if "is not debuggable" in copyDbOp :
            print packageString + 'is nto debuggable'

        if copyDbOp.strip() == "":
            print 'Successfully copied '+dbName + ' in current directory'

    else :
        print 'Package is not installed on the device'



defaultString = "-d"
if len(sys.argv[1:]) > 0 and sys.argv[1] == defaultString :
        useDefaults = True

listDevicesOutput = subprocess.check_output("adb devices", shell=True)
listDevicesOutput = listDevicesOutput.replace("List of devices attached"," ").replace("\n","").replace("\t","").replace("\n\n","")

numberofDevices = len(re.findall(r'device+', listDevicesOutput))

connectedDevicesArray = listDevicesOutput.split("device")   
del connectedDevicesArray[-1] 


strSelectedDevice = ''
if(numberofDevices > 1) :
    print('Please select the device : \n'),

    for idx, device in enumerate(connectedDevicesArray):
        print idx+1,device

    selectedDevice = raw_input()

    if selectedDevice.isdigit() :
        intSelected = int(selectedDevice)
        if 1 <= intSelected <= len(connectedDevicesArray) :
            print 'Selected device is : ',connectedDevicesArray[intSelected-1]
            checkIfPackageInstalled(connectedDevicesArray[intSelected-1])
        else :
            print 'Please select in range'
    else : 
        print 'Not valid input'

elif numberofDevices == 1 :
    checkIfPackageInstalled(connectedDevicesArray[0])
elif numberofDevices == 0 :
    print("No device is attached")

-1

Jeśli chcesz, aby plik bazy danych

Zobacz DDMS> Eksploracja plików

znajdź plik db na podstawie nazwy pakietu

następnie kliknij ściągnij plik z urządzenia (tylko urządzenie zrootowane)


3
można to zrobić, ale na zrootowanym urządzeniu, co jest celem mojego pytania, jak to zrobić na
niezrootowanym

1
to nie działa na nierootowanym urządzeniu. Twoja odpowiedź powinna to stwierdzać.
tony9099
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.