Skip to content

Most visited

Recently visited

navigation

앱 빌드 및 실행

기본적으로, Android Studio는 몇 번의 클릭만으로 새 프로젝트를 에뮬레이터 또는 물리적 기기에 배포하도록 설정되어 있습니다. Instant Run을 사용하면 새 APK를 빌드하지 않고 메서드와 기존 앱 리소스의 변경사항을 실행 중인 앱에 푸시할 수 있으므로, 코드 변경사항을 거의 즉각적으로 확인할 수 있습니다.

앱을 빌드하고 실행하려면 Run 을 클릭합니다. Android Studio는 앱을 Gradle로 빌드하고, 개발자에게 배포 대상(에뮬레이터 또는 연결된 기기)을 선택하도록 요구한 다음 해당 대상에 앱을 배포합니다. 이 기본 동작을 사용자 지정할 수 있습니다. 예를 들어 실행 구성을 변경하여 자동 배포 대상을 선택하도록 할 수 있습니다.

Android Emulator를 사용하여 앱을 실행하려면, Android Virtual Device (AVD)가 있어야 합니다. 아직 생성하지 않은 경우, Run을 클릭한 다음 Select Deployment Target 대화상자에서 Create New Emulator를 클릭합니다. Virtual Device Configuration 마법사의 안내에 따라 에뮬레이션하려는 기기 유형을 정의합니다. 자세한 내용은 가상 기기 생성 및 관리를 참조하세요.

실제 Android 기기를 사용하는 경우, 해당 기기에서 USB 디버깅을 활성화해야 합니다. 자세한 내용은 하드웨어 기기에서 앱 실행을 참조하세요.

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

여러 가지 모듈 선택 및 빌드

프로젝트에 기본 앱 모듈 외에 여러 개의 모듈이 있는 경우, 다음과 같이 특정 모듈을 빌드할 수 있습니다.

Android Studio는 Gradle을 사용하여 모듈을 빌드합니다. 일단 모듈이 빌드되고 나면, 새 앱 또는 새 기기용으로 모듈을 빌드한 경우 이를 실행하고 디버그할 수 있고, 라이브러리 또는 Google Cloud 모듈을 빌드한 경우 종속성으로 사용할 수 있습니다.

빌드한 앱 모듈을 실행하려면:

실행/디버그 구성 변경

실행/디버그 구성은 실행할 모듈, 배포할 패키지, 시작할 작업, 대상 기기, 에뮬레이터 설정, logcat 옵션 등을 지정합니다. 기본 실행/디버그 구성은 기본 프로젝트 작업을 시작하고 대상 기기 선택에 Select Deployment Target 대화상자를 사용합니다. 기본 설정이 프로젝트 또는 모듈에 적합하지 않은 경우, 실행/디버그 구성을 사용자 지정하거나, 프로젝트, 기본 및 모듈 단계에서 새로 만들 수도 있습니다. 실행/디버그 구성을 편집하려면 Run > Edit Configurations를 선택합니다. 자세한 내용은 실행/디버그 구성 생성 및 편집을 참조하세요.

빌드 변형 변경

기본적으로 Android Studio는 Run을 클릭하면 앱의 디버그 버전을 빌드하며, 이 버전은 테스트용일 뿐입니다. 개발자가 릴리스 버전을 빌드하여 공개 릴리스용으로 앱을 준비해야 합니다.

Android Studio가 사용하는 빌드 변형을 변경하려면 Build > Select Build Variant로 이동하여 드롭다운 메뉴에서 다른 항목을 선택합니다. 기본적으로, 새 프로젝트는 디버그 및 릴리스 빌드 변형으로 설정됩니다.

Product flavors를 사용하여 각각 다른 기능이나 기기 요구사항을 가진 다양한 앱 버전용의 추가 빌드 변형을 만들 수 있습니다. 빌드 변형과 제품 버전에 대해 자세히 알아보려면 빌드 구성을 참조하세요.

빌드 과정 모니터링

Gradle Console 을 클릭하면 빌드 과정에 대한 세부정보를 볼 수 있습니다. 그림 1과 같이 콘솔에 Gradle이 앱을 빌드하기 위해 실행하는 각 작업이 표시됩니다.

그림 1. Android Studio의 Gradle 콘솔

빌드 변형이 제품 버전을 사용하는 경우, Gradle은 해당 제품 버전을 빌드하기 위한 작업도 호출합니다. 사용 가능한 모든 빌드 작업 목록을 보려면 IDE 창 오른쪽에 있는 Gradle 을 클릭합니다.

