@SuppressLint('NewApi') 와 @TargetApi 의 차이점? 다른점? 올바른 이해?

Posted by 빵빵빵
2015/03/13 13:01 전산(컴퓨터)/안드로이드



요즘 안드로이드 프로그램을 짜고 있는데..

인터넷에 널려 있는 코드 짜투리를 붙이면 간혹 Call requires API level 10(혹은 그 이상) (current min is 8 혹은 그 이하) 라는 메시지를 볼 수 있다.

아.... 겨우 찾아내서 붙여볼려고 했더니.. 컴팔도 안되고 짜증을 유발시킨다.

해결 방법을 찾아보면 @SuppressLint('NewApi') 와 @TargetApi라는 애노테이션이 언급된다.

둘의 차이가 뭘까....


@SuppressLint('NewApi') 
모든 레벨의 API에서 Lint 에러를 무시하겠다라는 의미다.
따라서 이녀석이 붙어 있는 함수는 프로그래머가 안드로이드 버전에 따라 호출을 할것인지 말것인지 일일이 구분해줘야 한다. 

예를들어
AAAA() 함수 위에 @SuppressLint('NewApi') 가 선언 되어 있고 그 함수 안에서
BBBB() 함수를 호출하는데 이게 API 11에서 지원하는 함수라면,
프로그래머는 그 앱이 실행되고 있는 안드로이드 기기가 API 11을 지원하는지 판단해서 AAAA()나 BBBB()를 호출해야 한다.
만일 안드로이드가 API 10인데 BBBB()를 호출해 버리면... 없는 함수를 호출해 버리니깐 맛팅이가 가 버릴것이다.

minSdkVersion 을 11로 바꿔주면 이놈을 붙일 필요 없이 걍 해결 되지만..
허니콤 미만(진저 이하)에서는 이 앱을 사용할 수 없게 됩니다.

심하게 말해서 최신 API 써서 만들어서 minSdkVersion을 21(롤리팝)로 해주면....?
2015년 02월 10일 기준 안드로이드 전체 사용자중 1.8%만이 플레이스토어에서 다운로드 할 수 있다.
98.2%의 수많은 사용자는 검색조차 안된다.
ㅡㅡ;;;;;;;; 이건 정신 나간 짓이죠!

@TargetApi
@TargetApi( Build.VERSION_CODES.GINGERBREAD ) 라고 해 주면 이 함수는 진저브레드(API 9)이하에서 잘 돌게 프로그램 해놨다~
라는 의미로 사용되는 겁니다.
minSdkVersion 이 10 이상으로 올라가면 당연히 Lint 에러가 또 발생합니다.


간단하게 끝!
2015/03/13 13:01 2015/03/13 13:01

이 글에는 트랙백을 보낼 수 없습니다