2011년 11월 19일 토요일

AdMob 4.3.1 설치시 빌드 타겟 설정. "You must have AdActivity declared in AndroidManifest.xml with configChanges"


이미지는 내용과 아무 상관 없습니다.


AdMob의 현재 최신 버전은 4.3.1이다.
여기선 프로젝트가 com.google.ads.AdActivity 라는 Activity를 AndroidManifest에 선언하길 요구하는데, 이와 함께 다음의 configChanges 속성을 요구한다.
keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize

문제는 상당수의 속성들이 3.2 이상에서 지원된다는 것. 때문에 빌드 에러가 난다.

3.2 이상에서만 지원되는 속성을 삭제하면 빌드는 되지만, 광고가 나오지 않고, 까만 박스에 "You must have AdActivity declared in AndroidManifest.xml with configChanges" 라는 문구만 빨간 색으로 나오게 된다.
AdMob 문서에서 설명한 모든 configChanges 속성을 요구하기 때문이다.


3.2 이상 앱을 개발하면 되겠지만, 이 경우 하위 호환성에 문제가 생길 수밖에 없다.






해결책은, 앱의 실행환경 타겟은 그대로 두고, 빌드 시에만 3.2 이상 SDK를 사용하는 것이다.
참고로, 앱의 실행환경 타겟은 AndroidManifest 의 uses-sdk 항목에서 설정 가능하다. 이걸 변경시키면 문제는 해결 안되고, 하위 호환만 안된다.


먼저, SDK Manager 를 이용해 3.2 이상의 Android SDK를 받고,
사용 중인 빌드 시스템을 이용해, 빌드 시에 3.2 이상의 SDK를 이용하도록 하면 되겠다.


이는 사용 중인 빌드 시스템에 따라 달라지겠는데, 이클립스에서 개발중이라면, project.properties 라는 파일이 생성되어 있을 것이다.
여기에 보면 target 이라는 값이 있는데, 그 값을 android-13으로 수정해 주면 된다.
target=android-13
참고로, AdMob 광고가 나타나기 위해선 약간 시간이 필요하다. "You must have AdActivity declared in AndroidManifest.xml with configChanges" 문구만 나오다가 이젠 아무것도 안나온다면 문제가 해결된 것이다. 좀 더 기다려 보자.





빌드 시 사용할  SDK 타겟만 바꿨으므로, 하위 버전의 Android 기기에서도 3.2 SDK 에서 제공하는 하위 호환이 된다. 기본적으로 Android 는 하위 호환을 지키기 때문에 큰 문제는 발생하지 않는데, 3.2에서 deprecated 되거나 한 하위 버전 SDK의 API는 사용이 불가능하다.
이를 위해선 또다른 꼼수가 필요한데, 아래 참조 링크에서는, 3.2 에서 deprecated 된, 우리가 사용하고자 하는 API를 호출하는 library를 하위 버전 SDK를 이용해서 빌드하고, 이 library를 이용하는 방법을 이용했다.




참고 링크 :
http://stackoverflow.com/questions/7947165/admob-implementation-error/7951412#7951412
http://code.google.com/intl/ko/mobile/ads/docs/android/fundamentals.html

댓글 없음:

댓글 쓰기