The Android Developer Challenge is back! Submit your idea before December 2.

앱 빌드 및 실행

Android 스튜디오는 새로운 프로젝트를 클릭 몇 번만으로 Android 에뮬레이터 또는 연결된 기기에 배포할 수 있도록 설정합니다. 앱이 설치되면 Instant Run을 사용하여 새로운 APK를 빌드하지 않고 코드 변경사항을 푸시할 수 있습니다.

앱을 빌드하고 실행하려면 메뉴 바에서 Run > Run을 선택하거나 툴바에서 Run 을 클릭하세요. 처음으로 앱을 실행하는 경우 그림 1과 같이 Android 스튜디오에서 타겟 대상을 선택하라는 메시지가 표시됩니다. 앱을 설치하고 실행할 기기를 선택하세요.

그림 1. 사용 가능한 기기가 표시되는 Select Deployment Target 대화상자

대화상자에 'No USB devices or running emulators detected'라고 표시되면 기기를 설정하고 연결하거나 Available Virtual Devices 아래 표시된 기기를 클릭하여 에뮬레이터를 시작해야 합니다. 가상 기기가 나열되지 않으면 Create New Virtual Device를 클릭하고 Virtual Device Configuration 마법사를 따르세요(가상 기기 만들기 및 관리 참조).

Select Deployment Target 대화상자를 표시하려면 Use same device for future launches를 선택 해제하거나 Run > Stop app 또는 Stop 을 사용하여 앱을 중지한 다음 다시 시작하세요.

참고: Debug 를 클릭하여 디버그 모드에서 앱을 배포할 수도 있습니다. 디버그 모드에서 앱을 실행하면 코드에서 중단점을 설정하고, 런타임에 변수를 검사하고 표현식을 평가하며, 디버깅 도구를 실행할 수 있습니다. 자세한 내용은 앱 디버그를 참조하세요.

실행/디버그 구성 변경

앱을 처음으로 실행하는 경우 Android 스튜디오에서 기본 실행 구성이 사용됩니다. 실행 구성은 APK 또는 Android App Bundle에서 앱을 배포할지 여부, 실행할 모듈, 배포할 패키지, 시작할 활동, 타겟 기기, 에뮬레이터 설정, logcat 옵션 등을 지정합니다.

기본 실행/디버그 구성은 APK를 빌드하고, 기본 프로젝트 활동을 시작하며, Select Deployment Target 대화상자를 타겟 기기를 선택하는 데 사용합니다. 기본 설정이 프로젝트 또는 모듈에 적합하지 않은 경우 실행/디버그 구성을 맞춤설정하거나 프로젝트, 기본 및 모듈 수준에서 새 구성을 만들 수도 있습니다. 실행/디버그 구성을 수정하려면 Run > Edit Configurations를 선택하세요. 자세한 내용은 실행/디버그 구성 만들기 및 수정을 참조하세요.

빌드 변형 변경

기본적으로 Android 스튜디오에서는 앱의 디버그 버전을 빌드하며, 이 버전은 개발하는 동안 Run을 클릭하는 경우에만 사용할 수 있습니다.

Android 스튜디오에서 사용하는 빌드 변형을 변경하려면 메뉴 바에서 Build > Select Build Variant를 선택하거나 도구 창 바에서 Build Variants 를 클릭한 다음 드롭다운 메뉴에서 빌드 변형을 선택하세요. 기본적으로 새 프로젝트는 디버그와 출시 변형의 두 가지 빌드 변형으로 설정됩니다. 앱의 공개 버전을 준비하려면 출시 변형을 빌드해야 합니다.

기능 또는 기기 요구사항이 서로 다른 여러 앱 변형을 빌드하기 위해 추가적인 빌드 변형을 정의할 수 있습니다.

프로젝트 빌드

Run 버튼을 누르면 앱이 빌드되어 기기에 배포됩니다. 하지만 Google Play에 공유하거나 업로드할 앱을 빌드하려면 Build 메뉴의 옵션 중 하나를 사용하여 프로젝트의 일부 또는 전부를 컴파일해야 합니다. 표 1에 나열된 빌드 옵션을 선택하기 전에 먼저 사용할 빌드 변형을 선택해야 합니다.

