脚本语言(scripting language)是电脑程式语言,以简单的方式快速完成某些复杂的事情是脚本语言的重要原则,Android平台同样支持大部分脚本语言,我们可以通过ASE(android scriptingEnvironment)项目来完成使用脚本语言开发。
脚本可以访问多数的Android API,提供很多接口,通过接口我们可以完成以下功能:
- 操作 intents
- 启动 activitys
- 拨打电话
- 发送短信
- 扫描条形码
- 获取地理位置和传感器数据
- 使用 Text-To-Speech
等一系列操作。脚本可以在终端中交互地执行,或者作为后台service启动,也可以通过locale命令启动。但是脚本可以很方面的完成特殊操作,但是复杂的应用还是需要通过java实现,脚本语言知识android的一些插件,简化很多工作,为应用程序服务。
ASE是一个开源项目,我们可以在Google code上下载它的安装包,网址: ,可以选择下载安装包还是ASE的源码,下载下来的apk文件可以直接安装。安装完成后,点击应用图标启动ASE,此时启动之后是一片空白,我们需要按“Menu”键添加脚本环境和终端以及解释器等操作。
安装解释器:点击“Menu”,选择“Interpreter”,选择添加的脚本语言解释器,可以选择Lua,或者python等。当选择脚本解释器后,程序会自动从网站上下载并安装。
如何新建新的脚本程序:点击“Menu”,选择“Add Script”。然后弹出界面选择添加的脚本程序种类,然后写入脚本程序的名字及内容,选择“Save”或者“Save And Run”。
ASE是如何调用Android的API的?
ASE通过两种方式来访问API:
- JSON-RPC 如Python及Lua这样的本地应用
- 运行beanshell这个基于JVM的语言
对于beanshell这样的脚本语言,可以直接访问android的java API,处于简化的目的,ASE提供了AndroidFacade类,对于像Python这样的语言,API是通过使用JSON RPC调用在代理商暴露出来的。这意味着只有被AndroidFacade和AndroidProxy封装的那部分API才能被Python的交叉编译解释器使用,不过AndroidFacade和AndroidProxy都很容易扩展。AndroidFacade和AndroidProxy的源代码位于“com\google\ase”下。
下面共享两个脚本语言。
实现功能:当手机正面向下放置的时候禁用铃声。(Lua脚本)
require "android"--开启传感器android.startSensing()android.sleep(1)silent=falsewhile true do --获得传感器信息 s=android.readSensors() --取得传感器信息后判断是否正面朝下 facedown=s.resoult.zfroce and s.resoult.zforce>9 --如果正面朝下 if facedown and not silent then android.vibrate() --设置铃声静音模式 android.setRingerSilent(true) silent=true --如果正面朝上 elseif not facedown and silent then android.setRingerSilent(false) silent=false end android.sleep(1)end
如何用Python语言实现一个简易的聊天程序
import android,xmpp"""设置服务器、端口"""_SERVER='talk.google.com',5233class SayChat(object): def_init_(self): self.droid=android.Android() """取得输入的用户名和密码""" username=self.droid.getInput('Username')['result'] password=self.droid.getInput('Password')['result'] jid=xmpp.protocol.JID(username) self.client=xmpp.Client(jid.getDomain().debug=[]) """连接服务器""" self.client.connect(server=_SERVER) """注册回调""" self.client.RegisterHandler('message',self.message_cb) if not self.client: """连接失败""" print 'Connection failed!' return auth=self.client.auth(jid.getNode(),password,'botty') if not auth: print 'Authentication failed!' return self.client.sendInitPresence()def message_cb(self,session,message): jid=xmpp.protocol.JID(message.getForm()) username=jid.getNode() text=message.getBode() """通过TTS来实现语音对话""" self.droid.speak('%s say %s' %(username,text))def.run(self): try: while True: self.client.Process(1) except KeyboardInterrupt: pass saychat = SayChat()saychat.run()