Android - SQlite Datenbank Android-Gerät ziehen

99

Ich habe überall gesucht und kann keine wirklich genaue Antwort oder ein Tutorial finden, wie dies möglich ist, wenn es möglich ist.

Ist es möglich, eine Datenbank eines Android-Geräts auf irgendeine Weise abzurufen, ohne sie rooten zu müssen? Ich muss diese Daten nur auf irgendeine Weise extrahieren, um sie auf meinem PC zu sammeln. Wie kann ich das durchführen? Muss ich die App oder eine andere Methode, die ihr kennt, neu programmieren, aber denkt daran, ohne das Gerät zu rooten? Vielen Dank

DeX03
quelle
Hier ist die praktikable Lösung: stackoverflow.com/a/29257875/291427
kmalmur
1
stackoverflow.com/questions/13006315 Ziehen Sie die Datenbank ohne Rooting
Naveen Prince P

Antworten:

78

Ein üblicher Weg, um das zu erreichen, was Sie wünschen, ist die Verwendung des ADB-Pull-Befehls.

Eine andere Möglichkeit, die ich in den meisten Fällen bevorzuge, besteht darin, die Datenbank per Code auf die SD-Karte zu kopieren:

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) {

}

Vergessen Sie nicht, die Berechtigung zum Schreiben auf SD in Ihrem Manifest wie unten festzulegen.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
KarlKarlsom
quelle
1
Nun, ich werde dies auf einem Samsung Galaxy Tab verwenden, der keine SD-Karte hat. Wie mache ich das dort?
DeX03
und ich muss double // verwenden?
DeX03
Ja, das liegt daran, dass das / ein spezielles Zeichenfolgenzeichen ist. // in Ihrem "//" ergibt /.
Karl Karlsom
4
Anstatt den Datenbankpfad zu erstellen, verfügt SQLiteDatabase über eine getPathMethode.
Will
Geniale Antwort. sehr klug, nützlich und einfach.
Gundu Bandgar
179

Wenn auf Ihrem Gerät Android v4 oder höher ausgeführt wird, können Sie mithilfe des Befehls App-Daten, einschließlich der Datenbank, ohne Root adb backupabrufen, die Sicherungsdatei extrahieren und auf die SQLite-Datenbank zugreifen.

Sichern Sie zuerst die App-Daten über ein USB-Kabel mit dem folgenden Befehl auf Ihrem PC und ersetzen Sie sie app.package.namedurch den tatsächlichen Paketnamen der Anwendung.

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

Dadurch werden Sie aufgefordert, "Ihr Gerät zu entsperren und den Sicherungsvorgang zu bestätigen". Geben Sie kein Kennwort für die Sicherungsverschlüsselung an , damit Sie es später extrahieren können. Klicken Sie auf Ihrem Gerät auf die Schaltfläche "Meine Daten sichern". Auf dem Bildschirm wird der Name des Pakets angezeigt, das Sie sichern, und nach erfolgreichem Abschluss von selbst geschlossen.

Die resultierende data.abDatei in Ihrem Home-Ordner enthält Anwendungsdaten im Android-Backup-Format. Verwenden Sie zum Extrahieren den folgenden Befehl:

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

Wenn das oben genannte mit einem openssl:Error: 'zlib' is an invalid command.Fehler endete , versuchen Sie es unten.

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

Das Ergebnis ist der apps/app.package.name/Ordner mit den Anwendungsdaten, einschließlich der SQLite-Datenbank.

Weitere Informationen finden Sie im Original-Blogbeitrag .