표 1. Build 메뉴의 빌드 옵션

메뉴 항목 설명
Make Module 마지막 빌드 이후 수정된, 선택된 모듈의 모든 소스 파일 및 선택된 모듈이 종속되는 모든 모듈을 반복적으로 컴파일합니다. 컴파일에는 종속된 소스 파일 및 관련된 모든 빌드 작업이 포함됩니다. Project 창에서 모듈 이름 또는 모듈의 파일 중 하나를 선택하여 빌드할 모듈을 선택할 수 있습니다. 이 명령어는 APK를 생성하지 않습니다.
Make Project 모든 모듈을 만듭니다.
Clean Project 중간/캐싱된 파일을 모두 삭제합니다.
Rebuild Project 선택된 빌드 변형에 관해 Clean Project를 실행하고 APK를 생성합니다.
Build Bundle(s) / APK(s) > Build APK(s)

선택된 변형에 관해 현재 프로젝트 내 모든 모듈의 APK를 빌드합니다. 빌드가 완료되면 확인 알림이 표시되고, APK 파일의 링크 및 APK Analyzer에서 APK 파일을 분석하기 위한 링크가 표시됩니다.

선택한 빌드 변형이 디버그 빌드 유형인 경우 APK가 디버그 키로 서명되고 설치할 준비가 됩니다. 출시 변형을 선택한 경우, 기본적으로 APK가 서명되지 않으며 수동으로 APK에 서명해야 합니다. 또는 메뉴 바에서 Build > Generate Signed Bundle / APK를 선택할 수 있습니다.

Android 스튜디오는 빌드된 APK를 project-name/module-name/build/outputs/apk/에 저장합니다.

Build Bundle(s) / APK(s) > Build Bundle(s)

선택된 변형에 관해 현재 프로젝트 내 모든 모듈의 Android App Bundle을 빌드합니다. 빌드가 완료되면 확인 알림이 표시되고, App Bundle의 링크 및 APK Analyzer에서 App Bundle을 분석하기 위한 링크가 표시됩니다.

선택한 빌드 변형이 디버그 빌드 유형인 경우 App Bundle이 디버그 키로 서명되며, bundletool을 사용하여 앱을 App Bundle에서 연결된 기기에 배포할 수 있습니다. 출시 변형을 선택한 경우, 기본적으로 App Bundle이 서명되지 않으며 jarsigner를 사용하여 수동으로 App Bundle에 서명해야 합니다. 또는 메뉴 바에서 Build > Generate Signed Bundle / APK를 선택할 수 있습니다.

Android 스튜디오는 빌드된 APK를 project-name/module-name/build/outputs/bundle/에 저장합니다.

Generate Signed Bundle / APK 새로운 서명 구성을 설정할 수 있는 마법사가 포함된 대화상자를 표시하고, 서명된 App Bundle 또는 APK를 빌드합니다. 출시 키로 앱에 서명해야 앱을 Play Console에 업로드할 수 있습니다. 앱 서명에 관한 자세한 내용은 앱 서명을 참조하세요.

참고: Run 버튼을 누르면 testOnly="true"로 설정되어 APK가 빌드됩니다. 즉, Android 스튜디오에서 사용하는 adb를 통해서만 APK를 설치할 수 있습니다. adb 없이 설치할 수 있는, 디버그 가능한 APK를 빌드하려면 디버그 변형을 선택하고 Build Bundle(s) / APK(s) > Build APK(s)를 클릭하세요.

Gradle이 각 명령어와 관련하여 실행하는 작업에 관한 자세한 내용은 다음 섹션에 설명된 대로 Build 창을 여세요. Gradle 및 빌드 프로세스에 관한 자세한 내용은 빌드 구성을 참조하세요.

빌드 프로세스 모니터링

View > Tool Windows > Build를 클릭하거나 도구 창 바에서 Build 를 클릭하여 빌드 프로세스에 관한 자세한 내용을 확인할 수 있습니다. 창에는 그림 2와 같이, Gradle에서 앱을 빌드하기 위해 실행하는 작업이 표시됩니다.

