Androidシェルにはcpコマンドがありません。 Androidシェルにもsedまたはgrepまたはviはありません。 adbデーモンが利用できません。 mvコマンドがありますが、ソースが読み取り専用デバイスにある場合は動作を拒否します。
最も一般的な答えは簡単です。APKにいくつかのアプリ(busybox?)をバンドルします(アプリケーション内で使用したい場合)。私の知る限り、/ dataパーティションはnoexecでマウントされていません。完全なAPKをデプロイしたくない場合でも、ConnectBotソースを変更して、一連のコマンドラインツールを含むAPKを構築できます。
コマンドラインツールの場合は、crosstool-ngを使用して、静的にリンクされたツールのセット(uClibcにリンク)を構築することをお勧めします。彼らは大きいかもしれませんが、彼らは間違いなく動作します。
ディレクトリをコピーするには、デバイスからファイル/ディレクトリをコピーする場合はadb pull <remote> <local>
を、デバイスにファイル/ディレクトリをコピーするにはadb Push <local> <remote>
を使用できるようです。または、ファイルをコピーするために、単純なトリックcat source_file > dest_file
を使用できます。これは、ユーザーがアクセスできないパスでは機能しないことに注意してください。
ファイルを編集するための簡単な解決策はなく、可能な回避策をいくつか見つけました。 this を試してください。(セットアップ後)busybox vi <filename>
などのファイルを編集するために使用できるようです。 Nanoは 使用可能 のようです。
ルート権限なしでそれを行うことができます:
cat srcfile > /mnt/sdcard/dstfile
cat > filename
を使用して、標準入力を使用してファイルに書き込むことができます。最後にEOF CTRL+D
を配置する必要があります。
また、目的が電話のファイルにのみアクセスすることである場合。 Eclipse DDMSパースペクティブからアクセス可能なファイルエクスプローラーがあります。デバイスとの間でファイルをコピーできます。そのため、いつでもファイルを取得して変更し、デバイスに戻すことができます。もちろん、読み取り保護されていないファイルにのみアクセスできます。
ファイルエクスプローラーが表示されない場合は、DDMSの観点から、[ウィンドウ]-> [ビューの表示]-> [ファイルエクスプローラー]に移動します。
デバイスのアクセス許可ポリシーは少し偏執的であるため(adb pull
アプリケーションデータは許可されません)、ファイルを再帰的にコピーするスクリプトを作成しました。
注:この再帰的なファイル/フォルダーコピースクリプトはAndroid向けです!
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
一部のデバイスではこのユーティリティが欠落しているため、ここでは、Androidの軽量find
のソースを提供します。デバイスで定義されている場合、myfind
の代わりにfind
を使用できます。
インストール:
$ adb Push copy-r /sdcard/
adb Shell
(ルート化)内で実行:
# . /sdcard/copy-r files/ /sdcard/files3
または
# source /sdcard/copy-r files/ /sdcard/files3
(上記のハッシュ#
はsu
プロンプトですが、.
はsource
とほぼ同じように、シェルに指定されたファイルを実行させるコマンドです)。
コピー後、SDカードからファイルをadb pull
できます。
アプリディレクトリへのファイルの書き込みは複雑で、files
とそのサブディレクトリにr/w権限を設定しようとしましたが、動作しませんでした(読み取りはできましたが、書き込みはできません)。私がしなければなりませんでした:
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();
}
アプリケーションのonCreate()で。
PSは、ルート化されていない電話でadb Shell
アクセスを有効にするためにアプリケーションのディレクトリの保護を解除するコードが必要な場合に備えて、
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);
}
}
何らかの不明な理由で、私は読むことはできましたが、書くことはできませんでした。
ルートアクセスインストールbusyboxがある場合( 手順についてはgoogle )。
Androidはddコマンドをサポートしています。
dd if=/path/file of=/path/file
Terminal-ide を利用可能なデバイスにインストールすることをお勧めします play market 。その無料のルートは不要で、cp、find、du、mcなどの便利な* nix環境と、ボタンを1回タップするだけでバイナリ形式でインストールされる他の多くのユーティリティを提供します。
Macでフォローしようとしました。
/Library/Android/sdk/platform-tools
にあります。./adb status
を使用してデバイスのステータスを確認します。 "./"
の先頭には「adb」が付きます。adb Shell
で確認できます。コマンド./adb Shell
を使用して、adbシェルに入ります。これで、シェルを使用してデバイスのフォルダーにアクセスできます。ls -la
を使用して、すべてのフォルダーを一覧表示できます。/sdcard
があります(ここで任意のフォルダーを選択できます)。宛先が/sdcard/3233-3453/DCIM/Videos
、ソースが~/Documents/Videos/film.mp4
であるとします./adb exit
./adb Push [source location] [destination location]
./adb Push ~/Documents/Videos/film.mp4 /sdcard/3233-3453/DCIM/Videos
ファイルに追加したいだけなら、例えば構成ファイルにいくつかの行を追加するには、組み込みのシェルコマンドで十分です。
adb Shell
cat >> /path/to/file <<EOF
some text to append
a second line of text to append
EOF
exit
上記で、/path/to/file
を編集するファイルに置き換えます。ファイルへの書き込み許可が必要です。これは、システムファイルを編集している場合はルートアクセスを意味します。次に、some text to append
とa second line of text to append
を追加する行に置き換えます。