Android运行脚本与定时工具

用惯了crontab,希望在自己的Android手机上完成定时执行一些脚本的任务。google一下找到了 android应用实现定时打电话 这样一篇文章,正好满足我的需求。下面做一个简单的总结。

安装的软件

  • SL4A(Scripting Layer for Android),Andriod系统下运行脚本的环境,可以在终端、后台或Locale中运行,现阶段支持Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl和shell脚本。

  • Py4A,SL4A的python插件,安装之后就可以运行python脚本。

  • TaskBomb task scheduler,一个可以执行计划任务的app,类似于Unix中的crontab。

  • SL4A Script Launcher,TaskBomb可以通过此app执行SL4A脚本。

简单使用

  • 安装Py4A后进入程序,点击最上边的Install会自动下载Python运行所需要的类库。

  • 进入SL4A会看到在SL4A程序Scripts目录下的脚本,可以在terminal或后台运行这些脚本;在SL4A中可以添加、修改、删除脚本程序,使用方法很简单,不详细说明。

  • 需要注意的是Py4A支持的是python2.6,最新的python-for-android的项目地址已经在 这里 。Py4A不仅支持python的原生API,同时可以很方便的调用Android的系统API,比如可以使用下边很简单的代码向目标手机发送短信。详细可参考 ApiReference

1
2
3
4
import android

droid = android.Android()
droid.smsSend('15120000xxx', 'this is an sms auto sent by Py4A.')

其他

最后这部分就是与文章内容不相关了。是一个虾米音乐自动签到的程序。需要注意的就是登录时一定要将headers中的User-Agent修改为浏览器的User-Agent,签到的post请求需要修改headers中的User-Agent和Referer地址。其他就没有什么了(突然想到和某只喵喵的比赛是不是可以拿TaskBomb+SL4A作弊),各位看官求轻拍,捂面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# -*- coding: utf-8 -*-

import urllib2, urllib

def login(email, password):
try:
cookies = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookies)
urllib2.install_opener(opener)
params = {'email':email, 'password':password, 'submit':'登 录'}
loginUrl = 'http://www.xiami.com/member/login'

headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17",
}
request = urllib2.Request(
url = loginUrl,
headers = headers,
data = urllib.urlencode(params)
)
login = urllib2.urlopen(request)
print 'login successfully...'
return login
except Exception, e:
print 'login failed:', e
return None

def signin(email, password):
signurl = 'http://www.xiami.com/task/signin'
if login(email, password) != None:
try:
headers = {
"Referer": "http://www.xiami.com/?register",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17",
}
request = urllib2.Request(
url = signurl,
headers = headers
)
response = urllib2.urlopen(request)
retcode = response.read()
if str.isdigit(retcode):
print 'sign in days:', retcode
except Exception, e:
print 'signin error:', e

if __name__ == '__main__':
email = 'xxx'
password = 'xxx'
signin(email, password)

参考

android应用实现定时打电话google code SL4A