그림 2. Android 스튜디오의 Build 출력 창

  1. Build 탭: Gradle에서 실행하는 작업을 트리로 표시합니다. 여기서 각 노드는 빌드 단계 또는 작업 종속성의 그룹을 나타냅니다. 빌드 또는 컴파일 시에 오류가 발생하면 아래의 그림 3과 같이 트리를 검사하거나 요소를 선택하여 오류 메시지를 확인하세요.

    그림 3. Build 출력 창의 오류 메시지 검사

  2. Sync 탭: Gradle에서 프로젝트 파일과 동기화하기 위해 실행하는 작업이 표시됩니다. Build 탭과 마찬가지로, 동기화 오류가 발생하면 트리에서 요소를 선택하여 오류에 관해 자세히 알아보세요.
  3. 다시 시작: 프로젝트의 모든 모듈에 관해 중간 빌드 파일을 생성하여 Build > Make Project를 선택하는 것과 동일한 작업을 실행합니다.
  4. 보기 전환: 작업 실행을 그래픽 트리로 표시하거나 Gradle의 더 자세한 텍스트 출력으로 표시합니다. Gradle의 출력은 Android 스튜디오 3.0 이전 버전의 Gradle Console 창에 표시되는 것과 같은 출력입니다.

빌드 변형에서 제품 버전을 사용하는 경우 Gradle에서는 관련 제품 버전을 빌드하는 작업도 호출합니다. 사용 가능한 모든 빌드 작업의 목록을 보려면 View > Tool Windows > Gradle을 클릭하거나 도구 창 바에서 Gradle 을 클릭하세요.

빌드 프로세스 중에 오류가 발생하면 Gradle에서 --stacktrace 또는 --debug와 같이 문제를 해결하는 데 도움이 되는 명령줄 옵션을 추천할 수도 있습니다. 빌드 프로세스에서 명령줄 옵션을 사용하려면 다음 단계를 따르세요.

  1. Settings 또는 Preferences 대화상자를 엽니다.
    • Windows 또는 Linux의 경우 메뉴 바에서 File > Settings를 선택합니다.
    • Mac OSX의 경우 메뉴 바에서 Android Studio > Preferences를 선택합니다.
  2. Build, Execution, Deployment > Compiler로 이동합니다.
  3. Command-line Options 옆의 텍스트 필드에 명령줄 옵션을 입력합니다.
  4. OK를 클릭하여 저장하고 종료합니다.

다음에 앱을 빌드하려고 할 때 Gradle에서 이 명령줄 옵션을 적용합니다.

Instant Run 정보

Android 스튜디오 2.3 이상에서 Instant Run을 사용하면 코드 및 리소스 변경사항으로 APK를 업데이트하는 시간이 크게 줄어듭니다. Android 5.0(API 레벨 21) 이상을 실행하는 타겟 기기에 앱을 배포한 후 Apply Changes 를 클릭하여 새로운 APK를 빌드하지 않고, 경우에 따라서는 현재 활동을 다시 시작하지 않고, 코드 및 리소스 변경사항을 실행 중인 앱에 배포할 수 있습니다. 변경사항을 푸시하고 앱을 강제로 다시 시작하려는 경우 언제든지 Run Debug 버튼을 사용할 수 있습니다. 하지만 Apply Changes 버튼을 사용하면 대부분의 증분 변경사항을 앱에 더 빠르게 적용할 수도 있습니다.

팁: Control + F10(Mac의 경우 Control + Command + R)을 눌러 Instant Run으로 변경사항을 적용할 수도 있습니다.

Apply Changes 작업은 다음 조건을 충족하는 경우에만 사용할 수 있습니다.

  • 디버그 빌드 변형을 사용하여 앱의 APK를 빌드합니다. App Bundle에서 배포할 때 Instant Run이 아직 지원되지 않습니다.
  • Gradle용 Android 플러그인 버전 2.3.0 이상을 사용합니다.
  • 앱의 모듈 수준 build.gradle 파일에서 minSdkVersion을 15 이상으로 설정합니다.
  • Android 5.0(API 레벨 21) 이상을 실행하는 타겟 기기에 앱을 배포합니다.

