Android

时间:2015-06-04 10:38:18

标签: android sockets tcp webview

我正在尝试开发一个Android应用程序,用于在 webview (另一个运行应用程序的后台)中读取已加载的 HTML内容

chrome远程调试获取想法,它将特定端口中的 tcp 连接转发到 UNIX域套接字

  

adb forward tcp:9222 localabstract:webview_devtools_remote _" process_id"

我尝试使用 LocalSocket 作为

webview_devtools_remote_pid 套接字进行通信
    //https://developer.chrome.com/devtools/docs/protocol/1.1/page#command-enable
    JSONObject jo = new JSONObject();
    jo.put("id", 1);
    jo.put("method", "Page.enable");
    LocalSocket s = new LocalSocket();
    try {
        s.connect(new LocalSocketAddress("webview_devtools_remote_<p_id>"));
        OutputStream oss = s.getOutputStream();
        oss.write(jo.toString().getBytes("utf-8"));
        InputStream iss = s.getInputStream();
        Integer i;
        String res = "";
        while((i = iss.read()) != -1) {
            res += i.toString();
        }
    } catch (Exception e) {
        Log.e("Error", e.toString());
    }

但每次都要通过对等重置连接。

编辑:有时会收到java.io.IOException:管道损坏

关于这个问题的任何想法。

还有其他更简单的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

我假设您正在尝试从同一设备上运行的应用程序连接到远程Web调试套接字?只有当您的应用以“root”或“shell”用户身份运行时,或者使用与您要连接的应用相同的密钥进行签名时,才能执行此操作,请参阅the code

解决此问题后,您需要遵守DevTools远程调试协议才能访问该页面的HTML内容,请参阅the list of existing remote debugging clients and libraries