Sergei
quelle
9
Für diejenigen, die zlib nicht ohne zlib kompiliert haben, lesen Sie die Antwort auf blog.shvetsov.com/2013/02/… , um die Daten mit Python zu extrahieren.
Ingh.am
2
Für Windows-Benutzer, bei denen der Befehl zum Entpacken nicht verfügbar ist, können Sie die Java-Anwendung "Android Backup Extractor" ( sourceforge.net/projects/adbextractor ) verwenden. Siehe forum.xda-developers.com/showthread.php?t=2011811 für die Befehle der .ab Datei entpacken.
Lalitm
7
Auf meinem MacBook Pro erhalte ich die Nachricht openssl:Error: 'zlib' is an invalid command., auf die ich dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -JEDOCH geantwortet habe , nachdem angezeigt wurde, 17+0 records in17+0 records out17 bytes transferred in 0.000064 secsdass keine Hinweise darauf vorliegen, dass etwas mit dem Ordner getan wurde. Da es nur 17 Bytes sind, gehe ich davon aus, dass dieser Befehl ebenfalls fehlgeschlagen ist. Ich finde es schlecht, wie ich adb pulldie Datenbank von einer Debug-App nicht bekommen kann !!
Jemand irgendwo
12
Pro-Tipp: Dieses Backup-Zeug funktioniert nicht, wenn das Manifest der App zeigtandroid:allowBackup="false"
Jemand irgendwo
9
Unter opensslMac OS X wurde der zlibBefehl ebenfalls nicht unterstützt , daher habe ich den Befehl mit Brew neu installiert : brew reinstall openssl. Dies wird Ihr System openssl nicht ersetzen. Daher habe ich den Befehl PATH nur für die aktuelle Sitzung geändert: Danach export PATH=/usr/local/opt/openssl/bin:$PATHkonnten die Befehle aus dieser Antwort erfolgreich ausgeführt werden.
Aleks N.
69

Für debuggbare Apps 1 auf nicht gerooteten Geräten können Sie den folgenden Befehl verwenden:

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

Beispiel:

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

Stellen Sie PATH adb für Umgebungsvariablen ein oder verwenden Sie den Befehl cd, um die Plattform-Tools des Android SDK-Ordners zu verwenden.

Beispiel:

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

Verwenden Sie dann den obigen Befehl


1 Beachten Sie, dass die meisten Apps im Play Store nicht debuggbar sind, da das Debuggable-Flag im Manifest gesetzt werden muss.

Lam Vinh
quelle
8
Nachdem ich durch package.namedas App-Paket ersetzt habe, wird der Fehler zurückgegeben:run-as: Package 'com.my.app' is unknown
Jemand irgendwo
3
Es scheint, dass es nicht für alle Telefone funktioniert. Funktioniert für Nexus 4, funktioniert beispielsweise nicht für SGS4.
Roman Minenok
2
Wo wird die Datenbankdatei gespeichert?
Vojtěch Pešek
3
Das hat früher bei mir funktioniert, aber ich kann nicht scheinen, dass dies auf meinem Nexus 7 funktioniert, das auf Android 5 aktualisiert wurde. Kann jemand bestätigen, dass dies auf Android 5 funktioniert?
BäumeAreEverywhere
15
Hier ist ein Hack für Android 5 (Lollipop) ADB-Shell "run-as [Paketname] chmod -R 777 / data / data / [Paketname] / Datenbanken" ADB-Shell "mkdir -p / sdcard / tempDB" ADB-Shell "cp -r / data / data / [Paketname] / database / / sdcard / tempDB /. " adb pull sdcard / tempDB /. ADB-Shell "rm -r / sdcard / tempDB / *"
Rubin Yoo
55

Die meisten Antworten hier sind viel komplizierter als sie sein müssen. Wenn Sie nur die Datenbank Ihrer App von Ihrem Telefon auf Ihren Computer kopieren möchten, benötigen Sie nur diesen Befehl:

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

Alles, was Sie zum Ausfüllen des obigen Befehls benötigen, ist der Paketname Ihrer App, wie die Datenbank heißt und optional, wohin die Datenbank kopiert werden soll.

Bitte beachten Sie, dass dieser spezielle Befehl nur funktioniert, wenn nur ein Gerät an Ihren Computer angeschlossen ist. Der -dParameter bedeutet, dass das einzige angeschlossene Gerät als Ziel ausgewählt wird. Es gibt aber auch andere Parameter, die Sie stattdessen verwenden können:

  • -e zielt auf den einzigen laufenden Emulator ab
  • -s <serialnumber> zielt auf ein Gerät mit einer bestimmten Seriennummer ab.

