

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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>

다음 메시지가 표시되면 다음 단계에 따라 문제를 해결하세요.

**주의**  
애플리케이션에서 SDK 버전 값을 찾을 수 없습니다. `aapt debug badging <path to your test package>` 명령을 실행하여 애플리케이션이 유효한지 확인하고 키워드 `sdkVersion` 뒤에 있는 SDK 버전 값을 찾은 후 다시 시도하세요.

업로드 검증 프로세스 중에 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은 `aapt dump xmltree <path to your package> AndroidManifest.xml` 명령을 사용하여 패키지에 포함된 XML 파일의 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은 `aapt dump xmltree <path to your package> AndroidManifest.xml` 명령을 사용하여 패키지 내에 포함된 xml 파일의 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` 플래그로 차단되지 않은 페이지를 볼 수 있습니다.