Android Shell n'a pas la commande cp . Android Shell n'a pas non plus sed ou grep ou vi . Je n'ai pas de adb daemon disponible. Il y a mv command mais il refuse de fonctionner si la source est sur un périphérique en lecture seule.
La réponse la plus courante à cette question est simple: associez quelques applications (busybox?) À votre APK (en supposant que vous souhaitiez l’utiliser dans une application). Pour autant que je sache, la partition/data n'est pas montée noexec, et même si vous ne souhaitez pas déployer un fichier APK à part entière, vous pouvez modifier les sources ConnectBot pour créer un fichier APK avec un ensemble d'outils en ligne de commande.
Pour les outils de ligne de commande, je recommande d'utiliser crosstool-ng et de créer un ensemble d'outils liés de manière statique (liés à uClibc). Ils peuvent être gros, mais ils vont certainement travailler.
Pour copier des répertoires, il semble que vous pouvez utiliser adb pull <remote> <local>
si vous souhaitez copier un fichier/répertoire depuis un périphérique, et adb Push <local> <remote>
pour copier un fichier/répertoire vers un périphérique. Alternativement, pour copier un fichier, vous pouvez utiliser une astuce simple: cat source_file > dest_file
. Notez que cela ne fonctionne pas pour les chemins inaccessibles par l'utilisateur.
Pour éditer des fichiers, je n'ai pas trouvé de solution simple, mais quelques solutions de contournement possibles. Essayez this , il semble que vous puissiez (après l’installation) l’utiliser pour éditer des fichiers tels que busybox vi <filename>
. Nano semble être possible d'utiliser aussi.
Vous pouvez le faire sans autorisations root:
cat srcfile > /mnt/sdcard/dstfile
Vous pouvez utiliser cat > filename
pour utiliser une entrée standard pour écrire dans le fichier. À la fin, vous devez mettre EOF CTRL+D
.
Aussi, si l'objectif est uniquement d'accéder aux fichiers du téléphone. Il existe un explorateur de fichiers accessible depuis la perspective DDMS d'Eclipse. Il vous permet de copier un fichier depuis et vers le périphérique. Ainsi, vous pouvez toujours obtenir le fichier, le modifier et le remettre sur l'appareil. Bien sûr, cela permet d’accéder uniquement aux fichiers qui ne sont pas protégés en lecture.
Si vous ne voyez pas l'explorateur de fichiers, dans la perspective DDMS, allez dans "Fenêtre" -> "Afficher la vue" -> "Explorateur de fichiers".
Étant donné que la stratégie d’autorisation sur mon appareil est un peu paranoïaque (je ne peux pas utiliser les données de l’application adb pull
), j’ai écrit un script pour copier les fichiers de manière récursive.
Remarque: ce script de copie récursif de fichiers/dossiers est destiné à Android!
copie-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
Ici, je fournis la source d'une find
légère pour Android car cet utilitaire est manquant sur certains appareils. Au lieu de myfind
, vous pouvez utiliser find
, s'il est défini sur le périphérique.
Installation:
$ adb Push copy-r /sdcard/
En cours d'exécution dans adb Shell
(enraciné):
# . /sdcard/copy-r files/ /sdcard/files3
ou
# source /sdcard/copy-r files/ /sdcard/files3
(Le hash #
ci-dessus est l'invite su
, alors que .
est la commande qui force le shell à exécuter le fichier spécifié, presque identique à source
).
Après avoir copié, je peux adb pull
les fichiers de la carte SD.
Écrire des fichiers dans le répertoire de l'application était plus compliqué. J'ai essayé de définir des autorisations r/w sur files
et ses sous-répertoires. :
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();
}
dans l'application onCreate () .
PS juste au cas où quelqu'un aurait besoin du code pour déprotéger les répertoires de l'application afin de permettre l'accès adb Shell
sur un téléphone non root,
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);
}
}
bien que pour une raison inconnue, je sois capable de lire mais pas d’écrire.
Si vous avez un accès root, utilisez busybox ( google pour les instructions ).
Android prend en charge la commande dd.
dd if=/path/file of=/path/file
Je pourrais suggérer simplement d’installer Terminal-ide sur votre appareil disponible sur le marché du jeu . Il est gratuit, ne nécessite pas de racine et fournit un environnement pratique * nix comme cp, find, du, mc et de nombreux autres utilitaires installés sous une forme binaire par un clic de souris.
Si vous souhaitez simplement ajouter un fichier à un fichier, par exemple pour ajouter des lignes à un fichier de configuration, les commandes Shell intégrées suffisent:
adb Shell
cat >> /path/to/file <<EOF
some text to append
a second line of text to append
EOF
exit
Dans ce qui précède, remplacez /path/to/file
par le fichier que vous souhaitez modifier. Vous aurez besoin d'une autorisation en écriture sur le fichier, ce qui implique un accès root si vous modifiez un fichier système. Deuxièmement, remplacez some text to append
et a second line of text to append
par les lignes à ajouter.