web-dev-qa-db-ja.com

ADBを介してrootとしてスクリプトを起動します

Androidシステム。パーティションをマウントするスクリプトを作成しました。Androidの/ binフォルダーにinstall.shとしてスクリプトを保存しました。

ADBからスクリプトを呼び出します。ADB自体はWindowsのバッチファイルから呼び出されますが、rootとして実行する必要があります。

私が試した最初の解決策は、を使用してスクリプトを呼び出すことでした

adb Shell "su -c sh /bin/script.sh"

ただし、ルートアクセス権を使用してシェルにアクセスできるため機能しませんが、何も実行されません。私も電話しようとしました

adb root "sh /bin/script.sh"

しかし、私は次のエラーを受け取りました

adbd cannot run as root in production builds

それから私は書いてみました

su -c "command"

スクリプトでルートアクセスを必要とするすべてのコマンドに対して、同じ問題があります。スクリプトを実行すると、ルートシェルのみが取得され、何も実行されません。

最初の解決策を手動で使用する場合(たとえば、adb Shell suを呼び出してからスクリプトを呼び出す)、それは機能します。ただし、プロセス全体を自動化して、adbシェルを別のスクリプトから呼び出すことができます。

どうやってこれを達成できるかご存知ですか?

ありがとう!

24
ErGo_404

これは私のために働く:

Myscript.batを作成して、そこに配置します(スーパーユーザーモードで実行されるコマンドを囲む一重引用符に注意してください)。

adb Shell "su -c 'command1; command2; command3'"

次に、DOSシェルからmyscript.batを実行します。

注:この状況ではDOS行継続文字(^)が機能するようには見えません。言い換えれば、以下は私にとってはうまくいきません:

adb Shell "su -c '^
command1; ^
command2; ^
command3'"

これにより、「構文エラー:終了した引用符付き文字列」が発生します

57
Andy Dennie

これは動作します:

adb Shell echo command which needs root privileges \| su

リダイレクトが必要な場合:

adb Shell echo 'echo anytext > /data/data/aforbiddenfolder/file' \| su

ローカルファイルをAndroid root権限が必要なパスにコピー)する場合(ただし、alocalfile 必須ではない含む'):

cat alocalfile | adb Shell echo "echo '`cat`' > /data/data/aforbiddenfolder/file" \| su

より良い方法があれば(-cを持たないsuバージョンでも)、興味があります。

3
rom1v

これは私のために働く:

adb Shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap"
2

ただし、ルートアクセス権を使用してシェルにアクセスできるため機能しませんが、何も実行されません。

ルート権限が与えられていることをどのように知っていますか?デバイスでスクリプトを実行しようとしていると思いますか?デバイスはルート化されていますか?

Chmodを介してファイルに実行権限を付与する必要がある場合があります。

chmod ugo=rwx /bin/script.sh
0
DavidDraughn

-c引数を受け入れないsuの非常に単純なバージョンを使用していたようです。動作した別のsuをコピーしました。 AndyDは完全に正しいので、私の代わりに彼の答えを受け入れています:)

0
ErGo_404

解決策を提供したか、より良い解決策を求めたかどうかはわかりません。私はこの方法に従って、adbに送信されるバッチモードで約200のコマ​​ンドを実行したかった

    adb Shell "su -c command ; "
adb Shell "su -c command ; "
adb Shell "su -c command ; "
adb Shell "su -c command ; "

バッチファイルに保存しました

このコマンド

adb Shell "su -c 'command1; command2; command3'"

特定の最大サイズを超えると動作しません。うまく行かなかった

error: service name too long
0
user1874594