제가 개발한 안드로이드앱은 대부분 애드몹 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'
}
이제 모든 준비는 끝났습니다.
다시 빌드하고 실행해보세요. ^^
'안드로이드' 카테고리의 다른 글
안드로이드 앱에 Firebase 적용시 Failed to find : com.google.firebase:firembase-core:9.6.1 해결 방법 (0) | 2016.11.23 |
---|---|
com.android.dex.DexException: Multiple dex files define Lpackagename/BuildConfig 오류 (0) | 2016.10.14 |
애드몹 SDK 업그레이드 메일. (0) | 2016.07.06 |
Java 문자열의 숫자만 가지고 오는 방법 (0) | 2016.07.01 |
안드로이드 - 커스텀 리스트뷰(Custom ListView) 만들기 (0) | 2016.04.20 |
댓글