核心應用程式品質指南

上次更新日期:2021 年 5 月 17 日

評估卓越應用程式的實用方法,是逐步瞭解應用程式中的工作流程,並評估應用程式體驗的流暢性與安全性。

這份檢查清單定義了一組核心品質標準和相關測試,協助您評估應用程式的品質。其中部分標準很容易遭到遺漏,您可以經由各項測試,記得將這些項目納入測試計畫。

檢查清單會醒目顯示所有應用程式應符合的最低品質。您的測試結果可能會遠超過此處描述的品質標準。

品質檢查清單中的每個項目都有專屬 ID,在您與團隊溝通時相當實用。您也可以查看舊版的規範

視覺體驗

應用程式應視情況提供標準的 Android 視覺設計和互動模式,打造出一致且直覺的使用者體驗。

領域 ID 測試 說明
導覽 VX-N1 CR-3 應用程式支援標準返回按鈕導覽,且不使用任何自訂的螢幕「返回按鈕」提示。
VX-N2 CR-3 應用程式支援用於返回/前往主畫面的手勢操作
VX-N3 CR-1
CR-3
CR-5

應用程式正確保留及還原使用者或應用程式狀態。

應用程式會在離開前景時保留使用者或應用程式狀態,且可避免由於返回導覽和其他狀態變更而導致的意外資料遺失。

應用程式返回前景時,必須還原保留的狀態,以及所有待處理且重要的有狀態交易,例如對可編輯欄位、遊戲進度、選單、影片以及應用程式或遊戲其他部分的變更。

  1. 應用程式透過「最近使用過的應用程式」切換器恢復運作時,會讓使用者返回上次使用時的確切狀態。
  2. 當裝置從休眠 (鎖定) 狀態喚醒後,應用程式恢復運作時會讓使用者返回上次使用時的確切狀態。
  3. 從主畫面或「所有應用程式」重新啟動應用程式時,應用程式必須依據上次使用後經過的時間,執行下列任一操作:
    • 如果應用程式上次使用後經過的時間很短 (數分鐘),請盡可能將應用程式狀態還原成接近先前的狀態。
    • 如果應用程式自上次使用後已經過較長時間,請盡可能讓應用程式還原為接近先前的狀態,或者從其主畫面或其他預設狀態啟動應用程式。
通知 VX-S1 CR-9

通知功能遵循 Material Design 指南的規範。請特別注意以下幾點:

  1. 通知不得用於交叉宣傳或宣傳其他產品,這是 Play 商店嚴格禁止的行為。
  2. 通知管道是根據最佳做法定義,而非透過單一管道發送所有通知。
  3. 選取正確的通知優先順序
  4. 盡可能將多則通知堆疊為單一通知群組
  5. 在適當情況下為通知設定逾時
  6. 只會持續顯示進行中 (例如播放音樂或有來電) 的事件相關通知。詳情請參閱「功能」一節。
VX-S2 CR-9

針對訊息應用程式、社交應用程式和對話:

  1. 針對對話使用 MessagingStyle 通知。
  2. 支援直接回覆操作
  3. 支援對話快速鍵,並實作取得直接分享排名的最佳做法。
  4. 支援對話框
UI 和圖形 VX-U1 CR-5 應用程式同時支援橫向和直向螢幕 (如果可行) 以及折疊/展開功能。

不同螢幕方向顯示的功能和操作絕大部分相同,且保留功能的一致性。允許在內容或檢視畫面上進行小幅調整。

VX-U2 CR-5 應用程式在兩種螢幕方向下都會使用整個螢幕畫面,不會因為方向變更而出現上下黑邊,包括折疊和展開的情況。

允許出現些微上下黑邊來彌補畫面幾何形狀的小幅度變化。

VX-U3 CR-5 應用程式能正確處理螢幕方向與裝置折疊/展開之間的快速轉換,而不會出現轉譯問題或遺失狀態。
視覺品質 VX-V1 CR-all

應用程式在顯示圖形、文字、圖片和其他 UI 元素時,不會出現明顯失真、模糊或像素化的情形。

  1. 應用程式應盡可能使用向量可繪項目
  2. 應用程式可針對所有目標螢幕尺寸和板型規格提供高品質圖像。
  3. 選單、按鈕和其他 UI 元素的邊緣沒有出現鋸齒化的情形。
VX-V2 CR-all

針對各種應用程式支援的語言,應用程式會以可接受的方式顯示文字和文字區塊。

  1. 組合適用於所有支援的板型規格。
  2. 不會顯示不完整的字母或文字。
  3. 按鈕或圖示中的詞語不會發生不當的換行情形。
  4. 文字和周圍的元素之間有足夠的間距。
