JS初识
为什么我会写这篇blog呢?这件事还是要从一个游戏说起。近日,新学期伊始。闲的没事干就随便下了一个游戏。游戏确实有意思但是有点单调,于是想能不能写个脚本来挂机。以前我也写过游戏脚本,在这方面还是有点经验。找了一会找到个开源的软件AutoJS。照葫芦画瓢的就把脚本写完了。之后我就开始思考,这个AutoJS是怎么实现的呢?于是就有了这篇文章。
基础知识和不需要过多关注的知识我就不说了可以自行Google或者看我的Blog。下面我会罗列一下预备知识。
- 什么是JS
- 什么是ES
- 解释型语言,编译语言和脚本语言
按照AutoJS的文档所说Auto.js使用JavaScript作为脚本语言,目前使用Rhino 1.7.7.2作为脚本引擎,支持ES5与部分ES6特性。这就引出了我们的第一个问题。什么是脚本引擎?
脚本引擎
脚本引擎,就是一个计算机编程语言的解释器,如用于建网站的asp、php等,它的功能是解释执行用户的程序文本,将它译成计算机能执行的机器代码,完成一系列的功能(摘自百度百科)。也就是说脚本引擎就是解释器。下面是常见的JS引擎。
- Rhino,由Mozilla基金会管理,开放源代码,完全以Java编写。
- SpiderMonkey,第一款JavaScript引擎,早期用于Netscape Navigator,现时用于Mozilla Firefox。
- V8,开放源代码,由Google丹麦开发,是Google Chrome的一部分。C++开发
- JavaScriptCore,开放源代码,用于Safari。
解释了这些东西我们大概可以搞懂了AutoJS的原理了。首先它是一个安卓应用,所以它是由Java开发的,要使AutoJS有处理脚本语言的功能所以加入了由Java开发的Rhino。整个项目应该分为2个部分,第一个是应用的框架,像是图像界面啊之类的;另一部分是AutoJS的核心即基于Rhino,解析js脚本并调用Java函数的部分。
其实到这就差不多了,还有一个重要概念就是runtime这个由于我写这篇博客时已经是深夜了,我就不阐述了。感兴趣的同学可以看这篇博客