編輯:關於Android編程
來興趣時寫了些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)
1. Dom概述Dom方式創建XML,應用了標准xml構造器 javax.xml.parsers.DocumentBuilder 來創建 XML 文檔,需要導入以下內容j
背景一個典型的ListView,每個Item顯示一個TextView,代表一個Task,需要實現二個編輯方式:一個是用CheckBox來標識任務已經完成,另一個要實現的編
前言 之前博客裡已經將了MediaPlayer的簡單應用,如何使用MediaPlayer在Android應用中播放音頻。這篇博客在MediaPlayer使用的基礎
在定義了將要被OpenGL繪制的形狀之後,你當然想要繪制它們。使用OpenGL ES 2.0繪制圖形需要的代碼可能比你想象的要多,因為API提供了大量的圖形渲染管道控制接