VX-V3 CR-all 應用程式的內容以及應用程式所參照的所有網頁內容皆支援深色主題
無障礙功能 VX-A1 CR-all

觸控目標的大小至少為 48dp。瞭解詳情

VX-A2 CR-all

應用程式的文字和前景內容與其背景應維持足夠的高色彩對比率:

  • 大型文字/圖形應為 3.0:1
  • 小型文字 (文字小至 18pt,或是小於 14 pt 的粗體文字) 應為 4.5:1

進一步瞭解色彩和對比

VX-A3 CR-all 使用 contentDescription 描述每個 UI 元素 (TextView 除外)。

功能

應用程式應實作預期的功能行為。

領域 ID 測試 說明
音訊 FN-A1 CR-1
CR-8
當應用程式返回前景時音訊會繼續播放,或者向使用者表明播放功能處於暫停狀態。
FN-A2 CR-1
CR-2
CR-8
如果音訊播放是核心功能,應用程式應支援背景播放
FN-A3 CR-0

當使用者啟動音訊播放時,應用程式應在一秒鐘內執行下列任一操作:

  1. 開始播放音訊。
  2. 提供視覺指標,表明正在準備音訊資料。
FN-A4 CR-0 應用程式應於音訊開始播放時要求音訊焦點,並在停止播放時捨棄音訊焦點。
FN-A5 CR-0 應用程式應處理其他應用程式的音訊焦點要求。舉例來說,應用程式可能會在另一個應用程式播放語音時,降低播放音量。
媒體 FN-M1 CR-0
CR-6
CR-8
如果應用程式在背景播放音訊,則必須建立採用 MediaStyle 樣式的通知
FN-M2 CR-0 如果應用程式播放影片,應支援子母畫面播放功能。
FN-M3 CR-0 如果應用程式要對影片進行編碼,應採用 HEVC 影片壓縮標準執行這項作業。
分享 FN-S1 CR-0 應用程式分享內容時應使用 Android Sharesheet。這項功能可以建議自訂解決方案無法使用的目標。
背景服務 FN-B1 CR-6 應用程式會避免在背景執行不必要的長時間服務。為確保使用者的裝置運作順暢,系統會對背景服務套用多項限制。我們不建議背景服務採用以下使用方式:
  • 維持網路連線以便收到通知
  • 維持藍牙連線
  • 保持開啟 GPS 功能

瞭解如何選擇適合工作的解決方案

效能和穩定性

應用程式應提供使用者預期的效能、穩定性、相容性和回應速度。

領域 ID 測試 說明
穩定性 PS-S1 CR-all
SD-1
應用程式不會當機封鎖 UI 執行緒,導致發生 ANR (Android 無回應) 錯誤。運用 Google Play 正式發布前測試報告找出潛在的穩定性問題。部署完成後,請留意 Google Play 管理中心的「Android Vitals」頁面。
效能 PS-P1 CR-all
SD-1
應用程式可迅速載入,如果載入時間需要超過兩秒鐘,須在畫面上為使用者提供回饋 (進度指標或類似的提示)。
PS-P2 CR-all
SD-1
應用程式應於每 16 毫秒轉譯一次影格,才能達到每秒 60 個影格數。開發人員可使用剖析 HWUI 轉譯選項進行測試。如有任何問題,可以使用相關工具協助診斷轉譯速度緩慢的情形。
PS-P3 PM-1 啟用 StrictMode 後 (請參閱下方的 StrictMode 測試),應用程式測試期間不會閃爍紅色燈號 (StrictMode 提供的效能警示)。閃爍紅色燈號表示儲存空間、網路存取或記憶體流失相關的不良行為。
SDK PS-T1 CR-0 應用程式會在最新的 Android 平台公開版本上執行,而且不會發生當機情形或嚴重影響核心功能。
PS-T2 SP-1 應用程式會設定 targetSdk 值,根據 Google Play 規定指定最新的 Android SDK
PS-T3 SP-1 應用程式會設定 compileSdk 值,以最新的 Android SDK 建構應用程式。
PS-T4 SP-2
SP-3
使用的任何 Google 或第三方 SDK 都是最新版本。任何針對這些 SDK 的改善項目 (例如穩定性、相容性或安全性) 皆應及時提供給使用者。

如果是 Google SDK,建議使用 Google Play 服務技術提供的 SDK (如果可用)。這些 SDK 具有回溯相容性、可接收自動更新、縮減應用程式套件大小,並有效運用裝置端資源。

