Backup & Restore bei Android ohne Root mit ADB

adb Backup

Wer ein Android Smartphone hat, möchte ggf. seine Daten sichern. Wenn man sein Gerät nicht Rooten möchte, um dies zu tun, kann man es mit dem Google Kommandozeilentool adb tun.

 

1. Download Commandline Tools:

https://developer.android.com/studio/index.html#downloads

2. ADB-Installieren:

> sudo /opt/tools/bin/sdkmanager --list
> sudo /opt/tools/bin/sdkmanager --update
> sudo /opt/tools/bin/sdkmanager tools

3. USB-Debugging aktivieren

https://developer.android.com/studio/command-line/adb.html#Enabling

4. U-Dev Regeln setzen (Nur Linux)

Damit adb auf das Smartphone zugreifen kann, muss eine passende UDEV-Regel gesetzt werden. Wenn es nicht um ein Pixel Smartphone geht, muss die Vendor ID angepasst werden (link).
Die vollständige Doku findet sich hier: https://developer.android.com/studio/run/device.html
> nano /etc/udev/rules.d/51-android.rules

 SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"

5. Prüfen ob Gerät verbunden ist.

> sudo /opt/platform-tools/adb devices -l
> sudo /opt/platform-tools/adb backup -f /home/username/backup.ab -all -apk -system -obb

Befehlsreferenz: https://developer.android.com/studio/command-line/adb.html#issuingcommands

Fortschritt anzeigen:
> sudo /opt/platform-tools/adb logcat | grep BackupManagerService

Restore

sudo /opt/platform-tools/adb restore -f /home/username/backup.ab

Häufige Fehler:

Java 9 Installiert:

> sudo /opt/tools/bin/sdkmanager

 Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
 at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156)
 at com.android.repository.api.SchemaModule.(SchemaModule.java:75)
 at com.android.sdklib.repository.AndroidSdkHandler.(AndroidSdkHandler.java:81)
 at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:117)
 at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93)
 Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:553)
 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:486)
 ... 5 more

Das Problem tritt auf, wenn Java 9 und höher installiert ist.

Lösung:

In Datei /opt/tools/bin/sdkmanager die letzte Zeile ändern:
Vorher:

exec "$JAVACMD" "$@"

Nachher:

exec "$JAVACMD" --add-modules java.xml.bind "$@"

Ubuntu adb installiert

Warum auch immer: Das Ubuntu adb, dass sich per apt-get installieren lässt funktioniert nicht.

Lösung: Commandline Tools direkt von Google installieren (Schritte 1&2)