如何从Android终端启动SL4A服务器并让QPython成功连接?
解决终端启动QPython无法连接SL4A的问题
当然可以手动启动SL4A服务器并搞定QPython的连接问题,我来给你一步步说清楚怎么操作:
1. 先让SL4A服务跑起来
最简单的方式是先打开QPython应用,随便运行一段调用androidhelper.Android()的小脚本——应用会自动拉起SL4A服务并让它在后台待着。嫌打开应用麻烦的话,也可以直接在终端敲这条命令启动服务:
am startservice -n org.qpython.qpy/.service.SL4AService
2. 给终端的QPython指定连接路径
当你从终端启动QPython后,不能直接用默认的androidhelper.Android()了,得手动指定SL4A服务的socket路径(这个路径是QPython私有目录下的固定位置)。改成这样写:
import androidhelper # 把socket路径传给Android类 droid = androidhelper.Android('/data/user/0/org.qpython.qpy/files/sl4a/socket')
3. 测试连接是否成功
写个简单的命令验证下,比如弹个Toast:
droid.makeToast('SL4A连接成功啦!')
如果手机能弹出这个提示,说明连接已经没问题了。
为啥终端启动会报错?
其实很简单:在QPython应用内跑脚本时,应用会自动帮你做好两件事——启动SL4A服务,以及设置好连接所需的环境变量。但你从终端直接跑qpython-android5.sh时,这俩条件都不满足,自然就连不上,报Connection refused了。
要是你不想每次都手动指定路径,可以修改qpython-android5.sh脚本,在脚本开头加一行环境变量配置:
export SL4A_SOCKET=/data/user/0/org.qpython.qpy/files/sl4a/socket
这样之后从终端启动QPython,直接用droid=androidhelper.Android()就能正常连接了。
内容的提问来源于stack exchange,提问作者harvin
相关产品推荐
相关产品推荐