開發人員必須對整個應用程式的程式碼集負責,包括任何使用的第三方 SDK。

PS-T5 SP-3 應用程式沒有使用非 SDK 介面
PS-T6 SP-2 正式版應用程式未包含任何偵錯程式庫。這可能會造成效能和安全性問題。
電池 PS-B1 BA-1 應用程式能正確支援打盹和應用程式待命等 Android 6.0 中導入的電源管理功能。如果核心功能受到電源管理的影響而中斷運作,只有合格的應用程式可以要求豁免權。請參閱打盹和應用程式待命的其他用途支援功能

在開發期間,開發人員可以使用這些 ADB 指令測試應用程式待命和打盹行為。

在電池用量方面,開發人員可以使用 Android Studio 能源分析器Battery Historian 工具,搭配預定的背景工作,診斷非預期的電池使用情形。

隱私權與安全性

應用程式應具備適當的權限層級,妥善處理使用者資料和個人資訊。

除了這份檢查清單外,凡是在 Google Play 商店中發布的應用程式,也必須遵循使用者資料政策保護使用者的隱私。

領域 ID 測試 說明
權限 SC-P1 SC-4 應用程式僅要求所需「絕對最低」的權限數量,支援目前執行的用途。對於位置資訊等部分權限,盡可能使用概略位置取代精確位置。
SC-P2

應用程式僅在直接與其核心用途相關的情況下,要求存取機密資料 (例如簡訊、通話記錄位置資訊) 或付費服務 (例如撥號或簡訊) 的權限。您必須向使用者醒目揭露這些權限的相關影響。

視您使用權限的方式而定,可能有不必存取機密資訊,就能實現應用程式用途的替代方式。舉例來說,與其要求與使用者聯絡人相關的權限,您可以使用隱含意圖要求適當的存取權。

SC-P3 CR-0 應用程式會在使用者執行特定功能時要求執行階段權限,而非早在應用程式啟動時提出要求。
SC-P4 CR-0

應用程式會清楚說明為何需要特定權限,或按照建議的流程說明需要權限的原因

SC-P5 CR-0 當使用者拒絕或撤銷權限時,應用程式應優雅降級。應用程式不應完全禁止使用者存取應用程式。
資料與檔案 SC-DF1 SC-1 所有機密資料都會儲存在應用程式的內部儲存空間
SC-DF2 SC-10 使用者的個人或機密資料不會記錄在系統記錄或應用程式專屬的記錄中。
SC-DF3 應用程式不會使用任何無法重設的硬體 ID (例如 IMEI) 做為識別用途。
身分識別 SC-ID1 CR-0 應用程式會提供自動填入提示的帳戶憑證和其他機密資訊,例如信用卡資訊、實際地址和電話號碼。
SC-ID2 CR-0 整合 One Tap for Android,提供順暢的登入體驗。
SC-ID3 CR-0 應用程式支援生物特徵辨識驗證功能,用於保護財務交易或機密資訊,例如重要的使用者文件。
應用程式元件 SC-AC1 SC-5

應用程式會為所有活動服務廣播接收器,特別是內容供應器,明確設定 android:exported 屬性。

只有「與其他應用程式共用資料」或「應該由其他應用程式叫用」的應用程式元件才會匯出

SC-AC2 CR-0
SC-4

所有意圖和廣播訊息都遵循最佳做法:

  1. 如果目的地應用程式經過明確定義,請使用明確意圖
  2. 使用 Intent 將權限延後到擁有該權限的其他應用程式。
  3. 在不同應用程式之間安全地共用資料
  4. 包含酬載的意圖會在使用前完成驗證
  5. 如果需要將 Intent 傳送到其他應用程式,讓接收應用程式可以叫用並且預期在呼叫應用程式中收到回呼,請勿在額外項目中加入巢狀意圖。使用 PendingIntent。
  6. 設定 PendingIntent 時,在適用情況下明確設定不可變動的旗標
SC-AC3 SC-3 「在不同應用程式之間共用內容」的所有元件都會針對自訂權限使用 android:protectionLevel="signature"。這包括活動服務廣播接收器,特別是內容供應器

應用程式不應仰賴存取已安裝的套件清單。自 Android 11 起,這項存取權已受到限制。

網路 SC-N1 SC-9 所有網路流量都是透過 SSL 傳送。
SC-N2 SC-6 應用程式會宣告網路安全性設定
SC-N3 如果應用程式使用 Google Play 服務,系統會在應用程式啟動時初始化安全性提供者
WebViews SC-W1 SC-6 請勿使用 setAllowUniversalAccessFromFileURLs() 存取本機內容,而是改用 WebViewAssetLoader
SC-W2 SC-7 WebView 不應與不受信任的內容搭配使用 addJavaScriptInterface()

