[안드로이드]안드로이드 버전/API레벨/SDK/호환성

dada·2021년 8월 23일
3

Android

목록 보기
3/16
post-thumbnail

혼동하지 말 것.

  • Android=오픈소스 소프트웨어 스택(구글 주도의 오픈소스 프로젝트)
  • Android=Android 플랫폼: 스택이라는 단어를 사용하지 않을때 '오픈소스 소프트웨어 플랫폼'
  • Android 프레임워크:=java API Framework=java API
  • Android 운영체제=Android 시스템:Android를 휴대할 수 있는 디바이스 기기(=모바일 디바이스)의 운영체제로 채택하여 사용한다는 의미

✅안드로이드 버전

✅플랫폼 버전/API레벨/버전코드

  • 안드로이드(플랫폼/운영체제/시스템)는 새롭고 개선된 기능을 포함해 지속적으로 새로운 안드로이드 버전을 출시하고 있음
  • 하나의 API 레벨에 여러 개의 플랫폼 버전이 존재 가능
  • Android Developers사이트: API레벨 보러가기

✅API레벨?

  • Android 플랫폼은 애플리케이션이 기본 Android 시스템과 상호작용하는 데 사용할 수 있는 프레임워크 API를 제공

  • 프레임워크 API는 다음 요소로 구성

    • 핵심 패키지 및 클래스 집합
    • 매니페스트 파일을 선언하는 데 사용되는 XML 요소 및 특성 집합
    • 리소스를 선언 및 액세스하는 데 사용되는 XML 요소 및 특성 집합
      인텐트 집합
    • 애플리케이션이 요청할 수 있는 권한 및 시스템에 포함된 권한 적용 집합

  • API 레벨은 Android 플랫폼 버전에서 제공되는 프레임워크 API 수정 버전을 고유하게 식별하는 정수 값
  • Android 플랫폼 최초 출시 버전인 android 1.0 버전은 API Level 1을 제공했고, android 1.0 버전부터 계속 후속 릴리즈 버전이 나오면서 API 레벨도 1씩 증가. 또한 각 Android 플랫폼 버전별로 지원하는 API 레벨이 지정
  • 각 Android 플랫폼 버전은 모든 이전 API 레벨(API 레벨 1까지)을 암시적으로 지원하되 정확히 단일 API 레벨을 지원
  • 즉 Android 버전의 업데이트는 Android Framework 업데이트도 포함할 수 있기 때문에 Android Framework의 수정 히스토리를 Android 버전과 별도로 표시하는 것이 API 레벨

✅SDK

  • SDK란 Software Development Kit의 약자이다. 개발자들을 위해 제공하는 개발 도구들이다. 쉽게 말자하면, '소프트웨어를 개발하기 위한 도구들'이다.
    SDK가 없다면 앱이나 다른 모든 프로그램에서 모든 기능을 처음부터 만들어야 한다. 안드로이드 스튜디오 없이 안드로이드 앱 개발을 한다고 생각하면 끔찍하다...

  • SDK 종류
    SDK 안에는 개발에 도움이 될 개발 도구 프로그램, 디버깅 프로그램, 문서, API 등이 있다.

    • 안드로이드 SDK
      안드로이드용 앱개발을 위한 도구
    • JDK
      자바 개발자를 대상으로 오라클에서 제공하는 도구
    • 안드로이드 API
      개발자들이 안드로이드 개발을 손쉽게 하도록 접근을 허용하는 안드로이드 API들
    • 안드로이드 응용 프로그램 개발에 필요한 각종 도구들
      안드로이드 소스 코드를 실행 가능한 어플리케이션으로 만들기 위한 컴파일러나 에뮬레이터
    • 샘플 코드들
    • 안드로이드 API 사용법을 이해시키기 위한 예제 프로그램 코드
      관련 문서들
    • SDK를 사용하기 위한 각종 패키지나 클래스에 대한 설명

