반응형






Instant Run은 안드로이드 2.0부터 도입된 기능으로 코드를 수정하는 순간 바로 결과물에 반영이 되는 기능입니다. 

기존의 코드 수정 후, 빌드하여 다시 deploy하는 번거로움을 줄여주기 위해서 라고 합니다.


그동안 별 문제 없었는데 구글맵 관련 앱을 만들면서 문제가 발생했습니다.  구글맵을 화면에 보여주기까지 너무 오래걸리는 것입니다. 아래 로그캣을 보면 26초 정도 걸린것을 볼 수 있습니다. 

1
2
3
11-22 14:59:07.299 23344-24344/com.tistory.webnautes.googlemap I/OpenGLRenderer: Initialized EGL, version 1.4
11-22 14:59:07.359 23344-23344/com.tistory.webnautes.googlemap I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@3c9a03 time:40112864
11-22 14:59:07.365 1644-1730/? I/ActivityManager: Displayed com.tistory.webnautes.googlemap/.MainActivity: +26s372ms
cs


보여주기 전까지 아래 화면처럼 흰바탕으로 26초 정도를 보고 있어야 합니다. 그 이후 화면에 구글맵이 보입니다.



이에 반해 Instant Run을 해제해주면 시간이 1초 정도로 단축이 됩니다. 

( 참고 :  http://stackoverflow.com/questions/37126912/why-does-my-app-start-incredibly-slow-10s-at-first-run-showing-only-white-sc )

1
2
3
11-22 15:01:36.924 25862-25937/com.tistory.webnautes.googlemap I/OpenGLRenderer: Initialized EGL, version 1.4
11-22 15:01:36.991 25862-25862/com.tistory.webnautes.googlemap I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@485b8c6 time:40262495
11-22 15:01:37.010 1644-1730/? I/ActivityManager: Displayed com.tistory.webnautes.googlemap/.MainActivity: +942ms (total +1s39ms)
cs



Instant Run을 해제하기 위해서 메뉴에서 File - Settings를 선택합니다. 왼쪽 메뉴에서 Build,Execution,Development - InstantRun를 차례대로 선택하고 모든 항목을 체크 해제하고 Apply를 클릭하여 적용합니다.



이제 Setting 창을 닫고 RUN을 시켰는데 빌드 중에 아래와 같은 에러가 났습니다.


Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536



찾아보니 build.gradle에 multiDex를 활성화 시켜주면 된다고 하네요.

( 참고 :  http://stackoverflow.com/a/38715060 )


android {


    defaultConfig {

        ...


        // Enabling multidex support.

        multiDexEnabled true

    }

    ...

}


dependencies {

  compile 'com.android.support:multidex:1.0.0'

}



실제로 적용한 결과입니다. 붉은색으로 된 두 줄이 추가되었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
apply plugin: 'com.android.application'
 
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "com.tistory.webnautes.googlemap"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
 
        // Enabling multidex support.
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.1'
    testCompile 'junit:junit:4.12'
    compile 'com.google.android.gms:play-services:10.0.0'
    compile 'com.android.support:multidex:1.0.1'
}
cs



이제 Sync Now를 클릭하여 적용시키고 다시 RUN을 실행합니다. 에러 없이 빌드가 잘됩니다. 

위에서 언급했듯이 앱 실행도 상당히 빨라지네요~~~~


반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. thumbnail
    세영
    2017.07.02 23:07

    저는 저걸로 오류 해결이 안되는데 대체 문제가 뭘까요..