我正在尝试开发一个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:管道损坏
关于这个问题的任何想法。
还有其他更简单的方法来实现这个目标吗?
答案 0 :(得分:1)
我假设您正在尝试从同一设备上运行的应用程序连接到远程Web调试套接字?只有当您的应用以“root”或“shell”用户身份运行时,或者使用与您要连接的应用相同的密钥进行签名时,才能执行此操作,请参阅the code。
解决此问题后,您需要遵守DevTools远程调试协议才能访问该页面的HTML内容,请参阅the list of existing remote debugging clients and libraries。