您的位置:首页 > 移动开发 > Android开发

Kivy a to Z -- 一个简单的通过adb同步Android系统文件的工具

2014-08-15 21:49 656 查看
来兴趣时写了些Kivy的代码,调试却总感觉不是很方便。直接打包到public.mp3的方式太繁锁,用文件共享的软件又发现没有一个好用的,

用samba filesharing本来也只是慢,但是更新的版本之后就一直提示说wifi没有tethering,意思是wifi热点没有打开,但是打开了还是提示没有tethering。

找了个叫什么卓*力的文件管理器,下载了samba插件后输入用户名和密码死活不对,被搞得实在恼火,花了点时间写了个通过adb同步安卓文件的工具,用着也挺爽的。

事件为什么总是要搞得这么复杂呢?简简单单多好?愚蠢的人类啊。

sync.py

import os
from os.path import join, getsize
import pickle
import subprocess

file_info = None

def compile_source():
    for root, dirs, files in os.walk('.'):
        for f in files:
            if f in ['sync.py','dump.pkl']:
                continue
            if not f.endswith('.py'):
                continue
            p = join(root,f)
            size = os.path.getsize(p)
            fstat = os.stat(p)
            info = (size,fstat.st_mtime)
            if p in file_info and  info == file_info[p]:
                if os.path.exists(p.replace('.py','.pyo')):
                    continue
            print 'compile ',p
            print subprocess.check_output('python -OO -m py_compile '+p)

def sync_source():
    for root, dirs, files in os.walk('.'):
        for f in files:
            if f in ['sync.py','sync.pyo','dump.pkl']:
                continue
#            if f.endswith('.py'):
#                continue
            p = join(root,f)
            size = os.path.getsize(p)
            fstat = os.stat(p)
            info = (size,fstat.st_mtime)
            if p in file_info and  info == file_info[p]:
                    continue
            file_info[p] = info
            root_dir = '/mnt/sdcard/kivy/'
#            root_dir = '/mnt/shell/emulated/0/org.test.kivycatalog'
            cmd = ['adb','push',p,join(root_dir,p[2:].replace('\\','/'))]
            print ' '.join(cmd)
            print subprocess.check_output(cmd)
    
    with open('dump.pkl','wb') as f:
        pickle.dump(file_info,f)

if __name__ == '__main__':
    try:
        with open('dump.pkl','rb') as f:
            file_info = pickle.load(f)
    except Exception,e:
        print e
        file_info = {}
    
    compile_source()
    sync_source()


把sync.py放到代码的根目录,执行,会自动把PC端已经修改的文件同步到安卓端,类似输出如下:

./sync.py

compile .\main.py

adb push .\main.py /mnt/sdcard/kivy/main.py

406 KB/s (5839 bytes in 0.014s)

adb push .\main.pyo /mnt/sdcard/kivy/main.pyo

403 KB/s (5372 bytes in 0.013s)

补充:

发现adb已经提供了同步的命令:sync,用法如下:

指定同步的目录,该目录包含system或者data目录:

set ANDROID_PRODUCT_OUT=.\android

同步 system和data目录:

adb sync

只同步system目录:

adb sync system

只同步data目录:

adb sync data

从上面也可以看到,adb sync只能同步data和system目录,所以本脚本还是有利用价值的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