安卓模拟器看不到js的log

JavaScript014

安卓模拟器看不到js的log,第1张

可以使用Chrome浏览器的远程调试功能,连接Android模拟器,就可以在Chrome浏览器上看到js的log。

步骤如下:

1. 打开Android模拟器,并启动你要debug的app。

2. 在Android模拟器上,设置“开发者选项”里的“USB 调试”。

3. 将模拟器和电脑连接在一起,用USB线。

4. 在Chrome浏览器中,访问“chrome://inspect”。

5. 选择“Devices”,可以看到你的Android模拟器,并可以点击它,进行远程调试。

6. 通过远程调试,可以在Chrome浏览器上看到js的log,以及更详细的debug信息。

1. 基于Nodejs内建的调试器

Nodejs提供了一个内建调试器来帮助开发者调试应用程序。想要开启调试器我们需要在代码中加入debugger标签,当Nodejs执行到debugger标签时会自动暂停(debugger标签相当于在代码中开启一个断点)。代码如下:

var path = url.parse(req.url).pathname

debugger

res.writeHead(200, {'Content-Type': 'text/plain'})

执行命令:node debug example.js 就可以进入调试模式。

在debug模式下,可以使用内建命令如repl去评估变量和表达式的值(如2所示)。我们也可以通过help命令来获取完整的调试命令列表。

Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), setBreakpoint (sb), clearBreakpoint (cb),

watch, unwatch, watchers, repl, restart, kill, list, scripts, breakpoints, version

2. 基于V8插件的调试器

Nodejs是基于google V8的引擎上构建的,Google为Eclipse提供了一个对应的调试插件。关于如何在Eclipse中安装和调试Nodejs程序就不再重复描述了。唯一要注意的是在默认情况下V8引擎支持的调试模式是本地模式。如果想要开启远程调试的话,我们需要修改Nodejs中的V8源文件:/deps/v8/src/platform-posix.cc

addr.sin_family = AF_INET

addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK)-->INADDR_ANY

addr.sin_port = htons(port)

然后重新编译Nodejs。

提示:

用插件来调试nodejs程序,你有时候会遇到什么connect refuse, get version failed等等错误。那么请注意你使用的ip的地址, 一般下127.0.0.1的回环地址是都工作的。如果你使用真实的ip地址,请检查防火墙设置。

3. 基于Chrome浏览器的调试器

既然我们可以通过V8的调试插件来调试,那是否也可以借用Chrome浏览器的JavaScript调试器来调试呢?node-inspector模块提供了这样一种可能。我们需要先通过npm来安装node-inspector

npm install -g node-inspector // -g 导入安装路径到环境变量

node-inspector是通过websocket方式来转向debug输入输出的。因此,我们在调试前要先启动node-inspector来监听Nodejs的debug调试端口。

默认情况下node-inspector的端口是8080,可以通过参数--web-port=[port]来设置端口。在启动node-inpspector之后,我们可以通过--debug或--debug-brk来启动nodejs程序。通过在浏览器输入http://[ip address]:8080/debug?port=5858,我们会得到如下的调试窗口:

这三种方法各自有优缺点,我个人比较欣赏node-inspector的方式。

通过本地的webview打开脚本页面。

调用步骤

1、设置webview支持脚本

webSettings.setJavaScriptEnabled(true)2、打开脚本页面

mWebView.loadUrl("file:///android_asset/demo.html")//这里打开该app的asset目录下的demo.html,里面含有wave函数脚本3、调用脚本

mWebView.loadUrl("javascript:wave()")//调用打开页面中的wave函数