- Android設(shè)計模式與最佳實踐
- (英)凱爾·繆
- 2081字
- 2021-02-07 09:26:37
1.6 運行和測試應(yīng)用程序
如今,大量的設(shè)備使用Android系統(tǒng),它們的形狀和尺寸各異。作為開發(fā)者,我們希望能夠用最少的代碼,讓應(yīng)用程序適配盡可能多的設(shè)備和形狀因子。幸運的是,Android平臺非常適合這一挑戰(zhàn)。我們能夠輕松地調(diào)整布局,并且可以構(gòu)建模擬器,適配一切我們能想到的形狀因子。
Google提供了一個非常方便的基于云的應(yīng)用程序測試工具——Firebase測試實驗室。
顯然,在任何測試環(huán)境中,模擬器都是重要的組成部分。但這并不意味著連接測試機測試應(yīng)用程序不方便。使用自己的測試機,不僅比任何模擬器都快,而且正如我們接下來將要看到的,真機連接的配置非常簡單。
1.6.1 連接到真機
真機除了比模擬器快,還能讓我們在現(xiàn)實環(huán)境中測試應(yīng)用程序。
將真機連接到我們的開發(fā)環(huán)境需要兩個步驟。
(1)在手機上啟用開發(fā)者選項。在某些型號的手機上,需要進入Settings|About phone(設(shè)置|關(guān)于手機),點擊7次Build number(版本號),之后Developer options(開發(fā)者選項)會出現(xiàn)在設(shè)置中。使用此選項,可以啟用USB debugging(USB調(diào)試)以及Allow mock locations(允許模擬位置)。
(2)現(xiàn)在,你應(yīng)該可以通過USB或者Wi-Fi插件線將設(shè)備連接到工作站了。此時打開Android Studio,已經(jīng)可以顯示設(shè)備。如果沒有顯示設(shè)備,可能需要打開SDK Manager,通過Tools(工具)選項卡安裝Google USB driver(Google USB驅(qū)動程序)。極少數(shù)情況下,需要從設(shè)備制造商網(wǎng)站下載USB驅(qū)動程序。
真機對于快速測試應(yīng)用程序的功能變化是非常有用的,但是為了在開發(fā)過程中可以直觀看到應(yīng)用程序在不同形狀、尺寸的屏幕上的顯示效果,需要創(chuàng)建一些模擬器。
1.6.2 連接到模擬器
利用Android虛擬設(shè)備(AVD),開發(fā)者可以隨意試驗各種模擬的硬件設(shè)置,但眾所周知,它們速度很慢,會耗盡許多計算機系統(tǒng)資源,而且缺乏真機中的許多特性。雖然模擬器有這些缺點,但它仍是Android開發(fā)者工具箱中的重要部分。通過考慮以下內(nèi)容,可以減少許多阻礙。
? 拆解模擬器,使其只包含應(yīng)用程序設(shè)計所需的特性。例如,如果應(yīng)用程序中沒有拍照功能,可以從模擬器中刪除相機功能,以后隨時可以添加回來。
? 盡量降低AVD的內(nèi)存和存儲需求。當(dāng)應(yīng)用程序有需要時,創(chuàng)建另一個設(shè)備非常容易。
? 只有需要測試特定的新特性時,才使用最新的API級別創(chuàng)建AVD。
? 先在具有低分辨率和低密度屏幕的模擬器上進行測試,這將使運行速度更快,并且仍能測試不同的屏幕尺寸和長寬比。
? 嘗試拆分耗費資源的功能,并單獨測試它們。例如,如果應(yīng)用程序中使用了大量的高清圖像集合,可以通過單獨測試此功能來節(jié)省時間。
構(gòu)建適合特定用途的模擬器通常比構(gòu)建用于測試所有功能的通用模擬器要快,而且現(xiàn)在有越來越多的第三方Android模擬器可用,例如Android-x86和Genymotion,它們通常更快,并且具有更多的開發(fā)特性。
值得注意的是,當(dāng)只測試布局時,Android Studio提供了一些強大的預(yù)覽選項,可以讓我們預(yù)覽許多形狀因子、SDK級別以及主題上的潛在UI效果,如圖1-6所示。

