我正在尝试开发一个 android 应用程序,它在(另一个后台运行的应用程序的)webview 中读取加载的 HTML 内容。
从 chrome 远程调试 中得到灵感,它将特定端口中的 tcp 连接转发到 UNIX Domain socket
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: Broken pipe
关于这个问题的任何想法。
有没有其他更简单的方法来完成这个?
最佳答案
我假设,您正在尝试从在同一设备上运行的应用程序连接到远程网络调试套接字?这只有在您的应用程序以“root”或“shell”用户身份运行,或者如果它使用与您连接的应用程序相同的 key 签名时才有可能,请参阅 the code .
解决此问题后,您需要遵守 DevTools 远程调试协议(protocol)才能获取页面的 HTML 内容,请参阅 the list of existing remote debugging clients and libraries .
关于android - Android中的进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641618/