Instant Run을 사용 설정하는 방법에 관한 자세한 내용은 프로젝트 구성 섹션을 참조하세요.

Instant Run은 핫 스왑, 웜 스왑 또는 콜드 스왑을 실행하여 변경사항을 푸시합니다. Instant Run에서 실행하는 스왑의 유형은 변경사항의 유형에 따라 다릅니다. 실행 중인 앱의 코드 또는 리소스를 변경한 후 Apply Changes 를 클릭하면, 다음 표에 설명된 대로, Instant Run에서 자동으로 타겟 기기에 변경사항을 푸시하는 가장 적절한 방법을 결정합니다.

Run (또는 Debug )을 클릭하면 콜드 스왑이 강제로 실행되고 앱이 다시 시작됩니다. 앱 manifest 또는 manifest에서 참조하는 리소스를 변경하는 경우 Android 스튜디오는 항상 APK를 완전히 재설치하여 변경사항을 푸시합니다.

코드 변경사항 Apply Changes 동작
  • 기존 메서드의 구현 코드 변경

핫 스왑 실행: 가장 빠른 스왑 유형으로 변경사항을 훨씬 더 빠르게 표시합니다. 애플리케이션이 계속 실행되고 다음에 메서드가 호출될 때 새 구현 코드가 포함된 스텁 메서드가 사용됩니다.

핫 스왑은 실행 중인 앱의 객체를 다시 초기화하지 않습니다. 특정한 업데이트를 보려면 Run > Restart Activity를 선택하여 현재 활동을 다시 시작하거나 Run (또는 Debug )을 클릭하여 앱을 다시 시작해야 할 수도 있습니다. 기본적으로, Android 스튜디오에서는 핫 스왑을 실행한 후에 현재 활동을 자동으로 다시 시작합니다. 이 동작을 원하지 않으면 자동 활동 다시 시작을 사용 중지하세요.

  • 기존 리소스 변경 또는 삭제
웜 스왑 실행: 이 스왑도 매우 빠르지만 Instant Run에서 변경된 리소스를 앱에 푸시할 때 현재 활동을 다시 시작해야 합니다. 앱은 계속해서 실행되지만 활동이 다시 시작될 때 화면에 작은 깜빡임이 나타날 수 있으며 이는 정상입니다.
구조적 코드 변경사항. 예:
  • 다음 항목의 추가, 삭제 또는 변경:
    • 주석
    • 인스턴스 필드
    • 정적 필드
    • 정적 메서드 서명
    • 인스턴스 메서드 서명
  • 현재 클래스가 상속하는 상위 클래스 변경
  • 구현된 인터페이스의 목록 변경
  • 클래스의 정적 초기화 프로그램 변경
  • 동적 리소스 ID를 사용하는 레이아웃 요소 재정렬

콜드 스왑 실행: 새 APK가 필요하지 않지만 Instant Run에서 구조적 변경사항을 푸시할 때 앱 전체를 다시 시작해야 하므로 이 스왑은 약간 더 느립니다.

  • 앱 manifest 변경
  • 앱 manifest가 참조한 리소스 변경
  • Android 시스템 UI 요소(예: 위젯, 알림) 변경

앱의 manifest 또는 manifest에서 참조하는 리소스를 변경할 때 Apply Changes 를 클릭하면 이러한 변경사항이 포함된 앱의 전체 빌드가 다시 배포됩니다. 이는 APK가 기기에 설치될 때 manifest에서 앱의 이름, 앱 아이콘 리소스, 인텐트 필터 등 앱에 관한 특정 정보가 결정되기 때문입니다.

빌드 프로세스에서 앱 manifest의 일부가 자동으로 업데이트되는 경우. 예를 들어 versionCode 또는 versionName이 자동으로 반복되는 경우 Instant Run의 모든 성능을 이용할 수 없습니다. Instant Run을 사용하는 경우 디버그 빌드 변형에서 앱 manifest의 모든 부분의 자동 업데이트를 사용 중지해야 합니다.

