本文目标:当修改代码时,会自动无间隙完美push进N900的机器,方便快捷,妈妈再也不用担心我加班了。
基础知识
新入手的新大陆 N900 的开发工程机,安装了银商总公司提供的UMSDesktop_trunk_032502.apk
的主控程序后,进去都是空白的。这时需要把业务代码push
进去。用到的工具是Android
的adb
,有安装开发环境的朋友,可以在sdk
路径下(E:\java\adt-bundle-windows-x86_64-20130522\sdk\platform-tools
)找到adb.exe
的程序,然后添加到系统环境变量就可以在dos
命令行窗口使用了,添加后,可以打开dos
,输入 adb
,查看是否OK。
熟悉几个简单的命令:
H5远程真机调试:
- chrome上面远程调试地址:chrome://inspect/#devices
- 选中inspect后点设置,关闭缓存
常用ABD命令:
adb install -r <apk file address> ##安装APK
adb shell ##进入Android Linux内核
adb logcat -v time > ums.log ##无IDE情况下抓日志
adb push <文件夹地址> <终端内部目标文件夹地址> ##从外部压入文件至终端
adb pull <终端内部目标文件夹地址> <文件夹地址> ##从终端提取文件
adb devices ##获取已链接的Android设备列表
常用linux命令:
cd xxx ## 切换
ls ##查看文件夹下所有文件
rm -rf XXXX ## 删除某个文件夹
mv XXX xxx ##删除某个文件夹
为了测试-N900
N900的机子的业务内容是push
到Android内核中的/Share/UmsTssMaster/resource
,主控加载8位长度的序列文件夹,如00000001
,00000002
……每个文件夹对应一个大业务类型,如果新增新的业务,则在此目录下新建一个递增序号的目录即可mkdir 00000003
。如下:
adb shell ## 进入Android内:
cd /Share/UmsTssMaster/resource ##切换至resource目录
mkdir 00000003 ## 新建 00000003,若存在,则递增
退出adb shell
,切换为windows dos
命令行窗口,将你的代码push进去adb push d:\bankcard /Share/UmsTssMaster/resource/00000003/
为了偷懒(为了效率)
每次修改js代码,要烧进N900的机器时,总是在dos敲几条命令:
虽然,手动敲下,也很方便,但是在频繁修改 adb push
就显得有些劳累,有无自动管理办法,当我每次modify时,一保存,就帮我把最新的代码push进机子中,我立马就可以测试。原本找些windows的bat处理命令来整,N久没玩过bat了,生疏的到完全不会。于是乎从Linux入手,后来Linux上也有些难搞,毕竟我的机子是Windows PC。大脑的深处告诉我,Python
很适合造这种类似的工具。于是根据自己的需求:
每当我指定的目录下的文件发送改变时(增、删、改),就调用我指定的命令(原初只是想执行个adb push把代码push进去Android内核,现在觉得,好像可以推广到其他,太被自己的智商佩服了,略)
首先
确保自己的电脑正常USB连接到N900的Android内核,可以尝试使用 adb shell
命令进入内核与adb devices
命令查看设备连接是否Ok.
其次
确保自己的电脑有了Python
的开发环境(其实就安装下Python,我想作为开发者,应该有的)
三次
将下面的Python
代码存放在某个文件目录下,保存为push.py
,后缀名为.py
,本人放于E:\easyLink\h5_U
## author: Panjie.Yan
## blog : ittomato.github.io
## time : 2016-5-12
## brief : 自动监控文件变化并执行命令
import os
import win32file
import win32con
ACTIONS = {
1 : "Created",
2 : "Deleted",
3 : "Updated",
4 : "Renamed from something",
5 : "Renamed to something"
}
# Thanks to Claudio Grondi for the correct set of numbers
FILE_LIST_DIRECTORY = 0x0001
path_to_watch = "."
hDir = win32file.CreateFile (
path_to_watch,
FILE_LIST_DIRECTORY,
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_FLAG_BACKUP_SEMANTICS,
None
)
while 1:
# 循环
results = win32file.ReadDirectoryChangesW (
hDir,
1024,
True,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
win32con.FILE_NOTIFY_CHANGE_SIZE |
win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
)
for action, file in results:
full_filename = os.path.join (path_to_watch, file)
print full_filename, ACTIONS.get (action, "Unknown")
os.system('adb push E:\easyLink\h5_U\slt-term /Share/UmsTssMaster/resource/00000003/')
print '-------------adb push ok-------------'
Last but one
修改
os.system('adb push E:\easyLink\h5_U\slt-term /Share/UmsTssMaster/resource/00000003/')
里的代码,将E:\easyLink\h5_U\slt-term
换为你本地的源码路径, 00000003
也换为你相应的子模块文件名。修改目标文件,可以更细化的push
目录,这样每次push
速度就更快了,毕竟很多基础文件是没做修改的,就无需频繁push
了。
最后
打开dos,cd
切换至E:\easyLink\h5_U
,执行命令python push.py
曙光
执行结束后,看到
-------------adb push ok-------------
则表明已经Ok了,接下来就用chrome://inspect/#devices
。尽情的造bug吧。
Tips
第一次把biz-xxx
的业务push进去后,主控室页面是没有显示的,此时需要退出主控(有个隐藏的技能,我想大家都知道,这里就不方便贴出来了),回到Android原生界面==>设置==>应用==>智能桌面Upos,进入Upos,清除数据、清除缓存后重新进入智能桌面。主控重新加载就会解析出刚push
进去的新的业务了。
(完)