Neulich musste ich ein Programm (welches es im PlayStore in dieser Version nicht mehr gibt und welches auch in F-Droid nicht vorhanden ist) von meinem Handy auf ein anderes übertregen.
"Geht ja nun irgendwie ganz einfach per Nearby Share" dachte ich mir, konnte dann aber letztendlich doch keine Möglichkeit finden, ein Programm per Nearby Share zu versenden.

Statt die nächsten zwei Stunden rumzusuchen und mich zu ärgern, war das Programm dann schneller per adb extrahiert und versendet.

In diesem Artikel beschreibe ich, wie man eine adb-Verbindung zwischen Computer und Handy herstellt.

Sind die adb-Binaries auf dem Computer installiert, kann man dort auf der Kommandozeile mit folgenden Befehlen die apk-Datei "herunterladen".

# Mit dem Handy verbinden (in dem Fall per WLAN-Verbindung)
adb connect 192.168.178.99:5555

# Alle installierten Programme auflisten
# Oder mit Hilfe von grep das Gesuchte (in meinem Fall das Fritz-Telefon-Programm)  
# direkt herauspicken
adb shell pm list packages
adb shell pm list packages | grep fritz

# Ausgabe z.B.
# package:de.avm.android.fritzapp

# Pfad zum Programm anzeigen
adb shell pm path de.avm.android.fritzapp

# Ausgabe z.B.
# package:/data/app/de.avm.android.fritzapp-lOy5gOTMNGAu_-3fp8PSDA==/base.apk

# apk-Datei auf den Computer (ins lokale Verzeichnis des Terminals) übertragen
adb pull /data/app/de.avm.android.fritzapp-lOy5gOTMNGAu_-3fp8PSDA==/base.apk

# Oder apk-Datei ins Download-Verzeichnis des Handies selbst kopieren
# (hatte bei mir nicht funktioniert)
adb shell
cp /data/app/de.avm.android.fritzapp-lOy5gOTMNGAu_-3fp8PSDA==/base.apk /sdcard/Download/fritzApp.apk
exit

# Verbindung wieder trennen
adb disconnect

Die so erhaltene apk-Datei kann nun auf ein anderes Handy kopiert und zur Installation des Programmes verwendet werden.

Skript

Um die Sache zu vereinfachen, habe ich ein Bash-Skript erstellt, welches hier heruntergeladen werden kann.

Bitte zuerst in der .sh-Datei den Pfad zur lokalen adb-Binary eintragen oder einfach nur adb eintragen, falls die Binary im $PATH ist.
Danach kann das Skript wie folgt verwendet werden (nachdem zuvor ein adb connect ausgeführt wurde):

./appextractor.sh <appname>

Es werden alle gefundenen Apps und Packages aufgelistet, die dann per Eingabe einer Nummer ausgewählt und im lokalen Terminal-Verzeichnis gespeichert werden.

./appextractor.sh sms

Bitte Nummer der gewünschten App eingeben. ctrl-C für Abbruch.
1) package:org.thoughtcrime.securesms
2) package:org.groebl.sms
#? 2

Bitte Nummer der gewünschten apk-Datei eingeben. ctrl-C für Abbruch.
1) package:/data/app/org.groebl.sms-e2uJiwyJ4-65Ogrveu9L5w==/base.apk
2) package:/data/app/org.groebl.sms-e2uJiwyJ4-65Ogrveu9L5w==/split_config.arm64_v8a.apk
3) package:/data/app/org.groebl.sms-e2uJiwyJ4-65Ogrveu9L5w==/split_config.de.apk
4) package:/data/app/org.groebl.sms-e2uJiwyJ4-65Ogrveu9L5w==/split_config.xxhdpi.apk
#? 4

Extrahiere /data/app/org.groebl.sms-e2uJiwyJ4-65Ogrveu9L5w==/split_config.xxhdpi.apk
nach /Users/apfelz/
942 KB/s (77366 bytes in 0.080s)
Fertig.