如果是 Android 6.0 以上版本,請改用 HTML 訊息管道

執行 SC-E1 應用程式不會從應用程式 APK 外部動態載入程式碼。開發人員應使用 Android App Bundle,其中包含 Play Feature DeliveryPlay Asset Delivery

自 2021 年 8 月起,Google Play 商店中的所有新應用程式都必須採用 Android App Bundle。

密碼學 SC-C1 應用程式採用由平台提供的強大密碼演算法,以及隨機號碼產生器。此外,應用程式沒有導入自訂演算法。

Google Play

確認應用程式可在 Google Play 上發布。

領域 ID 測試 說明
政策 GP-P1 GP-all 應用程式應嚴格遵循《Google Play 開發人員內容政策》的條款,且不提供不當內容、不使用他人的智慧財產或品牌等。
GP-P2 GP-1 根據《內容分級規範》,設定適當的應用程式心智成熟度。
應用程式詳細資料頁面 GP-D1 GP-1
GP-2

應用程式的主題圖片遵循這篇支援文章中列出的準則。請確認下列項目:

  1. 應用程式資訊包含高品質的主題圖片。
  2. 主題圖片未包含裝置圖片、螢幕截圖,或者是在應用程式的最小目標螢幕尺寸上顯示及畫面縮小時難以辨讀的小型文字。
  3. 主題圖片不能類似廣告。
GP-D2 GP-1 應用程式的螢幕截圖和影片不會顯示或參照非 Android 裝置。
GP-D3 GP-1 應用程式螢幕截圖或影片不會以誤導方式呈現應用程式的內容和使用體驗。
使用者支援 GP-X1 GP-1 使用者在 Google Play 頁面的「評論」分頁中回報的常見錯誤均獲得解決 (如果這些錯誤可重現且在眾多不同裝置上發生)。如果是僅有少數裝置會出現的錯誤,且這些裝置相當熱門或是新推出的裝置,您仍然必須予以解決。

設定測試環境

為設定這份檢查清單的測試環境,建議您採取下列做法:

  • 著重於模擬器測試:Android Emulator 是針對不同 Android 版本和螢幕解析度測試應用程式的好方法。建議您設定模擬裝置 (AVD) 來代表目標使用者族群最常用的板型規格和硬體/軟體組合。除了測試手機外,我們也建議您至少使用以下模擬器測試其他板型規格:
    • 折疊式裝置 - 7.6 吋折疊式裝置搭配外部螢幕 (列在 AVD Manager 的手機下方)。
    • 平板電腦 - Pixel C 9.94 吋 (2,560px x 1,800px)。
    • 如果是行動應用程式通知測試,請將行動裝置/模擬器與 Wear OS 模擬器 (Wear OS 圓形 1.84 吋) 配對。
  • 硬體裝置:測試環境應包含少數實際硬體裝置,且這些裝置可代表目前消費者使用的主要板型規格和硬體/軟體組合。您沒有必要測試市面上的「每一種」裝置,反而應該著重在少數有代表性的裝置上,甚至可以每種板型規格使用一到兩種裝置。
  • 裝置 Test Lab:您也可以利用 Firebase Test Lab 等第三方服務,在各種裝置上測試應用程式。
  • 使用最新的 Android 版本進行測試:除了針對目標使用者族群測試代表性 Android 版本以外,您也必須一律使用最新版本的 Android (目前是 Android 11) 進行測試。如此可確保最新的行為變更不會對使用者體驗造成負面影響。

如需更全面的測試指引 (包括單元測試、整合測試和 UI 測試),請參閱 Android 測試基礎知識相關說明。

測試程序

這些測試程序可協助您發現應用程式的各種品質問題。您可以在自己的測試計劃中結合不同的測試或整合多個測試群組。如要瞭解與這些測試程序的相關標準,請參閱上方章節。

類型 Test 說明
核心套件 CR-0

導覽至應用程式的所有部分:所有畫面、對話方塊、設定和所有使用者流程。

  1. 如果應用程式允許編輯/製作內容、玩遊戲或播放媒體,請務必測試這些流程。
  2. 測試應用程式時,引入其他應用程式的干擾,例如接收通知或來電;將暫時性變更套用至裝置屬性,例如網路連線、電池功能、GPS 可用性和系統負載。
  3. 輸入並測試所有應用程式內購流程。
