標籤:開發測試 moni i/o creat manifest android window 調用 出錯
程式開發有時候非常依賴使用的開發工具,好的完備的開發工具可以讓開發人員的工作效率有大幅度的提高。開發Android也是如此,大家可能都離不開Eclipse或Android Studio這些工具,但他們其實是整合式開發環境(Integrated development environment, IDE),把很多工具整合在一個裡面,配合可視化介面和鍵盤快速鍵,方面尋找和使用。
不過有時候工具整合太多了,往往讓人感到迷惑容易遺忘某個工具的存在。本文就談談Android開發和Debug時可使用的一些工具,這些工具都可以在安裝了Android SDK的Eclipse或Android Studio找到相應的菜單和按鈕來開啟使用。但考慮到IDE很多時候開啟速度實在太慢了,還是考慮直接使用指令在終端單獨開打它們吧。
如果安裝了Android Studio,這些工具可以在其安裝包中找到,比如在Mac下它們就儲存在/Applications/Android Studio.app/sdk/tools路徑下。如果是使用Eclipse,那麼就需要手動下載Stand-alone Android SDK,解壓之後也能在其下的tools檔案夾裡找到。
android
這個工具會叫android也說明了它地位應該是最高的,的確它的功能包括了管理SDK(Software development kit)和AVD(Android Virtual Device),以及建立和更新開發使用的Project。通過android -h就能看到其基本使用方式。
Usage: android [global options] action [action options] Global options: -h --help : Help on a specific command. -v --verbose : Verbose mode, shows errors, warnings and all messages. --clear-cache: Clear the SDK Manager repository manifest cache. -s --silent : Silent mode, shows errors only. Valid actions are composed of a verb and an optional direct object:- sdk : Displays the SDK Manager window.- avd : Displays the AVD Manager window.- list : Lists existing targets or virtual devices.- list avd : Lists existing Android Virtual Devices.- list target : Lists existing targets.- list device : Lists existing devices.- list sdk : Lists remote SDK repository.- create avd : Creates a new Android Virtual Device.- move avd : Moves or renames an Android Virtual Device.- delete avd : Deletes an Android Virtual Device.- update avd : Updates an Android Virtual Device to match the folders of a new SDK.- create project : Creates a new Android project.- update project : Updates an Android project (must already have an AndroidManifest.xml).- create test-project : Creates a new Android project for a test package.- update test-project : Updates the Android project for a test package (must already have an AndroidManifest.xml).- create lib-project : Creates a new Android library project.- update lib-project : Updates an Android library project (must already have an AndroidManifest.xml).- create uitest-project: Creates a new UI test project.- update adb : Updates adb to support the USB devices declared in the SDK add-ons.- update sdk : Updates the SDK by suggesting new platforms to install if available.
android sdk
全新的SDK包裡是沒有編譯工具的,Android程式員都知道Android有很多個版本,開發時要針對版本進行設計和編程。android sdk指令就可以開打一個可視化的管理視窗,讓使用者可以在上邊選擇下載需要的Android版本以便可以使用其上的API。還可以下載相應API的源碼方便學習。
(可以不加sdk參數,直接使用android指令也是開啟SDK管理視窗。)
在這個介面上也可以選擇將SDK工具,也就是本文中所要提到的工具,更新到最新的版本。如果不小心更新到了現在開發還不相容的SDK版本,在這裡就無法降版本了,只能到晚上重新下載舊的版本,然後拷貝到前面提到的sdk檔案下覆蓋現有的tools檔案夾。
android avd
開發Android程式一定要有裝置來做測試。最好的就是破解了的具有管理員權限的實體裝置;如果沒有,一部可以開啟開發人員選項的普通實體裝置也可以。因為實體裝置的運行效率是最好的(只要不是已經差不多塊被市場淘汰的老舊的Android手機),呈現的效果也更接近真實使用者的體驗。如果實在沒有實體裝置來做開發,那就只能退到虛擬設備上了。
android avd指令可以開啟虛擬設備管理器,方便建立和修改Android虛擬設備以供開發測試。不過在此之前還是需要使用SDK管理器去下載相關API版本的裝置鏡像才能建立指定版本的虛擬設備。
虛擬設備畢竟是借用電腦上的資源所以相對來說運行速度會很慢。但使用虛擬設備也有幾個好處:不用擔心裝置沒有電;在做示範的時候可以投影顯示;可以建立不同API版本和螢幕尺寸的裝置來做查看效果,就不需要花很多錢買齊各種裝置。
其他功能
android指令還可以用建立Android項目,然後用ant或gradle來編譯,這樣就可以完全脫離IDE。不過多數情況下還是會傾向於使用IDE來建立,畢竟可視化的介面會更加的便捷。有時候可能想要部署到其他的裝置或者開發項目可以使用這些指令碼來做到一鍵創立。
DDMS
這個工具也是極為重要的,使用頻率比android是高很多。android這個工具大多數是用來做初始化配置,而ddms則是debug過程中不可缺少的。它可以查看程式使用時所啟動並執行線程資訊,網路使用率,可以進行profiling來查看期間那個方法使用了最多的資源。
在Eclipse和Android Studio中都已經很好的整合了logcat內容的展示,在IDE中還能直接通過點擊異常的條目來跳轉到相應的出錯檔案的指定行,十分方便,所以一般不會單獨在終端開啟這個介面。
dmtracedump
這個指令不太常用,主要是把profiling產生的trace檔案處理成一個圖片檔案,顯示方法之間的調用關係。除了看得比較酷炫,實際很難直接從圖上找出太多有用的價值。
uiautomatorviewer
這個工具在我看來絕對是神器啊,它可以展示出當面螢幕所呈現的視圖(View)的布局(Layout)以及其尺寸大小。這樣就可以用來調整xml檔案來重新安排布局。不過更多時候,我用它找到視圖的id,然後通過id反向尋找對應的的xml檔案。
這個工具不局限在只能查看自己的應用,它可以顯示螢幕上的任何東西。所以可以用它來看看別人的應用使用了什麼View來呈現也是不錯的,比如看看他們是用ListView還是RelativeLayout,用的是button還是textview加點擊事件。
有些局限就是它不支援查看自訂的視圖,只會顯示系統定義的類型名字。另外如果是利用canvas和OpenGL畫的內容,也無法查看到其具體細節。不過知道別人是自己畫的,不是簡單組合幾個系統檢視表那也是很有用的資訊。
traceview
這個工具也是用來開啟profiling產生的trace檔案的,但它遠比dmtracedump要好用的多。traceview會列出每個方法調用所使用的事件,展開方法還能看到方法被調用其他方法所佔用的時間百分比。這樣就可以知道那個方法用了最多的資源,進而可以對其進行最佳化或者將其搬離主線程。
monitor
說了那麼多工具,再來說monitor工具,我感覺前面說這麼多都是在浪費時間,因為只要這一個就可以包含全部前面介紹的工具了。還額外附贈了好些功能,比如uiautomatorviewer一次只能查看一個螢幕布局,但使用monitor捕獲會產生獨立的檔案,查看互不影響。只能說前面的只是為各個工具做功能介紹,真需要用的時候只要開啟monitor就好了。
同樣的它也可以開啟trace檔案分析方法調用所花了的時間。
其它emulator
用指令emulator -avd <name>來啟動給定名字的虛擬設備,不過一般還是會通過AVD管理器來開啟。但是如果某個虛擬設備經常使用,用這個來開啟是挺方便的。要是記不住名字,可以通過android list avd來查看。
monkeyrunner
這個指令可以運行一些指令碼來類比一個返祖使用者是如何瘋狂的使用開發的應用程式的,用它做一些壓力測試也是挺好的。如果不想寫指令碼,也可以直接使用adb下的monkey指令來做類似的測試。
sqlite3
Android預設內建了sqlite做資料庫,SDK中也提供了簡潔清晰的API來建立和訪問sqlite資料庫檔案。資料庫檔案存在於裝置的/data/data/<app-packagename>/databases路徑下,每個應用都有自己儲存資料庫檔案的檔案夾。SDK工具中也帶了這個sqlite3工具協助喜歡用終端來查看sqlite檔案的程式員來訪問資料庫檔案。
不過我很少使用這個工具,因為必須要把sqlite資料庫檔案裝置中用adb pull指令提取到電腦上。而對於普通裝置,因為缺少操作許可權而無妨提到sqlite資料庫檔案。對於破解的具有管理員權限的實體裝置或者虛擬模擬器,它們在裝置上就有sqlite3指令可以直接在adb shell下操作。更主要的原因是我還是習慣用具有可視化的程式來查看這些資料。
mksdcard
該工具是為Android虛擬設備提供一個偽造的sdcard來提供裝置的儲存量。多個裝置也可以共用一個由這個工具建立出來的檔案,只要他們不同時啟動使用。
在終端運行這些工具時,可以在指令最後加上 & 讓其在背後運行,這樣就可以在一個終端同時開啟多個工具了。要像瞭解其他更多關於最新Android工具的內容,可以瀏覽Android開發官方網站,還有Android Tools Project Site網站,以及曆年Google IO上介紹Android工具的視頻。
除了這些工具外,Android還有一個更強大的工具那就是adb,不過它更像是指令沒有可視化介面。而且adb已經從tools檔案夾移到了platform-tools下了。在之前已經有文章介紹通過它查看Activity Stack的方式,之後也會有更多文章來詳細介紹它。
References:
- SDK Tools | Android Developers
- Managing Projects from the Command Line | Android Developers
- Updating SDK from command-line – Android Tools Project Site
- Using DDMS | Android Developers
- Android: how to use dmtracedump – Stack Overflow
- Google I/O 2014 – What’s new in Android development tools – YouTube
- Google I/O 2011: Android Development Tools – YouTube
開發Android必知的工具