Shellを使ってADBコマンドを呼び出して画面をクリックします.

2653 ワード

1.背景
一番上の人は最近いくつかのものを捕まえる必要があります.(具体的には詳しくは言えません.)そして必要な一番重要な点は他のAPPの指定位置をクリックすることに帰結します.インターネットでAndroidボタンのシミュレーションを検索します.多くの方法を使ってもよくないです.最後にADBを使ってデバッグする方案をロックして、携帯にボタンイベントを送ります.ちょうど前にRoot権限の下で、JavaでAndroidの下のLinux Shellを呼び出して、pm命令を実行して、Shellを使ってADB命令を呼び出します.Javaを使ってRuntime.getRuntime().exec("su").getOutputStream()を実行して、Root権限を持つProcessの出力対象を取得しました.文字列を書き込むと、Root権限がShellによって実行されます.ADBシミュレーションボタンの命令は、「input kevent Cokeybond Cokede CokeyCoked」です.キーコードはキーのキーで、例えばKeyEvent.KEY CODE_VOLUME.UPはボリュームアップを表します.タッチパネルやマウスイベントは、対応するADBコマンドを呼び出すだけでいいです.しかし、反応速度が非常に遅く、特に複数のボタンを連続的にアナログすると、フリーズするという問題があります.ボタンの精霊はかなり流暢に運行しています.キーの精霊はどうやって実現されるのか気になります.そしてついに原因を見つけました.アナログボタンは毎回Runtime.getRuntime().exec(ス)を呼び出すべきではありません.このコードを呼び出すたびにRuntimeのインスタンスを取得し、実行します.最初に一回だけ実行してOutputStreamのインスタンスを取得してから、各Shellコマンドを実行して、その中に該当する文字列を書き込むだけで速くなります.以下に利用可能なコードを貼り付けます.要求されたデバイスは、他の特別な権限や署名は必要ありません.ADB命令を使っていますので、互換性もあまり問題ありません.初めてプログラムを実行する場合は、Root権限を要求します.
/**
 *  root    Linux  Shell  
 * 
 */
public class RootShell {

    private OutputStream os;

    /**
     *   shell  
     * 
     * @param cmd
     *              
     */
    public final void exec(String cmd) {
        try {
            if (os == null) {
                os = Runtime.getRuntime().exec("su").getOutputStream();
            }
            os.write(cmd.getBytes());
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *         
     * 
     * @param keyCode
     *              
     */
    public final void simulateKey(int keyCode) {
        exec("input keyevent " + keyCode + "
"
); } }
その他の参考ブログアドレス1住所2
転載先:https://www.cnblogs.com/yasin27878/p/6480184.html