什么是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 跨进程通信(IPC)机制的探索与研究
  2. android八种通信方式
  3. 彻底理解android binder通信架构
  4. 【Android】17.5 利用Messenger实现进程间通信(IPC)
  5. android,handler实现两个线程通信
  6. Android优酷播放器SDK——Eclipse工程迁移Android Studio遇到问
  7. Android跨进程通信——Activity

随机推荐

  1. Android(安卓)软键盘弹出时布局位置改变
  2. This Android(安卓)SDK requires Android
  3. Android中设置控件可见与不可见
  4. Android的线程使用来更新UI----Thread、H
  5. Android(安卓)TTS学习--使用中文语音
  6. Android笔试的一部分知识点
  7. Relativelayout
  8. Android(安卓)开发入门问题集:启动模拟器
  9. Android之子线程更新UI
  10. android GridView item中组件获取焦点