現在、携帯電話で実行しているHIDドライバーにデータを書き込もうとしています。シェルで(adbを介して)次のコマンドを実行するecho -e \\x00\\x00\\x07\\x04\\x00\\x00\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0
と、デバイスに接続されているコンピューター(この場合はda)に正しい文字が入力されます。ただし、Androidアプリケーションで同じコマンドを送信した場合は
Runtime shell = Runtime.getRuntime();
Process p = shell.exec("su");
DataOutputStream out = new DataOutputStream(p.getOutputStream());
out.writeBytes("echo -e \\x00\\x00\\x07\\x04\\x00\\x00\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0\n");
2つの一重引用符が印刷されますが、それ以外は何も印刷されません。ルートでのみアクセスできる場所にファイルを書き込むことで、アプリがルート特権を取得していることを証明しました。
では、なぜこのようなコマンドは、プロセスクラスをスローしたのと同じようにシェルで動作しないのでしょうか。また、デバイスドライバーにデータを送信する方法について誰か提案がありますか?
ありがとうエイドリアン
PS私も試しshell.exec("echo -e \\x00\\x00\\x07\\x04\\x16\\x06\\x00 > /dev/hidg0 && echo -e \\x00\\x00\\x00\\x00\\x00\\x00\\x00 > /dev/hidg0");
ましたが、これでは何も得られません