빌드 과정 중에 오류가 발생하는 경우, 문제를 설명하는 Messages 창이 나타납니다. 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이 이 명령줄 옵션을 적용합니다.

APK 생성

Run을 클릭하면 Android Studio가 디버그 APK를 생성하고 대상 기기에 배포합니다. 하지만 공개 배포용으로 앱의 릴리스 버전을 생성하기 전에 먼저 앱에 서명하는 방법부터 배워야 합니다. 그러면 디버그 또는 릴리스 빌드 버전의 서명된 APK를 여러 개 생성할 수 있습니다. 생성된 APK 파일을 찾으려면 그림 2에 나오는 것처럼 팝업 대화상자의 링크를 클릭합니다.

그림 2. 링크를 클릭하여 생성된 APK 파일을 찾습니다.

Instant Run 정보

Android Studio 2.0에서 처음 도입된 Instant Run은 Run Debug 명령의 동작으로, 앱의 업데이트 간 시간을 대폭 줄여줍니다. 첫 빌드를 완료하는 데 오랜 시간이 걸릴 수도 있지만, Instant Run은 새 APK를 빌드하지 않고 후속 업데이트를 앱에 푸시하므로, 변경사항을 훨씬 빨리 확인할 수 있습니다.

Instant Run은 디버그 빌드 변형을 배포하고, Android Plugin for Gradle 버전 2.0.0 이상을 사용하고, 앱의 모듈 레벨 build.gradle 파일에서 minSdkVersion을 15 이상으로 설정한 경우에만 지원됩니다. 최고의 성능을 얻으려면 minSdkVersion을 21 이상으로 설정해야 합니다.

앱을 배포한 후에 Run 버튼(또는 Debug 버튼) 옆에 번개 모양의 작은 노란색 아이콘이 나타납니다. 이는 다음에 이 버튼을 클릭하면 Instant Run이 업데이트를 푸시할 준비가 되었음을 나타냅니다. 새 APK를 빌드하는 대신 새 변경사항만 푸시하며, 어떤 경우에는 앱을 다시 시작할 필요도 없이 코드 변경사항의 효과를 즉시 보여줍니다.

Instant Run은 핫 스왑, 웜 스왑 또는 콜드 스왑을 수행하여 업데이트된 코드와 리소스를 연결된 기기 또는 에뮬레이터에 푸시합니다. 진행된 변경사항의 유형에 따라 수행할 스왑 유형을 자동으로 판별합니다. 위의 동영상은 이러한 모든 작업이 어떻게 진행되는지 자세히 보여줍니다. 하지만 특정 코드 변경사항을 대상 기기로 푸시할 때 Instant Run이 어떻게 작동하는지 빠르게 살펴보려면 다음 표를 참조하세요.

코드 변경 Instant Run 동작
  • 기존 메서드의 변경 구현 코드

핫 스왑으로 지원: 가장 빠른 스왑 유형이며 훨씬 빠르게 변경사항을 표시합니다. 애플리케이션이 계속 실행되고 다음에 메서드를 호출하면 새 구현과 함께 스텁 메서드가 사용됩니다.

핫 스왑은 실행 중인 앱의 개체를 다시 초기화하지 않습니다. 특정 업데이트를 확인하기 전에 현재 작업을 다시 시작하거나 앱을 다시 시작해야 할 수도 있습니다. 기본적으로, Android Studio는 핫 스왑을 수행한 후에 현재 작업을 자동으로 다시 시작합니다. 이 동작을 원치 않는 경우, 자동 작업 다시 시작을 비활성화하면 됩니다.

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

콜드 스왑으로 지원(API 레벨 21 이상): 이 스왑은 새 APK는 필요하지 않지만, Instant Run이 구조적 코드 변경사항을 푸시할 때 전체 앱을 다시 시작해야 하기 때문에 약간 느립니다.

API 레벨 20 이하를 실행하는 대상 기기의 경우, Android Studio가 전체 APK를 배포합니다.

  • 앱 매니페스트 변경
  • 앱 매니페스트가 참조한 리소스 변경
  • Android 위젯 UI 요소 변경(Clean and Rerun 필요)

앱의 매니페스트 또는 매니페스트가 참조한 리소스가 변경된 경우, Android Studio는 이러한 변경사항을 적용하기 위하여 자동으로 새 빌드를 배포합니다. 그 이유는 APK가 기기에 설치될 때 앱의 이름, 앱 아이콘 리소스 및 인텐트 필터 등 앱에 관한 특정 정보가 매니페스트에서 결정되기 때문입니다.

