SL4A是Script Layer for Android的缩写,在我个人看来,这是一个非常好的工具,它利用的了RPC(目前理解的还不深刻,请感兴趣的同学google一下想光的概念吧)的原理,使用其他语言调用android native的发法成为可能。
这里我不会讲原理性的知识,指示和大家交流一下如何在PC上调试python脚本,一步一步的了解SL4A. 因为本文纯粹基于个人理解写成,如果不对的地方还请参见官方的解释说明。
目前位置SL4A最全面的一本指导书是 Hi, "Pro Android Python with SL4A.epub" ,可以到我的微盘空间下载。http://vdisk.weibo.com/s/2JMuN,这本书是入门SL4A必须仔细读的(至少我这么认为)。
下面开始说说如何在PC上调试SL4A.
准备工作:
- 安装python,这个就不多说了。
- 手机上安装SL4A,到SL4A的主页下载最新的版本。http://code.google.com/p/android-scripting/
- SL4A的成功,可以理解为只安装了一个平台,还需要在手机上安装一个python的解释器。安装办法,启动SL4A,Menu->View->Interpreters,如果之前没有安装过解释器,列表中应该只有Shell一项,点击Menu->Add,在显示出来的列表中会有可供选择安装的解释器,选择后会自动进入下载安装的过程,这里我们选择Python 2.6.2.
- 安装成功后会在SD卡的根目录下生成一个文件夹,com.googlecode.pythonforandroid。这个目录下的extras目录下就是在android NDK下编译过的python版本。进入其中的python目录,将根木录下的android.py拷贝到PC的python安装路径下。
- 如果想在window是调试,请增加一个环境变量AP_PORT,其值为9999,ubuntu下执行export AP_PORT=9999即可。
- 在手机上启动远程调试的端口,目前版本的SL4A已经支持将端口设置在一个固定的端口上,在SL4A的Preferences选项中,设置Server Port为一个未占用的,例如‘42306’
- 在Menu->View->Interpreters->Menu中选择Start Server即可。
- 这一切准备之后还差最后的一步,将手机的端口和PC的端口映射上,执行命令adb forward tcp:9999 tcp:42306
ok, 现在就可以在PC端的python解释其中,一步一步的输入代码调试了。先来个最简单的吧。从hello world开始
import android
droid = android.Android()
droid.makeToast('Hello World')
如果在执行droid = android.Android()时报错,则很有可能是端口的转发设置有问题,请重新设置
>>> droid = android.Android()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "android.py", line 34, in __init__
self.conn = socket.create_connection(addr)
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -2] Name or service not known