Die Android Shell verfügt nicht über den Befehl cp . Android Shell hat auch keine sed oder grep oder vi . Ich habe keinen adb daemon verfügbar. Es gibt den Befehl mv , der jedoch nicht funktioniert, wenn sich die Quelle auf einem schreibgeschützten Gerät befindet.
Die häufigste Antwort darauf ist einfach: Bündeln Sie einige Apps (busybox?) Mit Ihrem APK (vorausgesetzt, Sie möchten es in einer Anwendung verwenden). Soweit ich weiß, ist die/data-Partition noexec nicht gemountet. Selbst wenn Sie keine vollwertige APK bereitstellen möchten, können Sie die ConnectBot-Quellen so ändern, dass eine APK mit einer Reihe von Befehlszeilentools erstellt wird.
Für Befehlszeilentools empfehle ich die Verwendung von crosstool-ng und das Erstellen eines Satzes von statisch verknüpften Tools (verbunden mit uClibc). Sie sind vielleicht groß, aber sie werden definitiv funktionieren.
Um Verzeichnisse zu kopieren, können Sie anscheinend adb pull <remote> <local>
verwenden, wenn Sie Datei/Verzeichnisverzeichnis von Gerät kopieren möchten, und adb Push <local> <remote>
, um Datei/Verzeichnisverzeichnis auf Gerät zu kopieren. Um eine Datei zu kopieren, können Sie alternativ einen einfachen Trick verwenden: cat source_file > dest_file
. Beachten Sie, dass dies nicht für von Benutzern nicht zugängliche Pfade funktioniert.
Zum Bearbeiten von Dateien habe ich keine einfache Lösung gefunden, sondern nur einige mögliche Problemumgehungen. Versuchen Sie es mit this , es scheint, dass Sie (nach dem Setup) Dateien wie busybox vi <filename>
bearbeiten können. Nano scheint auch kann verwendet werden .
Sie können dies auch ohne Root-Berechtigungen tun:
cat srcfile > /mnt/sdcard/dstfile
Sie können cat > filename
verwenden, um die Standardeingabe zum Schreiben in die Datei zu verwenden. Am Ende müssen Sie EOF CTRL+D
eingeben.
Auch wenn das Ziel ist, nur auf die Dateien auf dem Telefon zuzugreifen. Es gibt einen Datei-Explorer, auf den aus der Eclipse-DDMS-Perspektive zugegriffen werden kann. Damit können Sie Dateien vom und zum Gerät kopieren. So können Sie die Datei jederzeit abrufen, ändern und wieder auf dem Gerät ablegen. Natürlich kann nur auf die Dateien zugegriffen werden, die nicht gelesen werden.
Wenn Sie den Datei-Explorer nicht sehen, gehen Sie aus der DDMS-Perspektive in "Fenster" -> "Ansicht" -> "Datei-Explorer".
Da die Berechtigungsrichtlinie auf meinem Gerät etwas paranoid ist (Anwendungsdaten können nicht adb pull
), habe ich ein Skript geschrieben, um Dateien rekursiv zu kopieren.
Hinweis: Dieses rekursive Skript zum Kopieren von Dateien/Ordnern ist für Android bestimmt!
copy-r :
#! /system/bin/sh
src="$1"
dst="$2"
dir0=`pwd`
myfind() {
local fpath=$1
if [ -e "$fpath" ]
then
echo $fpath
if [ -d "$fpath" ]
then
for fn in $fpath/*
do
myfind $fn
done
fi
else
: echo "$fpath not found"
fi
}
if [ ! -z "$dst" ]
then
if [ -d "$src" ]
then
echo 'the source is a directory'
mkdir -p $dst
if [[ "$dst" = /* ]]
then
: # Absolute path
else
# Relative path
dst=`pwd`/$dst
fi
cd $src
echo "COPYING files and directories from `pwd`"
for fn in $(myfind .)
do
if [ -d $fn ]
then
echo "DIR $dst/$fn"
mkdir -p $dst/$fn
else
echo "FILE $dst/$fn"
cat $fn >$dst/$fn
fi
done
echo "DONE"
cd $dir0
Elif [ -f "$src" ]
then
echo 'the source is a file'
srcn="${src##*/}"
if [ -z "$srcn" ]
then
srcn="$src"
fi
if [[ "$dst" = */ ]]
then
mkdir -p $dst
echo "copying $src" '->' "$dst/$srcn"
cat $src >$dst/$srcn
Elif [ -d "$dst" ]
then
echo "copying $src" '->' "$dst/$srcn"
cat $src >$dst/$srcn
else
dstdir=${dst%/*}
if [ ! -z "$dstdir" ]
then
mkdir -p $dstdir
fi
echo "copying $src" '->' "$dst"
cat $src >$dst
fi
else
echo "$src is neither a file nor a directory"
fi
else
echo "Use: copy-r src-dir dst-dir"
echo "Use: copy-r src-file existing-dst-dir"
echo "Use: copy-r src-file dst-dir/"
echo "Use: copy-r src-file dst-file"
fi
Hier gebe ich die Quelle einer leichtgewichtigen find
für Android an, da auf einigen Geräten dieses Dienstprogramm fehlt. Anstelle von myfind
kann find
verwendet werden, wenn es auf dem Gerät definiert ist.
Installation:
$ adb Push copy-r /sdcard/
Läuft innerhalb von adb Shell
(gerootet):
# . /sdcard/copy-r files/ /sdcard/files3
oder
# source /sdcard/copy-r files/ /sdcard/files3
(Der Hashcode #
oben ist die Eingabeaufforderung su
, während .
der Befehl ist, der die Shell dazu veranlasst, die angegebene Datei auszuführen, fast genauso wie source
).
Nach dem Kopieren kann ich die Dateien von der SD-Karte adb pull
.
Das Schreiben von Dateien in das App-Verzeichnis war schwieriger. Ich habe versucht, für files
und seine Unterverzeichnisse r/w-Berechtigungen zu setzen. Es funktionierte nicht (gut, ich konnte lesen, aber nicht schreiben, was seltsam ist), also musste ich das tun :
String[] cmdline = { "sh", "-c", "source /sdcard/copy-r /sdcard/files4 /data/data/com.example.myapp/files" };
try {
Runtime.getRuntime().exec(cmdline);
} catch (IOException e) {
e.printStackTrace();
}
in der Anwendung onCreate () .
PS nur für den Fall, dass jemand den Code zum Aufheben des Schutzes der Anwendungsverzeichnisse benötigt, um den Zugriff auf adb Shell
auf einem nicht gerooteten Telefon zu ermöglichen.
setRW(appContext.getFilesDir().getParentFile());
public static void setRW(File... files) {
for (File file : files) {
if (file.isDirectory()) {
setRW(file.listFiles()); // Calls same method again.
} else {
}
file.setReadable(true, false);
file.setWritable(true, false);
}
}
obwohl ich aus unbekannten Gründen lesen konnte, aber nicht schreiben konnte.
Wenn Sie über Root-Zugriff verfügen, installieren Sie busybox ( google für Anweisungen ).
Android unterstützt den Befehl dd.
dd if=/path/file of=/path/file
Ich könnte vorschlagen, einfach Terminal-ide auf Ihrem Gerät die verfügbaren im Spielemarkt zu installieren. Es ist kostenlos, erfordert kein Root-Verzeichnis und bietet eine komfortable * nix-Umgebung wie cp, find, du, mc und viele andere Dienstprogramme, die in binärer Form mit einem einzigen Tastendruck installiert werden.
Ich habe versucht, auf Mac zu folgen.
/Library/Android/sdk/platform-tools
../adb status
. "./"
soll "adb" vorangestellt werden.adb Shell
überprüfen. Verwenden Sie den Befehl ./adb Shell
, um eine Adb-Shell einzugeben. Jetzt haben wir mit Shell Zugriff auf den Ordner des Geräts.ls -la
auflisten./sdcard
in unserem Gerät. (Sie können hier jeden Ordner auswählen.) Angenommen, mein Ziel ist /sdcard/3233-3453/DCIM/Videos
und die Quelle ist ~/Documents/Videos/film.mp4
../adb exit
./adb Push [source location] [destination location]
./adb Push ~/Documents/Videos/film.mp4 /sdcard/3233-3453/DCIM/Videos
Wenn Sie nur eine Datei anhängen möchten, z. Um einer Konfigurationsdatei einige Zeilen hinzuzufügen, reichen integrierte Shell-Befehle aus:
adb Shell
cat >> /path/to/file <<EOF
some text to append
a second line of text to append
EOF
exit
Ersetzen Sie oben /path/to/file
durch die Datei, die Sie bearbeiten möchten. Sie benötigen Schreibrechte für die Datei, was Root-Zugriff impliziert, wenn Sie eine Systemdatei bearbeiten. Zweitens ersetzen Sie some text to append
und a second line of text to append
durch die Zeilen, die Sie hinzufügen möchten.