안드로이드 버전
1. 호환성모드
targetSdkVersion
- 앱 실행시 버전체크를 통해 호환성 모드 실행 여부를 결정하는 기준
- 해당 API 버전까지는 실행하는데 문제가 없다는 것을 보장함 (해당 버전까지 호환성모드를 사용하지 않음)
- 지정하지 않을 경우 디폴트는 minSdkVersion과 동일
minSdkVersion
- 해당 앱을 실행하기위해 요구되는 최소 API 버전
compileSdkVersion
- 컴파일시 사용하는 android.jar 파일의 버전
- 일반적으로 compileSdkVersion >= targetSdkVersion
- 디폴트 값이 없으므로 반드시 지정해야한다.
2. Support 패키지의 ~Compat 클래스
런타임시 버전 체크를 통해 가능한 한 최신 버전의 기능을 활용하거나, 기존 메서드로 대체하는 코드를 미리 구현해놓은 클래스이다.
- ViewCompat
- ActivityCompat
- WindowCompat
- NotificationCompat
- AsyncTaskCompat
- SharedPreferenceCompat.EditorCompat 등
public class ViewCompat {
public static final int OVER_SCROLL_ALWAYS = 0;
public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1;
public static final int OVER_SCROLL_NEVER = 2;
......
/*
* 버전별 클래스에서 구현할 인터페이스 정의
*/
interface ViewCompatImpl {
public boolean canScrollHorizontally(View v, int direction);
public boolean canScrollVertically(View v, int direction);
public int getOverScrollMode(View v);
public void setOverScrollMode(View v, int mode);
}
/*
* API 상위 버전 클래스가 하위 버전 ViewCompat 클래스를 상속한다.
*/
static class BaseViewCompatImpl implements ViewCompatImpl {
public boolean canScrollHorizontally(View v, int direction){
return false;
}
public boolean canScrollVertically(View v, int direction){
return false;
}
public int getOverScrollMode(View v){
return OVER_SCROLL_NEVER;
}
public void setOverScrollMode(View v, int mode){
// Do Nothing. API 존재하지 않음
}
}
static class EclairMr1ViewCompatImpl extends BaseViewCompatImpl {
......
}
static class GBViewCompatImpl extends EclairMr1ViewCompatImpl {
/*
* 진저브레드부터 getOverScrollMode 메서드가 처음 생김
* 이후 버전에서는 GBViewCompatImpl를 상속하므로 동일 기능 사용 (이전 버전은 사용불가)
*/
@Override
public boolean getOverScrollMode(View v){
return ViewCompatGingerBread.getOverScrollMode(v);
}
@Override
public boolean setOverScrollMode(View v, int mode){
return ViewCompatGingerBread.setOverScrollMode(v, mode);
}
}
......
/*
* 정적 초기화 블럭에서 API 버전에 따라 인터페이스 구현체가 INSTANCE 변수에 들어간다.
*/
static final ViewCompatImpl INSTANCE;
static {
final int version = android.os.Build.VERSION.SDK_INT;
if(version >= 19) {
INSTANCE = new KitKatViewCompatImpl();
} else if(version >= 17) {
INSTANCE = new JbMr1ViewCompatImpl();
} else if ......
}
/*
* ViewCompat의 정적 메서드와 ViewCompatImpl 인터페이스의 메서드는 1:1 매핑된다.
*/
public static boolean canScrollHorizontally(View v, int direction) {
return INSTANCE.canScrollHorizontally(v, direction);
}
public static boolean canScrollVertically(View v, int direction) {
return INSTANCE.canScrollVertically(v, direction);
}
public static int getOverScrollMode(View v) {
return INSTANCE.getOverScrollMode(v);
}
public static void setOverScrollMode(View v, int mode) {
return INSTANCE.getOverScrollMode(v);
}
}
'Android > 안드로이드 프로그래밍 Next Step' 카테고리의 다른 글
안드로이드 프로그래밍 Next Step - 3.1 HandlerThread (0) | 2019.03.28 |
---|---|
안드로이드 프로그래밍 Next Step - 2.2 ANR(Application Not Responding) (0) | 2019.03.25 |
안드로이드 프로그래밍 Next Step - 2.1 메인 스레드와 Handler (0) | 2019.03.24 |
안드로이드 프로그래밍 Next Step - 1.1 안드로이드 아키텍처 (0) | 2019.03.21 |
댓글