Xaver Kapeller
quelle
Wie kann ich diese Datei öffnen?
Jehad
@ Jehad: Ich hatte das gleiche Problem. Ich habe diesen Weg gefunden und es funktioniert für mich. Installieren Sie SSHDroid auf Ihrem Telefon. adb -d shell "run-as your.package.name cat databases/database_name.db > /mnt/sdcard/database_name.db" Starten Sie SSHDroidFileZilla und stellen Sie über das SFTP-Protokoll eine Verbindung zu Ihrem Telefon her. Legen Sie / mnt / sdcard als Standard-Remote-Verzeichnis fest.
Zoltán Süle
Die einfachste Antwort, wenn Sie die Datenbank Ihrer eigenen App erhalten möchten. Zwei Ergänzungen: 1) Wenn Sie sich über Ihren Datenbanknamen nicht sicher sind, können Sie mit einem ls-Befehl die Dateien im Datenbankordner ( adb -d shell "run-as your.package.name ls databases") auflisten und 2) Sie möchten möglicherweise alle anderen zugehörigen Dateien zusammen mit der Datenbank in abrufen Mein Fall, bei dem die Dateien -smh und -wal extrahiert wurden, war die einzige Möglichkeit, DB Browser für SQLite zum Öffnen der Datenbank zu bewegen
Ronan,
36

Mit Android Studio 3.0 oder einer höheren Version ist es möglich, eine Datenbank (auch gemeinsam genutzte Einstellungen, Cache-Verzeichnis und andere) abzurufen, wenn die Anwendung auf einem nicht gerooteten Gerät im Debug-Modus ausgeführt wird.

Befolgen Sie diese Schritte, um die Datenbank mit Android Studio abzurufen.

  1. Klicken Sie auf Ansicht > Tool Windows > Gerätedateie-Explorer .
  2. Erweitern Sie die Knoten / data / data / [Paketname] .

In Android Studio 3.0 wurden Schritte ausgeführt

