本頁面列出可用於評估 Android 相機硬體抽象層 (HAL) 的所有測試。這項工具適用於原始設備製造商 (OEM) 和應用程式處理器 (AP) 供應商,讓他們確保相機 HAL 正確實作,並減少瑕疵。雖然這是 Android 相容性測試套件 (CTS) 的額外自願項目,但它可大幅增加相機測試涵蓋率,並確實找出潛在的錯誤。
通過這些測試後,原始設備製造商 (OEM) 即可驗證是否已正確整合 Android 相機硬體抽象層 (HAL) 3 介面。符合檢查清單中的所有項目時,Android 相機 HAL 介面的裝置實作可能會視為「完整」。這會反過來讓裝置正確支援相機應用程式建構的
android.hardware.camera2
套件。
Camera HAL 3 規格
Android Camera HAL3 規格是有關裝置必須滿足的資訊權威來源;本頁提供可用於檢查清單的所有測試摘要。相機 HAL 實作器 (例如 AP 供應商) 應逐行檢查相機 HAL3 規格,確保其裝置符合規範。
現行 HAL 規格是由 Android 5.0 以上版本的一般 Android 平台開發套件 (PDK) 中的檔案定義:
- Camera HAL 3.x 介面和規格:
hardware/libhardware/include/hardware/camera3.h
、hardware/libhardware/include/hardware/camera_common.h
- 相機 HAL 3.x 中繼資料規格:
system/media/camera/docs/docs.html
- HAL 像素格式介面和規格:
system/core/libsystem/include/system/graphics.h
相機測試類型
以下是適用於最新 Android 相機的主要測試類型,以及相關操作說明的參考資料:
- 供應商測試套件 (VTS):直接測試攝影機 HAL 介面的測試
- Compatibility Test Suite (CTS):為確保裝置相容性,提供標準的自動化 Android 測試。詳情請參閱「相容性測試套件」和「Trade Federation 總覽」。
- 圖片測試套件 (ITS):手動執行測試,確保圖片正確無誤。詳情請參閱「相機 ITS」。
- 手動 TestingCam 測試:從
pdk/apps/TestingCamera/
中的來源執行 - 手動測試 Cam2.1 測試:從
pdk/apps/TestingCamera2/
中的來源執行
下文將詳細說明所有這些測試類型。這些測試會依照原始設備製造商 (OEM) 預期執行的時間順序呈現。
舉例來說,如果裝置未通過原生測試,就一定會在後續的 Compatibility Test Suite (CTS) 測試中失敗。如果裝置未通過 CTS,就沒有必要繼續進行 Image Test Suite (ITS)。建議您先解決各項測試類型的失敗問題,再繼續進行下一組測試。
供應商測試套件 (VTS) 測試
Android 供應商測試套件 (VTS) 是可在 HIDL 介面層級運作的測試套件。如要進一步瞭解如何使用 VTS,請參閱「供應商測試套件」。
Compatibility Test Suite (CTS) 測試
Camera Android Compatibility Test Suite (CTS) 測試著重於裝置相容性。如要瞭解如何設定測試環境,請參閱「設定 CTS」。
相機 CTS 測試的起始路徑為:platform/cts
。
針對支援外接攝影機 (例如 USB 網路攝影機) 的裝置執行攝影機 CTS 時,您必須在執行 CTS 時插入裝置,否則測試會自動失敗。外接攝影機的例子包括:Logitech HD Pro Webcam C920 和 Microsoft LifeCam HD-3000。
如需執行 CTS 的一般操作說明,請參閱 CTS 簡介及其子頁面。
android.hardware.Camera
API 的 CTS 測試
在 cts/tests/tests/
底下找到下列攝影機測試:
hardware/src/android/hardware/cts/CameraTest.java
hardware/src/android/hardware/cts/CameraGLTest.java
hardware/src/android/hardware/cts/Camera_SizeTest.java
permission/src/android/permission/cts/CameraPermissionTest.java
android.hardware.camera2
API 的 CTS 測試
在 cts/tests/tests/
底下找到下列攝影機測試:
hardware/src/android/hardware/camera2/cts/*
permission/src/android/permission/cts/Camera2PermissionTest.java
CTS 驗證器攝影機測試
這些攝影機測試項目位於以下位置:
cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
圖像測試套件 (ITS) 測試
攝影機圖像測試套件 (ITS) 測試著重於圖像正確性。如要執行測試,請在工作站上執行 Python 指令碼,並透過 USB 連接 Android 裝置。
攝影機 ITS 基礎架構和測試位於
cts/apps/CameraITS
目錄中。每項測試都位於 tests/scene#
子目錄中。
如要進一步瞭解如何設定及執行測試,請參閱「相機 ITS」。
如需場景和測試說明,請參閱「攝影機 ITS 測試」。
ITS 測試結果只有通過或失敗。每個場景資料夾中的所有必要測試都必須通過。未修訂的測試可能會失敗,且仍會計為 CtsVerifier
中的傳遞。
ITS 會測試 CTS 未測試的測試情境,也是 HAL 3.2 測試計畫的重要元件。
媒體架構測試
在 MediaFrameworkTest 中,通過所有相機相關的媒體測試。請注意,這些測試需要在 Android 裝置上安裝 mediaframeworktest.apk。您必須先make mediaframeworktest
,然後使用 ADB 安裝產生的 .apk。請參閱下方指令範例。
相機相關媒體架構測試的起始路徑為:
platform/frameworks/base
如要查看測試程式碼,請按一下以下連結:frameworks/base/media/tests/MediaFrameworkTest
如何設定這些測試:
make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk
其中 name 變數代表包含供應商產品的目錄。
在下列目錄或其子目錄中尋找所有測試:
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
每個子目錄都代表一種測試類別:
functional/
integration/
performance/
power/
stress/
unit/
執行媒體架構測試
如要查看所有可用測試:
adb shell pm list instrumentation
這會產生類似以下的結果:
instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner (target=com.android.mediaframeworktest)
找出並擷取元件 (位於每個測試行中的 instrumentation:
和 (target=com.android.mediaframeworktest)
之間)。元件是由目標套件名稱 (com.android.mediaframeworktest
) 和測試執行器名稱 (MediaFramework
) 組成。
例如:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
接著,您可以將每個元件傳遞至 adb shell am instrument
,如下所示:
adb shell am instrument -w component.name
其中 component.name
等於上述擷取的值。例如:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
請注意,雖然類別路徑是 Java 套件 + 類別名稱,但檢測套件不一定與 Java 套件相同。連結元件名稱時,請務必使用 AndroidManifest.xml 套件,而不是測試執行工具類別所在的 Java 套件。
如要執行單一類別測試,請傳送 -e 類別
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
如要只在測試類別中執行單一方法,請在類別名稱後方加上井號 (#) 符號和方法名稱 (在本例中為 testConnectPro
),如下所示:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
媒體設定功能測試
以下是功能測試的執行範例。這項測試會驗證不同相機設定組合的基本功能。(即閃光燈、曝光、白平衡、場景、相片大小和地理標記)
執行測試指令:
adb shell am instrument -w -r -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner
媒體整合測試
以下是執行整合測試的範例,在本例中是 mediaframeworktest/integration/CameraBinderTest.java 和 mediaframeworktest/CameraStressTestRunner.java:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
如果成功,輸出內容會類似以下內容:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
媒體成效測試
系統會開啟這個預覽記憶體測試,並發布相機預覽畫面 200 次。每隔 20 次疊代,系統就會記錄 ps mediaserver 的快照,並比較 200 次疊代後的記憶體用量差異。如果差異超過 150 公里,測試就會失敗。
執行測試指令:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
如需更詳細的輸出內容,請參閱:
/sdcard/mediaMemOutput.txt
媒體單元測試
執行單元測試的指令都很相似。舉例來說,CameraMetadataTest.java 的指令會是:
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
媒體壓力測試
這項測試旨在測試相機的圖像擷取和錄影功能。
執行測試指令:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
所有測試都應通過。
手動測試 Cam 測試
請執行下列檢查,然後手動執行 TestingCam 應用程式。TestingCam 的來源如下:pdk/apps/TestingCamera/
相機傾斜時的無限遠對焦
啟動 TestingCam,開啟預覽畫面,並確認自動對焦模式已設為無限。使用「拍照」按鈕,將相機鏡頭對準水平、向上 (接近垂直) 和向下 (接近垂直) 拍攝遠處的拍攝對象 (至少 10 公尺遠)。向上拍攝的例子包括從樹下拍攝樹木的高葉/樹枝,向下拍攝的例子則包括從建築物屋頂拍攝街道。無論如何,遠處的主體都應清晰可見且處於對焦狀態。您可以儲存並查看圖片庫檢視畫面中的相片,這樣就能輕鬆放大及檢查清晰度。
請注意,如果相機配備 VCM 致動器,則必須使用閉迴自動對焦控制系統,或是使用加速度計資料判斷相機方向的某種軟體修正方式,才能通過這項測試。也需要可靠的鏡頭無限遠位置工廠校正。
手動測試 Cam2 測試
請手動執行 TestingCam2 應用程式,並執行下列檢查。TestingCam2 的來源位置:pdk/apps/TestingCamera2/
JPEG 擷取
啟動 TestingCam2,然後按下「JPEG」按鈕。在取景器圖像右側顯示的圖像應與取景器相同,包括方向相同。