圖1-6
現(xiàn)在,創(chuàng)建一個基本的AVD來運行和測試當(dāng)前項目。目前沒有什么真正需要測試的東西,但是通過此操作,我們將看到如何在運行時監(jiān)控應(yīng)用程序的行為,以及如何在不使用設(shè)備屏幕的情況下使用調(diào)試監(jiān)控器服務(wù)來測試輸出(對于調(diào)試項目來說,這種方式不太吸引人)。
1.6.3 監(jiān)控設(shè)備
下面的演示對模擬器和真機都有效,因此可以任選最適合你的設(shè)備。如果要創(chuàng)建AVD,無須大尺寸、高密度的屏幕以及大內(nèi)存。
(1)打開我們剛做的項目。
(2)從Tools|Android(工具|Android)菜單中,選擇Enable ADB Integration(啟用ADB集成),如圖1-7所示。

圖1-7
(3)在同一個菜單中,選擇Android Device Monitor,盡管它可能已經(jīng)在運行了。
(4)現(xiàn)在,使用Android Device Monitor在連接的設(shè)備上運行應(yīng)用程序。
Android Device Monitor在以下幾個方面很有用。
? 可以在運行時使用Monitors(監(jiān)視器)選項卡查看實時系統(tǒng)信息,例如應(yīng)用程序占用的內(nèi)存或CPU時間。當(dāng)我們想要查看應(yīng)用程序未在前臺運行時所使用的資源,監(jiān)視器尤其有用。
? 可以設(shè)置監(jiān)視器來收集各種數(shù)據(jù),例如方法跟蹤和資源使用,這些數(shù)據(jù)會被存儲為文件,可以在Captures(捕獲)面板(通常可以在左側(cè)邊欄打開)中查看。
? 在Captures面板中,對應(yīng)用程序進行截屏和錄屏非常簡單。
? LogCat是一個特別有用的工具,因為它不僅可以實時報告應(yīng)用程序的行為,而且正如我們接下來將要看到的,它還可以生成用戶定義的輸出。
目前,使用文本視圖(TextView)來測試工廠模式是一種便捷但笨拙的代碼測試方法。一旦我們開始開發(fā)復(fù)雜的布局,這種方式就會變得非常不便。一個更優(yōu)雅的解決方案是使用調(diào)試工具,這些工具可以在不影響UI的情況下進行查看。本練習(xí)剩余的部分將演示該如何做。
(1)打開MainActivity.java文件。
(2)聲明如下常量。
private static final String DEBUG_TAG = "tag";
(3)同樣,需要確認(rèn)android.util.Log;的導(dǎo)入。
(4)用如下所示代碼,替換onCreate()方法中用來設(shè)置文本視圖文本的代碼。
Log.d(DEBUG_TAG, bread);
(5)再次打開設(shè)備監(jiān)視器,這可以用快捷鍵Alt+6操作。
(6)從監(jiān)視器右上角的下拉列表中,選擇Edit Filter Configuration(編輯過濾器配置)。
(7)填寫觸發(fā)的對話框,如圖1-8所示。

圖1-8
運行應(yīng)用程序,測試工廠示例。在logcat監(jiān)視器中應(yīng)該會產(chǎn)生如下輸出。
05-24 13:25:52.48417896-17896/? D/tag: Brioche 05-24 13:36:31.21417896-17896/? D/tag: Baguette 05-24 13:42:45.18017896-17896/? D/tag: Roll
當(dāng)然,如果你愿意,依然可以使用System.out.println()方法將信息在ADB監(jiān)視器中打印出來,但需要在所有輸出中搜索它。
我們已經(jīng)了解了如何在真機和模擬器上測試應(yīng)用程序,以及如何在運行時使用調(diào)試和監(jiān)視工具查詢應(yīng)用程序。下面可以切換到更貼近現(xiàn)實的情況——涉及多個工廠以及比雙字字符串更復(fù)雜的輸出。
- Implementing Modern DevOps
- Spring技術(shù)內(nèi)幕:深入解析Spring架構(gòu)與設(shè)計
- Raspberry Pi for Secret Agents(Third Edition)
- Building Mobile Applications Using Kendo UI Mobile and ASP.NET Web API
- Quarkus實踐指南:構(gòu)建新一代的Kubernetes原生Java微服務(wù)
- Learning FuelPHP for Effective PHP Development
- Multithreading in C# 5.0 Cookbook
- Create React App 2 Quick Start Guide
- Java零基礎(chǔ)實戰(zhàn)
- Java EE企業(yè)級應(yīng)用開發(fā)教程(Spring+Spring MVC+MyBatis)
- UX Design for Mobile
- Python Web自動化測試設(shè)計與實現(xiàn)
- Elasticsearch Blueprints
- Jakarta EE Cookbook
- 編程風(fēng)格:程序設(shè)計與系統(tǒng)構(gòu)建的藝術(shù)(原書第2版)