CR-1 在每個應用程式畫面中按下裝置的主畫面鍵,或以手勢操作向上滑動,然後在「所有應用程式」畫面中重新啟動應用程式。
CR-2 在每個應用程式畫面中,切換至另一個執行中的應用程式,然後再使用「最近使用的應用程式」切換器返回測試中的應用程式。
CR-3 在每個應用程式畫面 (和對話方塊) 中按下返回按鈕,或使用返回滑動手勢。
CR-5 在每個應用程式畫面中,以橫向和縱向交替旋轉裝置,並折疊/展開裝置至少三次。
CR-6 切換至另一個應用程式,將測試應用程式送入背景。前往「設定」,查看測試應用程式是否同時在背景中執行任何服務。如果使用 Android 4.0 以上版本,請前往「應用程式」畫面,在「執行中」分頁尋找該應用程式。
CR-7 按下電源鍵讓裝置進入休眠狀態,然後再次按下電源按鈕來喚醒螢幕。
CR-8 在裝置上設定螢幕鎖定。按下電源鍵讓裝置進入休眠狀態 (即鎖定裝置)。接著再次按下電源鍵,喚醒螢幕並解鎖裝置。
CR-9 觸發應用程式能顯示的所有類型通知,並留意通知匣中的接收情形。在適用情況下展開通知 (Android 4.1 以上版本),然後輕觸所有可用的操作。
CR-10 查看打盹和應用程式待命的其他用途支援功能。
安裝在 SD 卡上 SD-1 針對已安裝至裝置 SD 卡的應用程式重複進行「核心套件」系列測試 (如果應用程式支援這種安裝方式)。

如須將應用程式移至 SD 卡,您可以依序前往「設定」>「應用程式資訊」>「移至 SD 卡」。

效能和穩定性 SP-1 查看 Android 資訊清單檔案和建構設定,確保應用程式是根據最新可用的 SDK (targetSdkcompileSdk) 建構而成。
SP-2 查看 build.gradle 檔案是否有任何過時的依附元件。
SP-3 使用 Android Studio Lint 工具偵測非 SDK 介面的使用情形。您也可以使用其他替代測試方法
監控效能 PM-1 在啟用 StrictMode 剖析功能的情況下重複進行「核心套件」系列測試。

密切注意垃圾收集情況,以及對使用者體驗的影響。

電池 BA-1 在打盹和應用程式待命週期中重複進行「核心套件」系列測試。

密切留意鬧鐘、計時器、通知、同步處理作業等情形。如要瞭解相關需求和準則,請參閱「使用打盹和應用程式待命測試」相關說明。

安全性 SC-1 檢查儲存在外部儲存空間中的所有資料。
SC-2 檢查應用程式如何控制及處理從外部儲存空間載入的資料。
SC-3 檢查 Android 資訊清單檔案中定義的所有內容供應器。確保每個供應者都有合適的 protectionLevel
SC-4 檢查應用程式在資訊清單檔案、執行階段和裝置上應用程式設定畫面 (「設定」>「應用程式資訊」) 中所需的所有權限。
SC-5 檢查 Android 資訊清單檔案中定義的所有應用程式元件匯出狀態是否適當。所有元件都必須明確設定匯出的屬性。
SC-6 檢查應用程式的網路安全性設定,確認設定的 Lint 檢查沒有失敗情形。
SC-7 針對每個 WebView,導覽至需要使用 JavaScript 的網頁。
SC-8 在每個 WebView 中,嘗試導覽至應用程式未直接載入的網站和內容。
SC-9 宣告會停用明文流量的網路安全性設定,然後測試應用程式。
SC-10 執行應用程式並應用所有核心功能,同時觀察裝置記錄。不得記錄任何使用者私人資訊。
Google Play GP-1 登入 Google Play 管理中心查看開發人員設定檔、應用程式說明、螢幕截圖、主題圖片、內容分級和使用者意見回饋。
GP-2 下載主題圖片和螢幕截圖,然後根據目標裝置的螢幕尺寸和板型規格縮小這些圖片。
GP-3 檢查所有圖片資源、媒體、文字、程式碼程式庫,以及應用程式或下載的擴充檔案所封裝的其他內容。

使用 StrictMode 進行測試

如要進行效能測試,建議您在應用程式中啟用 StrictMode,用於擷取可能影響效能、網路存取、檔案讀取/寫入等的作業。找出主執行緒和其他執行緒上可能有問題的作業。

您可以使用 StrictMode.ThreadPolicy.Builder 為每個執行緒設定監控政策,同時使用 detectAll()ThreadPolicy 中啟用所有支援的監控方式。

請務必使用 penaltyFlashScreen(),為 ThreadPolicy 的違反政策情形啟用視覺式通知