본문 바로가기
안드로이드

애드몹 SDK 9.x.x 업데이트 하기

by Dokon Jang 2016. 7. 6.
반응형

제가 개발한 안드로이드앱은 대부분 애드몹 SDK 6.5.87를 사용하고 있습니다.

애드몹 SDK 6.x.x 이하는 9월 15일부터 광고가 게재되지 않는다고 합니다.

그래서 이번에 애드몹 SDK 9.x.x로 업데이트를 진행 했습니다.

 

1. 애드몹의 라이브러이인 com.google.android.gms:play-services의 버전을 6.5.87에서 9.2.0으로 변경합니다.

   - app 레벨의 build.gradle을 아래와 같이 변경합니다.

apply plugin: 'com.android.application'

android {
    compileSdkVersion "Google Inc.:Google APIs:21"
    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId 'your.app.package'
        minSdkVersion 11
        targetSdkVersion 21
        versionCode 49
        versionName "3.3.7"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.google.android.gms:play-services:9.2.0'
}
 

  

 - 안드로이드 스튜디오 툴바의 "Sync Project with Gradle Files"를 클릭하여 새로 변경된 Gradle 파일을 동기화 시킵니다.

 

 

- 아래와 같은 오류가 발생하는데, 애드몹 SDK는 안드로이드 API 23이상에서 컴파일이 가능한 것으로 생각됩니다. 

 

- 위의 오류를 해결하기 위해서는 app 레벨의 build.gradle에서 compileSdkVersion 과 targetSdkVersion 그리고 라이브러리 com.android.support:appcompat-v7을 버젼을 23이상으로 변경해야 합니다.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId 'your.app.package'
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 49
        versionName "3.3.7"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'com.google.android.gms:play-services:9.2.0'
}
 

 

※ 안드로이드 API 23과  com.google.android.gms:play-services 9.x.x를 사용하기 위해서는 SDK Manager에서 해당 Package를 Install 해양합니다.

 (1) 안드로이 API 23

 (2) com.google.android.gms:play-services 

 

2. 빌드하기

 (1) Google Map 사용에 따른 오류 해결

   - Google Map을 사용하고 있다면 아래와 같이 getMap() 메소드가 없다는 메세지가 표시됩니다. 

    

 

    - 아래의 소스에서와 같이 getMap 메소드에 오류가 발생한다. 

   

 

    - 아래와 같이 소스를 수정하여 해결합니다.    

MapFragment mapFrag = (MapFragment)fragManager.findFragmentById(R.id.mapview);
mapFrag.getMapAsync(new OnMapReadyCallback() {
    @Override
    public void onMapReady(GoogleMap googleMap) {
        BusLineMapFrag.this.googleMap = googleMap;
        googleMap.getUiSettings().setZoomControlsEnabled(true);
        googleMap.getUiSettings().setRotateGesturesEnabled(false);
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(35.179559, 129.0734475), 10));
    }
});
 

 (2) Error:Execution failed for task ':app:dexDebug'  오류 해결

  - 오류을 하면 아래와 같이 오류가 발생합니다.
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    
Error Code:
    2
Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
        at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
        at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
        at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
        at com.android.dx.command.dexer.Main.run(Main.java:246)
        at com.android.dx.command.dexer.Main.main(Main.java:215)
        at com.android.dx.command.Main.main(Main.java:106)
 

 

  - 원인은 너무 많은 라이브러리를 참조하고 있으면 컴파일 시 오류가 발생하는데, 그러한 경우입니다.

    com.google.android.gms:play-services:9.x.x를 참조하는 경우 아주 많은 라이브러리를 참조하게 됩니다.

    app.iml파일을 열면 아래와 같이 많은 라이브러리가 추가된 것을 확인 할 수 있습니다.

 - 해결 방법은 com.google.android.gms:play-services의 전체가 아니 꼭 필요한 라이브러리만 추가하는 것입니다.

 - 저는 애드몹 광고와 Google Map이 필요하므로 아래의 두개의 라이브러이만 app 레벨의 build.gradle에 추가합니다.

   ⓐ 애드몹 광고 : com.google.android.gms:play-services-ads

   ⓑ Google Map : com.google.android.gms:play-services-maps

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId 'your.app.package'
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 49
        versionName "3.3.7"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.google.android.gms:play-services-ads:9.2.0'
    compile 'com.google.android.gms:play-services-maps:9.2.0'
}

 

이제 모든 준비는 끝났습니다.

다시 빌드하고 실행해보세요. ^^

반응형

댓글