什么是ASE

Android Scripting EnvironmentASE)是Google针对Android操作系统发布的一个小工具。ASE将脚本语言带入Android,允许用户编辑和执行脚本,直接在Android设备上运行交互式解释器。脚本将能大幅度简化任务界面,目前支持Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl, shell,以后将会增加更多的语言的支持。

从此可以直接通过脚本(解释语言)方便快捷的调用Android系统中大部分的API,其可以完全满足对那些想把手机功能发挥到极致的生物。根据官方发布的消息,其可以通过非常简便的接口快速实现以下功能:

Handle Intents

启动Activities

发送通话请求

发送文字信息

扫描条形码

获取地理信息和返回设备传感器状态信息

使用语音输出文字信息

ASE提供的API可以参考官方文档(http://code.google.com/p/android-scripting/wiki/ApiReference


三、ASE原理

ASE其实就是Client端和Server端用JSON去通信. Server端是Android的那一套了,Java通过JNI调用C/C++.

Server原理:

首先,建立AndroidProxy Service,它会负责Run JsonRpcServer.这个Server非常重要,它负责监听以及和Script PC Client端通信.那么这里有两个很重要的Thread,第一是Thread用于Listen Socket,Accept socket的时候,就会创建另一个线程去Connect to the Client.JsonPpcServer还有两个重要的函数,分别是StartPublicStart Local. StartPublic()建立Remote通信,远程通信主要是负责监听PC端的脚本;StartLocal()建立Local通信,本地通信的作用主要是用来:监听Android上解释执行的脚本.也就是说:无论本地还是远端的脚本都是通过JsonRpcServer来统一调用Android JAVA API

AndroidProxyService含有AndroidProxy.这个类的主要作用就是负责调用AndroidFacade类中,封装好了的,提供给Script调用的函数.
也就是说干活的代码这这里(当然,底层才是真正的工作的代码,但是我们在这里这么理解他).

AndroidProxy类中,还包含有notificationnotification manager之类的东西.notification就是我们在运行ASEstart service,模拟器或者手机顶端的提示信息.这里包含了一个很重要的信息:IPPort.其中Port号就是Run Scripts Externally中的Remote的端口号.代码如下:adb forward tcp:<local_port> tcp:<remote_port>

local port超过1024就可以了, remote port就是notification中的port.
当然,还有一步也是一定要做的:export AP_PORT local_port

我们来看一下, ASEAndroid.py的源代码,

PORT = os.environ.get('AP_PORT')
class Android(object):
def __init__(self, addr=None):
if addr is None:
addr = 'localhost', PORT
self.conn = socket.create_connection(addr)
self.client = self.conn.makefile()
self.id = 0

可以看到第一句话就是从:系统中拿到AP_PORT环境变量,为以后建立socket打下基础.
好像,讲的离题了点.继续,JsonRpcServer.
在这个类中,有很重要的一个方法:

private JSONObject dispatch(int id, String methodName, JSONArray params) throws JSONException {
JSONObject result;
try {
Method m = mReceiver.getClass().getMethod(methodName, new Class[] { JSONArray.class });
if (m.isAnnotationPresent(Rpc.class)) {
result = (JSONObject) m.invoke(mReceiver, new Object[] { params });
} else {
throw new Exception();
}
...

这里就是会Call AndroidFacade中函数的地方了.
所以,理论上,我们只要扩展AndroidFacade中的函数,然后,AndroidProxy中调用AndroidFacadeOkay.


四、怎样在ASE的基础上开发ANDROID手机中间键软件

下载adnroidSDK

下载ASE的源代码,下载地址是:http://code.google.com/p/android-scripting/source/checkout

3.Eclipse里面导入源文件中所有的工程

4.在工程Commonsrc/com.googlecode.android_scripting.facade包在添加要扩展的APIjava文件的内容如下:

publicclassYOURAPIFacadeextendsRpcReceiver {

privatefinalTriggerRepositorymTriggerRepository;

publicYOURAPIFacade(FacadeManager manager) {

super(manager);

mTriggerRepository= manager.getTriggerRepository();

}

@Rpc(description ="your descrpt")

publicvoidyourenvent(

@RpcParameter(name ="script", description ="The path to a script to execute when the ringer mode changes.")yourParameterTypescript …) {

}

@Override

publicvoidshutdown() {

}

}


5.修改ScriptingLayer工程下src/ com.googlecode.android_scripting.facade包下的FacadeConfiguration.java文件,把刚才添加的java文件名加到这个java文件中:sFacadeClassList.add(YOURFacade.class);

6.编译ScriptingLayerForAndroid工程,安装APK到目标机器上。

五、程序员怎么在中间键的基础上开发自已的程序

作为一个程序员有多种方法可以建立自已的工作并生成APK

一)使用eclipseIDE来建立工程:

1.下载脚本的模板工程,并把工程导入到eclipse中。

2.重命名模板工程名和包名:com.dummy.fooforandroid -> your_package_name,如果你修改了包名,那么要在AndroidManifest.xml里面同步package="your_package_name"

3.res/raw包里编写你的脚本文件,并修改src/ com.dummy.fooforandroid包中的script.java这个类,修改为public final static int ID = R.raw.YOURscript;

4.AndroidManifest.xml里面申明你在脚本中用到的所有权限。

5.编译,打包。

(二)使用ant来生成APK,祥见http://code.google.com/p/android-scripting/wiki/SharingScripts


六、用户怎么使用应用程序

用户要运行使用脚本编写的程序,需要安装:1、脚本解释器(这里使用LUA解释器,下载地址是http://code.google.com/p/android-scripting/downloads/list);2、中间键APK3、程序员编写的应用程序的APK。装完这三个APK后,直接点击应用程序的图标就可以运行软件。

更多相关文章

  1. android:configChanges属性
  2. 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEve
  3. 转:基于 Android(安卓)NDK 的学习之旅----- C调用Java(附源码)
  4. Android单元测试
  5. Android(安卓)Uevent 分析,从kernel到framework
  6. 探究Android异步消息的处理之Handler详解
  7. 如何获取android源代码
  8. Android(安卓)WebView系列文章2-WebView和js交互
  9. Android(安卓)MediaPlayer学习笔记

随机推荐

  1. SQLite一次性读取过多记录会造成内存溢出
  2. Android(安卓)Widget开发
  3. Material Design主题
  4. 前端 js 判断设备类型是手机还是PC 并打
  5. Android2.2 API 中文文档系列(2) —— Edit
  6. Android 开发网站网址
  7. Android:CountDownTimer 实现倒计时功能
  8. Android的Audio系统详解
  9. Android 6.0 去掉锁屏
  10. Android小项目之底部导航(RadioButton&Fr