

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 針對 AWS Device Farm 中的 Android 應用程式測試進行故障診斷
<a name="troubleshooting-android-applications"></a>

下列主題會列出在上傳 Android 應用程式測試期間出現的錯誤訊息，並建議解決每個錯誤的解決方法。

**注意**  
以下說明以 Linux x86\$164 和 Mac 為基礎。

## ANDROID\$1APP\$1UNZIP\$1FAILED
<a name="ANDROID_APP_UNZIP_FAILED"></a>

如果您看到下列訊息，請依照以下步驟修復問題。

**警告**  
無法開啟您的應用程式。請確認檔案是否有效，然後再試一次。

請確認您可以正確解壓縮應用程式套件。在下列範例中，套件的名稱是 **app-debug.apk**。

1. 將您的測試套件複製到工作目錄，然後執行下列命令：

   ```
   $ unzip app-debug.apk
   ```

1. 成功解壓縮套件後，您可以透過執行下列命令找到樹狀結構的工作目錄：

   ```
   $ tree .
   ```

   有效的 Android 應用程式套件應產生輸出如下：

   ```
   .
   |-- AndroidManifest.xml
   |-- classes.dex
   |-- resources.arsc
   |-- assets (directory)
   |-- res (directory)
   `-- META-INF (directory)
   ```

   如需詳細資訊，請參閱[AWS Device Farm 中的 Android 測試](test-types-android-tests.md)。

## ANDROID\$1APP\$1AAPT\$1DEBUG\$1BADGING\$1FAILED
<a name="ANDROID_APP_AAPT_DEBUG_BADGING_FAILED"></a>

如果您看到下列訊息，請依照以下步驟修復問題。

**警告**  
無法擷取應用程式的相關資訊。請執行命令 `aapt debug badging <path to your test package>`，確認應用程式是否有效，並在命令未列印任何錯誤後再試一次。

在上傳驗證程序期間，AWS Device Farm 會從 `aapt debug badging <path to your package>`命令的輸出中剖析資訊。

請確認您可以在 Android 應用程式上成功執行此命令。在下列範例中，套件的名稱是 **app-debug.apk**。
+ 將您的應用程式套件複製到工作目錄，然後執行命令：

  ```
  $ aapt debug badging app-debug.apk
  ```

  有效的 Android 應用程式套件應產生輸出如下：

  ```
  package: name='com.amazon.aws.adf.android.referenceapp' versionCode='1' versionName='1.0' platformBuildVersionName='5.1.1-1819727'
  sdkVersion:'9'
  application-label:'ReferenceApp'
  application: label='ReferenceApp' icon='res/mipmap-mdpi-v4/ic_launcher.png'
  application-debuggable
  launchable-activity: name='com.amazon.aws.adf.android.referenceapp.Activities.MainActivity'  label='ReferenceApp' icon=''
  uses-feature: name='android.hardware.bluetooth'
  uses-implied-feature: name='android.hardware.bluetooth' reason='requested android.permission.BLUETOOTH permission, and targetSdkVersion > 4'
  main
  supports-screens: 'small' 'normal' 'large' 'xlarge'
  supports-any-density: 'true'
  locales: '--_--'
  densities: '160' '213' '240' '320' '480' '640'
  ```

  如需詳細資訊，請參閱[AWS Device Farm 中的 Android 測試](test-types-android-tests.md)。

## ANDROID\$1APP\$1PACKAGE\$1NAME\$1VALUE\$1MISSING
<a name="ANDROID_APP_PACKAGE_NAME_VALUE_MISSING"></a>

如果您看到下列訊息，請依照以下步驟修復問題。

**警告**  
在應用程式中找不到套件名稱值。請執行命令 `aapt debug badging <path to your test package>` 驗證應用程式是否有效，並在以關鍵字「package：name」找到套件名稱值後再試一次。

在上傳驗證程序期間，AWS Device Farm 會從 `aapt debug badging <path to your package>`命令的輸出剖析套件名稱值。

請確認您可以在 Android 應用程式上執行此命令，並成功找到套件名稱值。在下列範例中，套件的名稱是 **app-debug.apk**。
+ 將您的應用程式套件複製到工作目錄，然後執行下列命令：

  ```
  $ aapt debug badging app-debug.apk | grep "package: name="
  ```

  有效的 Android 應用程式套件應產生輸出如下：

  ```
  package: name='com.amazon.aws.adf.android.referenceapp' versionCode='1' versionName='1.0' platformBuildVersionName='5.1.1-1819727'
  ```

  如需詳細資訊，請參閱[AWS Device Farm 中的 Android 測試](test-types-android-tests.md)。

## ANDROID\$1APP\$1SDK\$1VERSION\$1VALUE\$1MISSING
<a name="ANDROID_APP_SDK_VERSION_VALUE_MISSING"></a>

如果您看到下列訊息，請依照以下步驟修復問題。

**警告**  
在應用程式中找不到軟體開發套件版本值。請執行命令 `aapt debug badging <path to your test package>` 驗證應用程式是否有效，並在以關鍵字 `sdkVersion` 找到軟體開發套件版本值後再試一次。

在上傳驗證程序期間，AWS Device Farm 會從 `aapt debug badging <path to your package>`命令的輸出剖析 SDK 版本值。

請確認您可以在 Android 應用程式上執行此命令，並成功找到套件名稱值。在下列範例中，套件的名稱是 **app-debug.apk**。
+ 將您的應用程式套件複製到工作目錄，然後執行下列命令：

  ```
  $ aapt debug badging app-debug.apk | grep "sdkVersion"
  ```

  有效的 Android 應用程式套件應產生輸出如下：

  ```
  sdkVersion:'9'
  ```

  如需詳細資訊，請參閱[AWS Device Farm 中的 Android 測試](test-types-android-tests.md)。

## ANDROID\$1APP\$1AAPT\$1DUMP\$1XMLTREE\$1FAILED
<a name="ANDROID_APP_AAPT_DUMP_XMLTREE_FAILED"></a>

如果您看到下列訊息，請依照以下步驟修復問題。

**警告**  
在應用程式中找不到有效的 AndroidManifest.xml。請執行命令 `aapt dump xmltree <path to your test package> AndroidManifest.xml`，確認測試套件是否有效，並在命令未列印任何錯誤後再試一次。

在上傳驗證程序期間，AWS Device Farm 會使用 命令，從 XML 剖析樹狀目錄中剖析包含在套件中的 XML 檔案的資訊`aapt dump xmltree <path to your package> AndroidManifest.xml`。

請確認您可以在 Android 應用程式上成功執行此命令。在下列範例中，套件的名稱是 **app-debug.apk**。
+ 將您的應用程式套件複製到工作目錄，然後執行下列命令：

  ```
  $ aapt dump xmltree app-debug.apk. AndroidManifest.xml
  ```

  有效的 Android 應用程式套件應產生輸出如下：

  ```
  N: android=http://schemas.android.com/apk/res/android
    E: manifest (line=2)
      A: android:versionCode(0x0101021b)=(type 0x10)0x1
      A: android:versionName(0x0101021c)="1.0" (Raw: "1.0")
      A: package="com.amazon.aws.adf.android.referenceapp" (Raw: "com.amazon.aws.adf.android.referenceapp")
      A: platformBuildVersionCode=(type 0x10)0x16 (Raw: "22")
      A: platformBuildVersionName="5.1.1-1819727" (Raw: "5.1.1-1819727")
      E: uses-sdk (line=7)
        A: android:minSdkVersion(0x0101020c)=(type 0x10)0x9
        A: android:targetSdkVersion(0x01010270)=(type 0x10)0x16
      E: uses-permission (line=11)
        A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
      E: uses-permission (line=12)
        A: android:name(0x01010003)="android.permission.CAMERA" (Raw: "android.permission.CAMERA")
  ```

  如需詳細資訊，請參閱[AWS Device Farm 中的 Android 測試](test-types-android-tests.md)。

## ANDROID\$1APP\$1DEVICE\$1ADMIN\$1PERMISSIONS
<a name="ANDROID_APP_DEVICE_ADMIN_PERMISSIONS"></a>

如果您看到下列訊息，請依照以下步驟修復問題。

**警告**  
您的應用程式需要裝置管理許可。請執行命令 `aapt dump xmltree <path to your test package> AndroidManifest.xml`，確認是否不需要許可，並在確認輸出不包含關鍵字 `android.permission.BIND_DEVICE_ADMIN` 後再試一次。

在上傳驗證程序期間，AWS Device Farm 會使用命令 從套件中包含的 xml 檔案的 xml 剖析樹中剖析許可資訊`aapt dump xmltree <path to your package> AndroidManifest.xml`。

請確認您的應用程式是否不需要裝置管理許可。在下列範例中，套件的名稱是 **app-debug.apk**。
+ 將您的應用程式套件複製到工作目錄，然後執行下列命令：

  ```
  $ aapt dump xmltree app-debug.apk AndroidManifest.xml
  ```

  輸出應顯示如下：

  ```
  N: android=http://schemas.android.com/apk/res/android
    E: manifest (line=2)
      A: android:versionCode(0x0101021b)=(type 0x10)0x1
      A: android:versionName(0x0101021c)="1.0" (Raw: "1.0")
      A: package="com.amazonaws.devicefarm.android.referenceapp" (Raw: "com.amazonaws.devicefarm.android.referenceapp")
      A: platformBuildVersionCode=(type 0x10)0x16 (Raw: "22")
      A: platformBuildVersionName="5.1.1-1819727" (Raw: "5.1.1-1819727")
      E: uses-sdk (line=7)
        A: android:minSdkVersion(0x0101020c)=(type 0x10)0xa
        A: android:targetSdkVersion(0x01010270)=(type 0x10)0x16
      E: uses-permission (line=11)
        A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
      E: uses-permission (line=12)
        A: android:name(0x01010003)="android.permission.CAMERA" (Raw: "android.permission.CAMERA")
          ……
  ```

  如果 Android 應用程式是有效的，輸出應不包含下列項目：`A: android:name(0x01010003)="android.permission.BIND_DEVICE_ADMIN" (Raw: "android.permission.BIND_DEVICE_ADMIN")`。

  如需詳細資訊，請參閱[AWS Device Farm 中的 Android 測試](test-types-android-tests.md)。

## Android 應用程式中的某些視窗會顯示空白或黑色畫面
<a name="flag-secure-screen-issue"></a>

如果您正在測試 Android 應用程式，並注意到應用程式中的某些視窗在 Device Farm 測試的影片錄製中顯示黑色畫面，您的應用程式可能正在使用 Android `FLAG_SECURE`的功能。此標記 （如 [Android 官方文件](https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SECURE)所述） 用於防止螢幕錄製工具記錄應用程式的特定時段。因此，如果視窗使用此旗標，Device Farm 的畫面錄製功能 （適用於自動化和遠端存取測試） 可能會顯示黑色畫面，以取代應用程式的視窗。

開發人員通常會將此標記用於應用程式中包含登入頁面等敏感資訊的頁面。如果您看到黑螢幕取代應用程式登入頁面等特定頁面的螢幕，請與您的開發人員合作，以取得未使用此標記進行測試的應用程式組建。

此外，請注意 Device Farm 仍可與具有此旗標的應用程式視窗互動。因此，如果您應用程式的登入頁面顯示為黑色畫面，您仍然可以輸入登入資料以登入應用程式 （因此檢視未被`FLAG_SECURE`旗標封鎖的頁面）。