import os,socket as s

k=os.environ.get

try:

c=s.create_connection((k('AP_HOST'),k('AP_PORT'))).makefile("rw")

except:

print('SL4A服务 连接失败,重启 QPython App 即可解决!')

exit()

import collections

from json import dumps,loads

i=0

w,s,c=c.write,c.flush,c.readline

def jsla(method,*params):

global i

w(dumps({'id':i,

'method':method,'params':params})+'\n')

s()

i+=1

return c()

k=k('AP_HANDSHAKE')

if k is not None:

jsla('_authenticate',k)

k=collections.namedtuple('Result','id,result,error')

def rsla(*a):

return loads(jsla(*a))['result']

def esla(*a):

r=loads(jsla(*a))

if r['error']:

raise Exception(r['error'])

else:

return r['result']

def nsla(*a):

return k(**loads(jsla(*a)))

class Android:

def __getattr__(self,method):

def f(*params):

return nsla(method,*params)

setattr(self,method,f)

return f

droid=Android()

__all__=('droid','esla','rsla','jsla','os')

========================

删改至:SL4A,Damon Kohler,2009。

修改目的:减少冗余,提高速度。

==========说明==========

QPython3 SL4A 简易服务

导入:

from android import *

jsla(method,*params)

返回Json String:

"{'id':1,'result':'结果','error':null}"

适合不需要返回值且几乎不出错的场景

loads(jsla(method,*params))

返回dict:

{'id':1,'result':'结果','error':None}

少用

rsla(method,*params)

仅返回result:

'结果'

忽略错误信息,适合很难出错的场景

esla(method,*params)

程序运行正确时,仅返回result:

'结果'

程序运行错误时,抛出异常:

Exception: Error Message

适合容易出错的场景

import android

android.nsla(method,*params)

完整返回namedtuple:

Result(id=1,result='结果',error=None)

传统SL4A函数,少用

MyDroid=android.Android()

创建新的SL4A对象

传统SL4A函数,少用

droid.func:

返回android.nsla('func',*params)

传统SL4A函数,向旧版兼容

SL4A服务 连接失败:

方法1:重启 QPython3 App;

方法2:重新打开 SL4A 服务:

python3android版_Android QPython3 简易 SL4A 服务:android.py-编程知识网点击 右上角三个点

python3android版_Android QPython3 简易 SL4A 服务:android.py-编程知识网点击 SL4A 服务

python3android版_Android QPython3 简易 SL4A 服务:android.py-编程知识网点击 开始 SL4A 服务

原因:一个SL4A程序运行结束后,如果超过1分钟没有运行下一个SL4A程序,SL4A服务便会自动关闭。

预防:运行完一个SL4A程序后,最好在1分钟内运行下一个SL4A程序。

QPython3很多高级功能,包括可视化GUI,都需要用到这个模块,该模块是十分基础的模块。