路饭免费分享中心:android ASE开发 - lijun198456的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园 - Powered by X-Space

来源:百度文库 编辑:九乡新闻网 时间:2024/07/07 15:08:47
什么是ASE
Android Scripting Environment(ASE)是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,它会负责RunJsonRpcServer.这个Server非常重要,它负责监听以及和Script. PC Client端通信.那么这里有两个很重要的Thread, 第一是Thread 用于Listen Socket, 当Acceptsocket的时候,就会创建另一个线程去Connect to theClient.JsonPpcServer还有两个重要的函数,分别是StartPublic 和Start Local.StartPublic()建立Remote通信,远程通信主要是负责监听PC端的脚本;StartLocal()建立Local通信,本地通信的作用主要是用来:监听Android上解释执行的脚本.也就是说:无论本地还是远端的脚本都是通过JsonRpcServer来统一调用Android JAVA API的

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

AndroidProxy类中,还包含有notification和notificationmanager之类的东西.notification就是我们在运行ASE时startservice时,模拟器或者手机顶端的提示信息.这里包含了一个很重要的信息:IP和Port号.其中Port号就是Run ScriptsExternally 中的Remote的端口号.代码如下:adb forward tcp:tcp:

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

我们来看一下, ASE中Android.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中调用AndroidFacade就Okay了.

 

 

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

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

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

4.    在工程Common的src/com.googlecode.android_scripting.facade包在添加要扩展的API,java文件的内容如下:

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. toexecute 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、中间键APK;3、程序员编写的应用程序的APK。装完这三个APK后,直接点击应用程序的图标就可以运行软件。

 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lili1985516/archive/2010/10/22/5959258.aspx
android ASE开发 - lijun198456的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园 - Powered by X-Space Testlink 1.74/1.9 的 fckedit上传图片配置示例 - carol2000的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园 - 四个方面做好软件测试团队激励制度 - 51Testing软件测试网-中国软件测试人的精神家园 敏捷测试工程师的十条法则 - 51Testing软件测试网-中国软件测试人的精神家园 Windows 7 系统32位和64位区别 - 51Testing软件测试网-中国软件测试人的精神家园 测试方法总结 - babyloning的个人空间 - 51Testing软件测试网 51T... .NET程序员应该掌握的常用类库 - 51Testing软件测试网-中国软件测试人的精神家... 51Testing软件测试网:面向对象软件的测试22 3种类型的测试专家之路选择 - 架构师Jack的个人空间 - 51Testing软件测试网... 如何组建学习型测试团队 - 刘沛的测试空间 - 51Testing软件测试网 51Test... 51Testing软件测试网:TD中Case的复用 浏览器加载和渲染html的顺序 - 笑遍世界的测试技术 - 51Testing软件测试网 ... 测试用例的编写规范 - 大头 小葱拌豆腐 - 51Testing软件测试网 51Testi... Linux僵尸进程详解 - 笑遍世界的测试技术 - 51Testing软件测试网 51Te... XMPP客户端库资料 - MyTest - 51Testing软件测试网 51Testin... 软件测试的十六种测试类型 微软的软件测试方法 测试用例与输入数据的设计方法 - TEST8848软件测试技术门户网 软件测试时代Testage.net Penetration Testing 渗透测试 - Kevins的天空 - CSDNBlog Linux服务器测试 - TEST8848软件测试技术门户网 软件测试时代Testage.net 软件测试工具都有啥?常用的 探讨:如何提高软件测试的水平 嵌入式软件测试的十大秘诀 如何确定软件测试结束的标准