Android 시스템 UI 요소(예: 위젯, 알림)를 업데이트하는 경우 Run (또는 Debug )을 클릭해야 합니다.

참고: 비정상 종료 후 앱을 다시 시작해야 하는 경우 타겟 기기에서 앱을 시작하지 마세요. 타겟 기기에서 앱을 시작하면 마지막 콜드 스왑 또는 증분 빌드 이후의 코드 변경사항이 적용되지 않습니다. 최근 변경사항을 모두 적용하고 앱을 실행하려면 Android 스튜디오에서 Run (또는 Debug )을 클릭하세요.

자동 활동 다시 시작 사용 중지

핫 스왑을 실행하면 앱이 계속해서 실행되지만 Android 스튜디오에서 현재 활동을 자동으로 다시 시작합니다. 이 기본 설정을 사용 중지하려면 다음 단계를 따르세요.

  1. Settings 또는 Preferences 대화상자를 엽니다.
    • Windows 또는 Linux의 경우 메뉴 바에서 File > Settings를 선택합니다.
    • Mac OSX의 경우 메뉴 바에서 Android Studio > Preferences를 선택합니다.
  2. Build, Execution, Deployment > Instant Run으로 이동합니다.
  3. Restart activity on code changes 옆의 체크박스를 선택 해제합니다.

자동 활동 다시 시작이 사용 중지된 경우 메뉴 바에서 Run > Restart Activity를 선택하여 현재 활동을 수동으로 다시 시작할 수 있습니다.

Instant Run을 위한 프로젝트 구성

Android 스튜디오에서는 Gradle용 Android 플러그인 2.3.0 이상을 사용하여 빌드한 프로젝트에 기본적으로 Instant Run을 사용하도록 설정합니다.

기존 프로젝트를 최신 버전의 플러그인으로 업데이트하려면 다음 단계를 따르세요.

  1. Settings 또는 Preferences 대화상자를 엽니다.
  2. 그림 4와 같이 Build, Execution, Deployment > Instant Run으로 이동하여 Update Project를 클릭합니다.

    프로젝트 업데이트 옵션이 표시되지 않으면 이미 Gradle 용 최신 Android 플러그인으로 업데이트된 상태입니다. 하지만 Enable Instant Run 옆의 체크박스가 선택되어 있는지 확인하세요.

    그림 4. 기존 프로젝트를 Gradle용 Android 플러그인으로 업데이트

또한 Instant Run을 사용하려면 빌드 변형을 앱의 디버그 버전으로 변경하고 Android 5.0(API 레벨 21) 이상을 실행하는 타겟 기기에 배포해야 합니다. 빌드 속도를 높이는 다른 기법을 알아보려면 빌드 속도 최적화를 참조하세요.

Windows Defender에서 프로젝트 제외

Windows 시스템에서 Instant Run을 사용하는 동안 Windows Defender 때문에 속도가 느려질 수 있습니다. Windows Defender를 사용하는 경우 Android 스튜디오 프로젝트 폴더를 Windows Defender 멀웨어 검색에서 제외해야 합니다.

Crashlytics 사용 시 빌드 시간 단축

Fabric Gradle 플러그인 버전이 1.21.6 미만인 경우 Crashlytics 때문에 빌드 시간이 느려질 수 있습니다. 앱을 개발하는 동안 빌드 성능을 향상하려면 플러그인을 최신 버전으로 업데이트하거나 디버그 빌드 변형에 Crashlytics를 사용 중지하세요.

Instant Run의 제한사항

Instant Run은 대부분의 상황에서 빌드 및 배포 프로세스의 속도를 높이도록 설계되었습니다. 하지만 Instant Run을 사용할 때 Instant Run의 동작 및 앱과의 호환성에 영향을 미치는 요인이 있습니다. Instant Run을 사용하는 동안 다른 문제가 발생하면 추가 로깅을 사용 설정하고 버그를 신고하세요.

여러 기기에 배포