빌드 과정에서 앱 매니페스트의 일부가 자동으로 업데이트되는 경우(예: versionCode 또는 versionName 자동 반복), Instant Run의 모든 성능을 완벽히 활용할 수 없게 됩니다. Instant Run을 사용할 때는 디버그 빌드 변형에서 앱 매니페스트의 모든 부분에 대해 자동 업데이트를 비활성화해야 합니다.

Android 위젯 UI 요소를 업데이트하는 경우, 변경 내용을 확인하려면 Clean and Rerun을 수행해야 합니다. 또는 클린 빌드를 수행하는 작업이 Instant Run을 실행하는 것보다 오래 걸릴 수 있으므로 위젯 UI를 업데이트하는 동안 일시적으로 Instant Run을 비활성화할 수 있습니다.

참고: 앱이 작동 중단된 후에 다시 시작해야 하는 경우, 대상 기기에서 시작하지 마세요. 앱을 대상 기기에서 다시 시작하면 이전에 마지막으로 콜드 스왑 또는 증분 빌드를 수행한 이후의 코드 변경사항이 전혀 적용되지 않습니다. 최근 변경사항을 모두 적용하고 앱을 실행하려면 Android Studio에서 Run (또는 Debug )을 클릭합니다.

Rerun 사용

특정 이니셜라이저에 영향을 미치는 코드 변경사항을 푸시하는 경우(예: 앱의 onCreate() 메서드 변경), 앱을 다시 시작해야 그러한 변경사항이 적용됩니다. 증분 빌드를 수행하고 앱을 다시 시작하려면 Rerun 을 클릭합니다.

클린 빌드를 배포해야 하는 경우, 기본 메뉴에서 Run > Clean and Rerun 을 선택하거나 Rerun 을 클릭한 상태로 Shift 키를 길게 누릅니다. 이 작업은 실행 중인 앱을 중단하고, 전체 클린 빌드를 수행하고, 새 APK를 대상 기기에 배포합니다.

자동 작업 다시 시작 비활성화

핫 스왑을 수행하면 앱은 계속해서 실행되지만 Android Studio가 현재 작업을 자동으로 다시 시작합니다. 이 기본 설정을 비활성화하려면:

  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 Studio는 Android Plugin for Gradle 2.0.0 이상을 사용하여 빌드한 프로젝트에 대해 기본적으로 Instant Run을 활성화합니다.

기존 프로젝트를 최신 버전의 플러그인으로 업데이트하려면:

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

    프로젝트 업데이트 옵션이 나타나지 않는 경우, 이미 최신 Android Plugin for Gradle 버전이 설치된 상태입니다.

    그림 3. 기존 프로젝트를 Android Plugin for Gradle로 업데이트.

또한 Instant Run을 사용하려면 앱의 디버그 버전으로 빌드 변형을 변경해야 합니다.

DEX 리소스를 구성하여 빌드 시간 단축

클린 빌드를 배포하는 경우, Android Studio가 개발자의 앱에게 Instant Run이 코드와 리소스 업데이트를 푸시하도록 허용하라고 지시합니다. 실행 중인 앱을 업데이트하는 것이 훨씬 빠르지만, 첫 빌드를 완료하는 데 시간이 오래 걸릴 수 있습니다. 몇 가지 DexOptions 설정을 구성하여 빌드 프로세스를 개선할 수 있습니다.

maxProcessCount
동시에 시작할 수 있는 DEX 프로세스의 최대 개수를 설정합니다. Gradle 데몬이 이미 실행 중인 경우, 새 최대 프로세스 카운트로 초기화하기 전에 해당 프로세스를 중단해야 합니다. Terminal 창에서 다음 중 하나를 호출하여 Gradle 데몬을 종료할 수 있습니다.
  • Windows에서, gradlew --stop 호출
  • Linux/Mac OSX에서, ./gradlew --stop 호출
javaMaxHeapSize
Dex 작업에 대한 최대 메모리 할당 풀 크기를 설정합니다. 값을 전달할 때 'k'를 추가하여 킬로바이트, 'm'을 추가하여 메가바이트, 또는 'g'를 추가하여 기가바이트를 나타낼 수 있습니다.

다음 예시에서는 모듈 레벨 build.gradle 파일에서 maxProcessCount를 4로, javaMaxHeapSize를 "2g"로 설정합니다.

android {
  ...
  dexOptions {
    maxProcessCount 4 // this is the default value
    javaMaxHeapSize "2g"
  }
}

