以编程方式为adb网络管理启用端口5555

时间:2016-10-26 12:10:43

标签: java android

我想知道如何在android上启用端口5555 for daemon adb?基本上,我一直在用旧路由器建立一个家庭网络,这样我就可以保持所有设备的连接。但问题在于:我不希望每次都能连接到USB以启用这些端口,这会破坏整个目的。

我想知道如何通过点击按钮以编程方式使用Java甚至JNI转发端口?我见过telnetd应用程序。所以我想自己做。我该如何实现这一目标?我试过一个函数,这里是:

public void openPort()
    {
        try 
        {
            java.lang.Process process = Runtime.getRuntime().exec("setprop service.adb.tcp.port 5555");
            int exitCode = process.waitFor();
            if (exitCode != 0) 
            {
                throw new java.io.IOException("Command exited with " + exitCode);
            }
            Runtime.getRuntime().exec("adb tcpip 5555");
            Toast.makeText(this, "Listening on port "+ port + "...", Toast.LENGTH_LONG).show();
        } 
        catch (Exception ex) 
        {
            ex.printStackTrace();
            Toast.makeText(this, "An error has occurred: " + ex, Toast.LENGTH_LONG).show();
            port++;
            openPort();
        }
    }

现在它永远不会到达异常,它说在端口上打开,但是当我通过网络连接它时它不起作用。那我怎么能这样做呢?

请注意,应用程序已移至使用幸运修补程序的系统应用程序,因此它是一个系统应用程序。如果那很重要。

2 个答案:

答案 0 :(得分:2)

(代表OP发布解决方案)

注意:需要Root。

我把它改了一下。它现在有效:

public void openPort()
{
    try 
    {
        String cmds[] = {
            "setprop service.adb.tcp.port 2222",
            "stop adbd",
            "start adbd"
        };
        for (int i = 0; i < cmds.length; i++)
        {
            java.lang.Process process = Runtime.getRuntime().exec(cmds[i]);
            int exitCode = process.waitFor();
            if (exitCode != 0) 
            {
                throw new java.io.IOException("Command exited with " + exitCode);
            }
        }
        Toast.makeText(this, "Listening on port 2222...", Toast.LENGTH_LONG).show();
    } 
    catch (Exception ex) 
    {
        ex.printStackTrace();
        Toast.makeText(this, "An error has occurred: " + ex, Toast.LENGTH_LONG).show();
        openPort();
    }
}

答案 1 :(得分:0)

我编写了一个简单的类来从App

执行Shell命令

https://gist.github.com/ricardojlrufino/61dbc1e9a8120862791e71287b17fef8

<强>命令对应的
String return = Shell.execForResult(“ls”);

<强>脚本
Shell.execScript(res.openRawResource(R.raw.cpu_script));

启动ADB
Shell.startADB(5555);