No changes to deploy. (Instant Run)

2016. 9. 26. 15:07


1. 안드로이드 스튜디오의 "Instant Run"

안드로이드 스튜디오에서 코드를 수정하고 "Run 'app'" 메뉴를 선택하면, 현재 작업 중인 프로젝트를 빌드하고, 선택된 기기에 앱을 배포하여 실행을 확인할 수 있습니다. 특히 안드로이드 스튜디오 2.0부터 처음 도입된 "Instant Run" 기능을 사용하면 새 APK 파일을 설치하지 않고 기기에서 앱을 실행하는 것이 가능하기 때문에, 코드 변경 사항을 확인하는 시간을 크게 단축시킬 수 있는 장점이 있습니다.

2. 문제 상황. (No changes to deploy)

그런데 안드로이드 스튜디오에서 코드를 수정하고, 컴파일러에 의해 문법적인 에러가 발견되지 않았음에도 불구하고, "Run 'app'"을 실행해도 수정된 코드가 반영되지 않는 경우가 있습니다. "No changes to deploy"라는 메시지와 함께 말이죠. (하지만 코드를 수정하지 않고 "Run"을 실행하면, "No changes to deploy" 메시지가 출력되는 것이 당연한 결과입니다.)

No changes to deploy


이러한 문제점의 원인이 무엇인지는 공식적으로 알려진 바가 없지만, 안드로이드 스튜디오와 연결된 기기간 앱 상태 동기화 로직이 미흡하게 동작하기 때문인 것으로 추측되고 있습니다. 출시된 안드로이드의 버전과 각 버전이 탑재된 기기(Device)의 종류는 너무나도 많으니까요.

3. 해결 방법.

정확한 원인이 뭔지 모른다고, 해결방법이 없는 것은 아닙니다. 코드를 수정해도 결과가 확인되지 않는다면 개발을 더 이상 진행할 수 없는 상태가 되니, 코드 수정 결과를 확인하기 위해선 "Instant Run" 기능을 사용하지 않는 최후의 수단을 선택할 수도 있겠죠. 물론, 앱을 실행하고 결과를 보기까지 걸리는 시간이 조금 더 많이 소요되겠지만...


그런데 "Instant Run" 옵션을 끄는 선택을 하기 전에, 몇 가지 확인해볼 사항이 있습니다. 이 사항들은 구글에서 공식적으로 가이드하거나, 개발자들의 경험에 의해 알려진 것들이므로, 충분히 시도해볼 가치가 있다고 생각합니다. 물론, 문제 상황을 맞닥뜨리지 않는 게 젤 좋겠죠. ^^

3.1 minSDKversion 확인

안드로이드 스튜디오의 사용자 가이드에 의하면, "Instant Run"은 minSDKVersion이 15 이상으로 지정된 경우에만 지원됩니다. 그리고 21 이상에서 최고의 성능을 얻을 수 있다고 합니다. 그러므로 최초 프로젝트 생성 시, minSDKVersion을 얼마로 설정했는지 확인해보시기 바랍니다. 프로젝트 생성 시 설정한 값이 기억나지 않는다면, 프로젝트의 "build.gradle" 파일에서 "minSdkVersion" 항목을 확인할 수 있습니다.

build.gradle 파일에서 minSdkVersion 확인


3.2 안드로이드 스튜디오를 최신 버전으로 업그레이드.

최신 버전의 안드로이드 스튜디오 버전은, 대부분의 경우에 이전 버전의 버그 또는 미흡한 기능의 개선을 포함하므로, 안드로이드 스튜디오를 최신 버전으로 업그레이드하는 것이 해결 방법이 될 수 있습니다. 물론 버전 업그레이드에 따른 빌드 시스템의 변화로, 프로젝트 빌드 설정 변환같은 작업을 강제적으로 수행해야 하는 경우가 있어서 여러 요소를 고려해야 하지만, 최신 버전의 개발 툴을 사용하고 적응하는 것은 늘 설레는(이라 쓰고 "귀찮고 번거로운" 이라 읽는다) 일이기도 하니까요.

안드로이드 스튜디오의 최신 버전을 확인하고 업그레이드하는 것은 "Check for Updates" 메뉴를 통해 수행할 수 있습니다. (Help - Check for Updates)

Check for Updates 메뉴


Mac(OSX)에서는 Android Studio - Check for Updates 에서 업데이트 내용을 확인할 수 있습니다.

3.3 프로젝트 Clean 후 Build

"Run 'app'" 메뉴를 선택하고 "No changes to deploy" 메시지가 뜨면, 이를 해결하기 위해 다양한 시도를 해보게 됩니다. "Run 'app'" 메뉴를 한번 더 눌러보고, "Rerun"을 눌러보기도 하죠. 아니면 아예 "Stop" 메뉴를 선택히여 앱을 종료하고나서 "Run 'app'"을 다시 실행해보기도 합니다. 하지만 개인적인 경험으로도 위의 액션들은 문제 해결에 큰 도움이 되지 않았습니다.


대신, "Clean Project" 메뉴를 선택하여 프로젝트 빌드 결과를 Clean하고 나서 "Run 'app'" 메뉴를 선택하면, "Instant Run"의 실행이 정상적으로 되는 것을 확인하였습니다. 즉, Gradle 빌드와 APK 설치 과정을 다시 수행해주는 것이죠. (Build - Clean Project)

Clean Project 메뉴


Mac(OSX)에서는 Build - Clean Project 메뉴를 선택하여 프로젝트 빌드 결과를 Clean할 수 있습니다.

3.4 "Instant Run" 옵션 끄기

앞서 설명한 몇 가지 방법을 확인하고 시도하였음에도 불구하고 해당 문제가 계속 발생한다면, 아예 "Instant Run" 옵션을 끄는 선택을 할 수도 있습니다. 안드로이드 스튜디오를 제공하는 구글의 입장에서도 "Instant Run"의 기능이 100% 완벽하게 동작했다면, 이 옵션을 끌 수 있는 메뉴를 제공하지 않았겠죠?

아래의 설정을 통해 "Instant Run" 기능을 비활성화 할 수 있습니다. (File - Settings)

Instant Run 옵션 끄기


Mac(OSX)에서는 Android Studio - Preferences - Build, Execution, Deployment - Instant Run메뉴를 선택한 다음, "Enable Instant Run to hot swap code/resource changes on deploy (default enabled)" 옵션을 체크 해제 하여 "Instant Run" 기능을 비활성화 할 수 있습니다.

4. 참고

.END.


ANDROID 스튜디오/문제 해결