Instant Run은 다양한 기법을 사용하여 타겟 기기의 API 레벨에 따라 핫 스왑, 웜 스왑, 콜드 스왑을 실행합니다. 이러한 이유로 한 번에 여러 기기에 앱을 배포하는 경우 Android 스튜디오에서 일시적으로 Instant Run을 사용 중지합니다.

앱 Multidex

minSdkVersion이 21 이상으로 설정된 경우 Instant Run에서 앱을 자동으로 multidex용으로 구성합니다. Instant Run은 디버그 버전의 앱에서만 작동하므로 출시 빌드 변형을 배포하는 경우 앱을 multidex용으로 구성해야 할 수도 있습니다.

계측된 테스트 및 성능 프로파일러 실행

계측된 테스트는 테스트 기기에서 디버그 APK와 테스트 APK를 동일한 프로세스에 로드하여 제어 메서드에서 앱의 일반 수명주기를 재정의하고 테스트를 실행할 수 있도록 합니다. 계측된 테스트를 실행하거나 디버깅하는 동안 Android 스튜디오에서는 Instant Run에 필요한 추가 메서드를 삽입하지 않고 기능을 사용 중지합니다.

앱을 프로파일링할 때 Instant Run을 사용 중지해야 합니다. Instant Run을 사용하면 성능에 약간의 영향을 미치고 핫 스왑으로 메서드를 재정의하면 조금 더 큰 영향을 미칩니다. 이 성능 영향은 성능 프로파일링 도구에서 제공하는 정보에 지장을 줄 수 있습니다. 또한 각 핫 스왑으로 생성되는 스텁 메서드가 스택 추적을 복잡하게 만들 수 있습니다.

타사 플러그인 사용

Android 스튜디오에서는 Instant Run을 사용하는 동안 자바 코드 적용 범위 라이브러리(JaCoCo)와 ProGuard를 일시적으로 사용 중지합니다. Instant Run은 디버그 빌드에서만 작동하므로 이렇게 해도 출시 빌드에는 영향이 없습니다.

바이트코드를 수정하는 특정 타사 플러그인으로 인해 Instant Run에서 앱을 계측하는 방법에 문제가 발생할 수도 있습니다. 이러한 문제가 발생하지만 Instant Run을 계속 사용하려면 디버그 빌드 변형의 경우 해당 플러그인을 사용 중지해야 합니다. 버그를 제출하여 타사 플러그인과의 호환성을 개선할 수도 있습니다.

멀티프로세스 앱에 변경사항 푸시

Instant Run 앱에서는 핫 스왑과 웜 스왑을 실행하기 위해 앱의 기본 프로세스만 계측합니다. 메서드 구현 또는 기존 리소스의 변경사항과 같은 코드 변경사항을 다른 앱 프로세스에 푸시하는 경우 Instant Run에서는 콜드 스왑을 실행합니다.

직장 프로필에서 앱 시작

Instant Run을 사용하여 앱을 실행하고 직장 프로필(또는 다른 보조 프로필)을 사용하여 앱을 열면, 기본 프로필의 사용자 공간에서만 Instant Run에서 사용하는 계측된 DEX 파일에 액세스할 수 있으므로 앱이 비정상 종료됩니다.

Instant Run을 계속 사용하려면 직장 프로필을 사용하여 앱을 열지 말고 실행 구성 에서 --user user_id 플래그를 사용하지 마세요.

직장 프로필로 앱을 사용해야 하는 경우 --user user_id 플래그가 포함된 새로운 실행 구성을 만들고 직장 프로필 사용자 ID를 지정하시기 바랍니다. 명령줄에서 adb shell pm list users를 실행하면 사용자 ID를 찾을 수 있습니다. --user 플래그를 사용하면 Android 스튜디오에서 해당 배포의 경우에만 Instant Run을 사용 중지합니다. --user 플래그를 사용하지 않는 구성으로 전환하면 Instant Run이 자시 작동합니다.

Instant Run 사용 중지

Instant Run을 사용 중지하려면 다음 단계를 따르세요.

  1. Settings 또는 Preferences 대화상자를 엽니다.
  2. Build, Execution, Deployment > Instant Run으로 이동합니다.
  3. Enable Instant Run 옆의 체크박스를 선택 해제합니다.