Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1130823
  • 博文数量: 276
  • 博客积分: 8317
  • 博客等级: 少将
  • 技术积分: 2329
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-12 08:17
个人简介

http://ads.buzzcity.net/adpage.php?partnerid=40096

文章分类

全部博文(276)

文章存档

2013年(1)

2012年(38)

2011年(102)

2010年(85)

2009年(45)

2008年(5)

分类: 嵌入式

2009-10-31 12:12:17

在Android社群里,这几天讨论得最火热的主题不外乎是,以及刚刚和大家见面的Android Scripting Environment了。William手上没有iPhone 3GS和Palm Pre,美版的Magic虽然看起来不错(比较可靠的消息是他会有5百万像素摄像头,内存288MB,CPU是更省电、视频录制更强大的MSM7200A,似乎比欧洲已经开卖的Vodafone定制版Magic好出不少),不过手机硬件本身已经超出我的研究范围了,还是花点时间来看看动手玩一玩Android Scripting Environment吧。

ASE为Android系统带来了脚本语言的支持,通过它我们可以编辑和执行脚本,甚至和脚本解释器做出交互。脚本可以访问多数的Android API,有了这个大大简化了的接口,我们可以很方便的实现以下功能:

  • 操作Intents
  • 启动Activities
  • 拨打电话
  • 发送短信
  • 扫描
  • 获取地理位置和传感器数据
  • 使用(TTS)
  • 参考官方文档了解

脚本可以在终端中来交互地执行,或者作为后台Service启动,也可以通过来启动。当前支持的脚本语言包括Python、Lua和BeanShell,Ruby和JavaScript的支持已经在计划之中。你可能会问,为什么使用脚本而不是开发真正的Android应用呢?诚然,Android的开发环境非常易于使用,但是你必须在电脑前完成所有工作。而ASE则使您在任何您需要的情况下,快速的在设备上使用高级脚本语言尝试您的想法。

下面我们就在模拟器中动手玩一玩ASE吧

1、因为ASE目前还没有被上传到Market,所以首先我们它的安装包。

2、在命令行执行adb install ~/download/AndroidScriptingEnvironment-0.7-alpha.apk (假设下载来的ASE安装文件放在~/download目录)命令安装ASE。

3、点击ASE图标启动它,第一次启动的时候需要安装脚本解释器,大家会看到“Installing Python”, “Installing Lua”等提示,初始化完成以后,运行界面如下图所示:

4、按照Google介绍的ASE用法,这时我们可以单击脚本文件来执行它,或者长按列表中的脚本文件对它进行修改、删除、添加到桌面快捷方式等操作或者作为后台服务启动;另外也可以通过“Menu”菜单来新建脚本或者打开终端。

出现问题

在我尝试的过程中却发现单击列表中的脚本文件无法正常执行,一直显示黑屏。

于是我打开通过adb shell打开一个终端,并用logcat来观察ASE执行时的系统log,发现ASE启动时有报如下的错误:
……
V/InterpreterInstaller( 687): Installing bsh
V/InterpreterInstaller( 687): Extracting entry “res/raw/bsh.zip”.
E/InterpreterInstaller( 687): Reading entry res/raw/bsh.zip failed.
E/InterpreterInstaller( 687): Failed to extract entry.
E/InterpreterInstaller( 687): java.io.FileNotFoundException: /data/data/com.google.ase/bsh.zip
E/InterpreterInstaller( 687): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.j
ava:231)
……

提示读取res/raw/bsh.zip文件失败,我看了apk包的res/raw目录,还真没有bsh.zip文件(后来就觉得这不是根本的问题

接下来,当我尝试单击saytime.py运行它的时候,系统大约有1分钟左右没有任何反应,当我尝试Back键等操作的时候,就会出现”Sorry! Activity ASE(in applicaton ASE) is not responding”的错误,同时从logcat中可以看到ANR(application not responding)的记录被写入了/data/anr/traces.txt。

Force close以后,ASE被重新加载。

寻求解决办法

刚遇到这个问题的时候,我还是真有点怀疑是Google没有好好的测试ASE,漏掉了bsh.zip文件,但是想想ASE现在已经是0.7Alpha,Google Code上都已经有了3个版本的下载,这样的问题没有理由存在,于是我开始在里面来寻求解决办法。
果然, 和 都提到了和我一样的问题,矛头直指这个Android Emulator中的bug。当用户调用getSystemService(Context.SENSOR_SERVICE)时,系统会黑屏,而如果用户尝试对手机进行操作(比如按下“Menu”键),系统则将返回Application Not Responding错误。(这个问题事实上是1.5 SDK的已知问题,见Releasenotes中的Known Issues)

所以问题是看起来就是ASE中使用了会导致模拟器挂起的Sensor API,那么我们只要在ASE中禁用掉它理论上就可以使ASE能够在模拟器上正常运行,当然和Sensor相关的重力感应和罗盘功能肯定是不能工作的了(除了Ctrl+F12可以模拟重力感应相关的屏幕翻转,罗盘还真是很难在emulator中来模拟)。

动手解决

这里,请确保正确安装和配置Android 1.5 SDK和ADT了,并且在PC上安装有Python的解释器(Windows或者Linux平台均可)。

从SVN checkout最新的ASE代码,导入到Eclipse中,随后把lib目录下的TTS库加入项目的build path,会发现有android.os.Exec相关的几个类无法找到,这时ASE Wiki的中提到的fix_android_sdk.py脚本就派上用场了。该脚本可以帮助我们从Android源代码中编译出android.os.Exec的class文件,并添加到SDK的jar文件中,以解决ASE的编译问题。

这里需要注意的是,Wiki中提到需Android的源代码,事实上我们只需要有其中的frameworks/base就可以了,如果手上没有完整的代码的话,从Android Git版本库中下载一个的android-1.5r2这个tag的snapshot就行,大约35MB左右。下载完了以后把解出来的整个base目录放在android_source/frameworks/目录,然后根据wiki中的方法执行fix_android_sdk.py脚本成功以后,ASE项目的编译就OK了。

最后,注释掉AndroidFacade.java中和getSystemService(Context.SENSOR_SERVICE)、mSensorManager相关的代码,编译完成以后ASE就可以在模拟器中正常运行了。

阅读(656) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~