Shahidul
quelle
Vielen Dank. Von einem Emulator heruntergeladene Dateien können von Galaxy S4 ohne Rootberechtigung nicht abgerufen werden.
CoolMind
Können Sie die Datenbank aus einer beliebigen App oder nur aus Ihrer eigenen App abrufen?
Live-Liebe
Jede App, aber Voraussetzung ist App, muss debuggbar sein.
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/*"
SaundersB
quelle
5

Für Ubuntu (nicht nur?):

siehe Sergeis Antwort, aber anstelle von openssl verwenden Sie zlib-flate:

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

Andernfalls wird openssl wahrscheinlich werfen:

openssl: Fehler: 'zlib' ist ein ungültiger Befehl.

weil openssl in Ubuntu nicht mit zlib-Unterstützung kompiliert wird

Murmel
quelle
1

Da funktioniert bei mir eigentlich nichts. Ich erstelle ein kleines Windows BATCH-Skript, das auf anderen Antworten basiert, die zusammen kombiniert werden. Hoffe es hilft jemandem. Einfach verwenden: backupDatabase <Paketname> <Anwendungsname> [Zielverzeichnis]. Es verwendet die Sicherungsmethode von Sergei und 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
Wooff
quelle
1

Sie können die SQLite-Datei einfach von Ihrem Gerät extrahieren (Root nicht erforderlich)

  1. Gehen Sie zum SDK-Ordner
  2. CD-Plattform-Tools
  3. starte adb

    cd / sdk / platform-tools ./adb shell Geben Sie

    dann den folgenden Befehl in terminal ein

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

    Zum Beispiel

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

Yubaraj Poudel
quelle
1

Wenn Sie versuchen, dies auf Android 6 zu tun, fordern Sie die Erlaubnis an und verwenden Sie den Code der Antwort auf diese Frage

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

Sobald es gewährt wird

@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();
        } 
    } 
} 
Rodolfo Abarca
quelle
1

Alternativ können Sie meine Bibliothek Ultra Debugger verwenden . Sie können die Datenbank als Datei herunterladen oder Werte direkt im Browser bearbeiten. Keine Wurzel erforderlich, sehr einfach zu bedienen.

BArtWell
quelle
1

Auf dem Mac (KEIN Root erforderlich)

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

Die SQLite-Datei wird in den Ordner "platform-tools" kopiert.

Yogesh Suthar
quelle
Dies scheint nur zu funktionieren, wenn die App zum Debuggen kompiliert wurde.
David Berry
@DavidBerry Ja, es wird db ziehen, wenn es zum Debuggen kompiliert wird, sonst hätten Sie die db jeder App ziehen können. Und es wird ein ernstes Sicherheitsproblem der App sein. :)
Yogesh Suthar
0
 > is it possible to pull in any way a database of an Android device without having to root it? 

Ja, wenn Ihre Android-App eine Dateikopie der Datenbank erstellt, auf die jeder zugreifen kann.

Android schützt die privaten Daten von Apps, sodass sie für andere Apps nicht sichtbar / zugänglich sind. Eine Datenbank besteht aus privaten Daten. Ihre App kann natürlich die Datenbankdatei lesen, um eine Dateikopie in eine öffentlich sichtbare Datei zu erstellen.

k3b
quelle
0

Auf einem gerooteten Gerät können Sie:

// 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
yanchenko
quelle
Ich bin nicht 100% sicher, aber ich denke, bevor Ziehen erforderlich ist> su und Erlaubnis geben
pavol.franek
0

Basierend auf der Antwort von Lam Vinh ist hier eine einfache Batch-Datei, die für mich auf meinem Nexus 7 der 1. Generation funktioniert. Sie fordert den Benutzer auf, den Paketnamen und dann den Datenbanknamen (ohne die Erweiterung .sqlite) einzugeben und diese abzulegen in c: \ temp. Dies setzt voraus, dass Sie das Android SDK in den Umgebungsvariablen festgelegt haben.

@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
Chutcher
quelle
0

Wenn Sie Android 4.0 oder höher verwenden und einen Mac verwenden , finden Sie hier ein Ruby-Skript, mit dem Sie den Inhalt Ihrer App auf dem Desktop speichern können. Ich würde mir vorstellen, dass dies auch in Ubuntu funktionieren würde, obwohl ich es nicht getestet habe.

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 -`

ausführen -> ruby ​​your_ruby_file_name.rb

Dieses Skript ist nur "happy path". Stellen Sie daher sicher, dass Ihr Gerät verbunden ist und dass adb zu Ihrem Profil hinzugefügt wurde.

Schneller McSwifterton
quelle
0

Ich gebe die komplette Lösung zum "Speichern" und "Wiederherstellen" der App-Datenbank im / vom internen Speicher (nicht auf dem PC mit ADB).

Ich habe zwei Methoden durchgeführt, eine zum Speichern und eine zum Wiederherstellen der Datenbank. Verwenden Sie diese Methoden am Ende von onCreate () in MainActivity (die eine oder andere, wenn Sie die Datenbank speichern oder wiederherstellen möchten).

Datenbank im internen Speicher speichern:

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

Datenbank aus internem Speicher wiederherstellen:

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");
        }
    }
Digitale Würfel
quelle
0

Es ist immer besser, wenn die Dinge automatisiert sind. Deshalb habe ich ein einfaches Python-Skript zum Kopieren der Datenbankdatei vom Gerät mit ADB geschrieben. Es spart viel Entwicklungszeit, wenn Sie es häufig tun.

Funktioniert nur mit debuggbaren Apps, wenn das Gerät nicht gerootet ist .

Hier ist der Link zum Kern.

Führen Sie es aus als: 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")
Nilesh Deokar
quelle
-1

Wenn Sie Ihre Datenbankdatei möchten

Siehe DDMS> Datei untersuchen

Finden Sie Ihre Datenbankdatei anhand Ihres Paketnamens

Klicken Sie dann auf Datei vom Gerät abrufen (nur gerootetes Gerät).

MAC
quelle
3
Dies kann aber auf einem gerooteten Gerät gemacht werden, was der Punkt meiner Frage ist, wie man es auf einem nicht
gerooteten
1
Dies funktioniert nicht auf einem nicht gerooteten Gerät. Ihre Antwort sollte dies angeben.
Tony9099