✅안드로이드 앱 개발과 플랫폼 버전


  • 안드로이드 앱을 개발할땐, 이 앱이 어떤 안드로이드 버전(플랫폼 버전)에서 동작할 것인지 지정해 줘야함
  • 안드로이드는 계속해서 새로운 버전이 릴리즈 되고 기능이 업데이트 되기 때문에 개발자가 앱 개발 시 사용한 API레벨이 모든 안드로이드 버전에서 동작한다는 보장이 없음
    • CalendarProvider API는 플랫폼 버전4.0(API레벨 14)이 출시될 때 나온 API임
      개발시 캘린더 API를 사용했다면 이 기능이 포함된 앱은 플랫폼 버전4.0이하 버전이 설치된 디바이스에서는 이 앱을 설치해 실행하면 4.0이전 버전에는 캘린터API가 존재하지 않음으로 앱이 정상 실행되지 않음.
  • API레벨 문제를 해결하기 위해선 안드로이드 프로젝트의 build.gradle 파일에 존재하는 minSdkVersion(최소 Sdk 버전)이라는 설정의 값을 14(API 레벨)로 지정해줘야 함. 이는 이 앱을 실행하려면 디바이스 기기에 최소한 API 레벨 14는 설치되어 있어야 함을 의미. 즉 이 앱이 API 레벨 14가 존재하는 디바이스 기기까지와는 호환 된다는 것

✅minSdk와 targetSdk

minSdk

애플리케이션이 실행하는 데 필요한 최소 API 레벨을 지정하는 정수입니다. Android 시스템은 시스템의 API 레벨이 이 특성에 지정된 값보다 낮은 경우 사용자가 애플리케이션을 설치하는 것을 방지합니다.

targetSdk

  • Android OS가 진화함에 따라(=OS 버전 상승 = API level 상승) 특정 api를 실행했을 때 행동이나 관련된 외형이 변하기도 합니다.
  • 예를 들면 제가 만드는 app이 Android OS 버전 4.0에서 개발되고 테스트 됐을 지라도, 이 app을 Android OS 버전 7.0에서 실행시키면 app이 동작이 약간 다를 수 있습니다. 왜냐하면 어느 안드로이드 버전에서 실행시키느냐에 따라.. 동일한 api를 호출해도 동작이나 외형이 다를 수 있기 때문입니다. 그렇기에 targetSdkVersion에 Android OS 버전 4.0에 해당하는 API level인 14로 지정하면, Android OS 버전 7.0인 디바이스에서 그 app을 실행시켜도 Android OS 버전 4.0과 동일하게 동작합니다. (= compatibility mode enable = 호환성 모드 활성화)
  • 만약 호환성 모드를 원치 않고, Android OS 버전 7.0의 행동이나 외형을 사용하고 싶으면 targetSdkVersion에 Android OS 버전 7.0에 해당하는 API level인 24를 입력하면 됩니다.
  • 중요하게 볼 점은.. 이 targetSdkVersion 값은 고정할 게 아니라, Android OS의 새 버전이 나옴에 따라 상승시키고 철저하게 테스트할 것을 권장하는 것 같습니다.
  • 지금 내 개발 환경은 자동으로 targetSdk31 이었음 아직 API Level 29까지밖에 안나오지 않았나.. 싶어 공식 문서를 보니 호환성을 위해 API 레벨을 낮춰서 타겟팅하면 사용자가 최신 수준의 개선사항 혜택을 못받아서 그런것 같다. 그리고 2021년 11월 이후 출시되는 앱은 모두 targetSdk30이상을 강제하고 있음!

    새로운 Android 버전이 출시될 때마다 보안 및 성능이 크게 개선되며 전반적으로 Android 사용자 환경이 향상됩니다. 이러한 변경사항 중 일부는 targetSdkVersion 매니페스트 속성(타겟 API 수준이라고도 함)을 통해 지원을 명시적으로 선언한 앱에만 적용됩니다.
    최신 API 수준을 타겟팅하도록 앱을 구성하면 사용자가 이러한 개선사항의 혜택을 받을 수 있으며, 이전 Android 버전에서도 계속해서 앱을 실행할 수 있습니다. 최신 API 수준을 타겟팅하면 앱에서 플랫폼의 최신 기능을 활용해 사용자 환경을 개선할 수 있습니다.

profile
'왜?'라는 물음을 해결하며 마지막 개념까지 공부합니다✍

0개의 댓글