Android中间键开发

什么是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还有两个重要的函数,分别是StartPublic Start 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: tcp:

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文件的内容如下:

public class YOURAPIFacade extends RpcReceiver {

  private final TriggerRepository mTriggerRepository;

 

  public YOURAPIFacade(FacadeManager manager) {

    super(manager);

    mTriggerRepository = manager.getTriggerRepository();

  }

 

  @Rpc(description = "your descrpt")

  public void yourenvent(

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

    

  }

 

  @Override

  public void shutdown() {

  }

}


 

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后,直接点击应用程序的图标就可以运行软件。

你可能感兴趣的:(android,脚本,manager,scripting,socket,java)