이러한 설정의 값을 조금씩 늘려가면서 빌드 시간에 어떤 영향을 미치는지 살펴볼 수 있습니다. Dex 프로세스에 리소스를 너무 많이 할당하면 성능에 부정적인 영향을 미치는 것을 알 수 있습니다.

dexing-in-process 및 증분 Java 컴파일 활성화

Android Plugin for Gradle 버전 2.1.0 이상에서는 증분 Java 컴파일 및 dexing-in-process를 비롯한 추가적인 빌드 프로세스 개선 기능을 제공합니다. 증분 Java 컴파일은 기본적으로 활성화되며 개발 과정 중에 변경되었거나 다시 컴파일해야 하는 소스 부분만 다시 컴파일함으로써 컴파일 시간을 줄여줍니다.

Dexing-in-process는 별도의 외부 VM 프로세스가 아니라 빌드 프로세스 내에서 dexing을 수행합니다. 따라서 증분 빌드가 훨씬 빨라질 뿐만 아니라, 전체 빌드 속도도 대폭 개선됩니다. 이 기능을 활성화하려면 Gradle 데몬의 최대 힙 크기를 최소 2048MB 이상으로 설정해야 합니다. 이렇게 하려면 프로젝트의 gradle.properties 파일에 다음 항목을 포함하면 됩니다.

org.gradle.jvmargs = -Xmx2048m

모듈 레벨 build.gradle 파일에서 javaMaxHeapSize 값을 정의한 경우, 데몬의 최대 힙 크기를 javaMaxHeapSize + 1024MB의 값으로 설정해야 합니다. 예를 들어, javaMaxHeapSize를 "2g"로 설정한 경우, 프로젝트의 gradle.properties 파일에 다음 항목을 추가해야 합니다.

org.gradle.jvmargs = -Xmx3072m

Windows Defender에서 프로젝트 제외

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

Crashlytics 사용 시 빌드 시간 개선

Fabric Gradle 플러그인 버전이 1.21.6 이하인 경우 Crashlytics 때문에 빌드 시간이 느려질 수 있습니다. 앱을 개발하는 동안 빌드 성능을 개선하려면 플러그인을 최신 버전으로 업데이트하거나 디버그 빌드 변형에 대해 Crashlytics를 비활성화할 수 있습니다.

Instant Run의 제한사항

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

여러 기기에 배포

Instant Run은 대상 기기의 API 레벨에 특정한 핫, 웜 및 콜드 스왑을 수행하기 위해 각기 다른 기법을 사용합니다. 이러한 이유로 앱을 여러 기기에 한꺼번에 배포하면 Android Studio가 일시적으로 Instant Run을 비활성화합니다.

앱 Multidex

프로젝트를 Legacy Multidex용으로 구성(즉, build.gradlemultiDexEnabled trueminSdkVersion 20 이하 버전으로 구성)하고 Android 4.4(API 레벨 20) 이하를 실행 중인 대상 기기에 배포하는 경우, Android Studio가 Instant Run을 비활성화합니다.

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

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

계측된 테스트는 제어 메서드가 앱의 정상 수명주기를 재정의하고 테스트를 수행할 수 있도록 디버그 APK와 테스트 APK를 모두 테스트 기기에서 동일한 프로세스에 로드합니다. 계측된 테스트를 실행하거나 디버그하는 동안 Android Studio는 Instant Run에 필요한 추가 메서드를 주입하지 않고 이 기능을 비활성화합니다.

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

타사 플러그인 사용

Android Studio는 Instant Run을 사용하는 동안 JaCoCo(Java Code Coverage Library)와 ProGuard를 일시적으로 비활성화합니다. Instant Run은 디버그 빌드에서만 작동하므로 릴리스 빌드에는 아무런 영향도 미치지 않습니다.

바이트코드 개선을 수행하는 일부 타사 플러그인으로 인해 Instant Run이 앱을 계측하는 방법에 문제가 발생할 수 있습니다. 이러한 문제가 발생하더라도 Instant Run을 계속 사용하려면, 디버그 빌드 변형에서 해당 플러그인을 비활성화해야 합니다. 또한 버그를 제출하여 타사 플러그인과의 호환성을 개선할 수도 있습니다.

다중 프로세스 앱으로 변경사항 푸시

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

Instant Run 비활성화

Instant Run을 비활성화하려면:

  1. Settings 또는 Preferences 대화상자를 엽니다.
  2. Build, Execution, Deployment > Instant Run으로 이동합니다.
  3. Enable Instant Run 옆의 확인란의 선택을 취소합니다.
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)