Kivy a to Z -- 一個簡單的通過adb同步Android系統檔案的工具
來興趣時寫了些Kivy的代碼,調試卻總感覺不是很方便。直接打包到public.mp3的方式太繁鎖,用檔案分享權限設定的軟體又發現沒有一個好用的,
用samba filesharing本來也只是慢,但是更新的版本之後就一直提示說wifi沒有tethering,意思是wifi熱點沒有開啟,但是開啟了還是提示沒有tethering。
找了個叫什麼卓*力的檔案管理工具,下載了samba外掛程式後輸入使用者名稱和密碼死活不對,被搞得實在惱火,花了點時間寫了個通過adb同步安卓檔案的工具,用著也挺爽的。
事件為什麼總是要搞得這麼複雜呢?簡簡單單多好?愚蠢的人類啊。
sync.py
import osfrom os.path import join, getsizeimport pickleimport subprocessfile_info = Nonedef 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)