App : Build Gradle
compileSdkVersion 컴파일 SDK 버전
컴파일 SDK 버전은 코드를 빌드할 때 사용하는 버전이다. 매니페스트 파일에는 사용되지 않는다.
안드로이드의 기능들은 SDK의 클래스와 함수 형태로 사용된다.
안드로이드 스튜디오가 import문으로 참조하는 클래스나 함수가 바로 이 부분이다.
가장 최신에 가까우면서 안정된 API레벨을 선택하는 것이 좋다.
minSdkVersion 최소 SDK 버전
앱을 설치하는 기준으로 삼는 최소한의 안드로이드 버전이다.
예를들어, 21버전 롤리 팝을 기준으로 한다면, 롤리팝 또는 그 이상의 버전 안드로이드 장치에서
해당 앱을 설치하고 실행할 수 있다는 의미이다. 이 보다 낮은 버전에 있는 안드로이드라면 이 앱을 설치 못한다.
보통 해당 최소 SDK를 설정하면 몇 %의 기기에서 가동가능한지 뜬다. 보통 80%이상 혹은 50-60%정도면 충분하다.
targetSdkVersion 목표 SDK 버전
앱 설계에 사용된 API 레벨을 안드로이드에 알려준다. 대부분의 경우에 이 값이 가장 최신의 안정화된 안드로이드 버전이 된다.
왜냐하면 하위 버전과의 호환성이 유지되기 때문이다.
목표 SDK가 최소 SDK 보다 낮게 지정한다면?
새로운 SDK에서는 앱이 장치에 보이는 방법이 변경될 수 있으며, 심지어는 안드로이드 운영체제가 내부적으로 작동하는 방식도 달라질 수 있다.
무엇보다 구글 플레이 스토어에 올리려면, 목표 SDK의 최저 버전의 성능이나 보안성 개선 등의 장점을 사용자가 얻을 수 있도록 이보다 낮은 버전의 목표 SDK 앱은 플레이 스토어에서 거부된다.
이 값들은 변경이 가능하다. 변경하면 반드시 sync now를 해주어야 한다.
컴파일 SDK 버전 과 최소 SDK 버전의 차이가 나고, 사용되는 함수나 클래스가 최신 버전이라면, 최소 버전의 해당하는 사용자는 어떻게 해야할까? 롤리팝이나 최소 버전이 실행 중인 앱을 설치하고 실행하면 중단되거나 해당 코드가 무시된다. (무슨의미인가 싶다.)
Lint 덕분에 이러한 문제를 컴파일 시점에서 잡아낼 수 있다. 고쳐준다기 보다 그러한 문제되는 부분을 Lint에서 미리 알려준다고 보면 된다. (즉, 너무 복잡해지면, 그냥 최소 버전을 높여 버리면 된다. )
Lint 분석은 Analyze - > Inspect Code... -> OK 를 누르면 된다.
Lint를 실행하면, 이렇게 실행창이 뜨고, 어느 부분이 문제가 되는지 뜬다.
이런 경우 최소 SDK 버전을 올려주면 된다. 그러나 그 이하의 버전에는 사용할 수 없다는 의미이다.
따라서 장치의 안드로이드 버전을 검사하는 조건문 내부에 도 높은 버전의 API실행 코드를 포함하는 것이 좋은 방법이다.
@SuppressLint("RestrictedApi")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
...
cheatButton.setOnClickListener { view ->
...
// ActivityOptions.makeClipRevealAnimation을 통해서 옵션을 만들어준다.
// 조건문을 통해서 SDK_INT를 Build.VERSION_CODES.M 이상으로 조건을 걸어준다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val options = ActivityOptions.makeClipRevealAnimation(view, 0, 0, view.width, view.height)
startActivityForResult(intent, REQUEST_CODE_CHEAT, options.toBundle())
} else {
startActivityForResult(intent, REQUEST_CODE_CHEAT)
}
...
}
}
그러나 위의 코드 처럼 조건문과 이노테이션을 붙여 사용할 수 있게 해줄 수 있다.
@SuppressLint("RestrictedApi") 를 onCreate부분에 추가해준다.
그리고, 해당 문제 부분에 조건문으로 감싸주면 가능하다.
if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.M) {
23버전이상인 경우 이 쪽에 코드를 넣어서 실행하고,
}else{
그렇지 않은 경우 이쪽의 문제 없이 진행되도록 설정 해주면 된다.
}
여기서 Build.VERSION.SDK_INT 는 상수이다.
현재 장치의 안드로이드 버전을 나타낸다.
Build.VERSION_CODES.M에서의 M은 마쉬멜로 버전을 나타낸다. 해당 버전을 고를 수 있다.
Jetpack 활용하기
재트팩을 활용하면 위와 같이 버전에 맞춘 추가 코드를 작성하지 않아도 된다.
제트팩은 하위호환성이 제공되기 때문이다.
그러나 맹목적으로 제트팩을 사용하면 위험할 수 있다. 항상 더블체크하여 사용에 차이가 없는지 확인할 필요는 있다.
버전 관리 SDK문서 관심 갖기
SDK에는 알아 둘 것이 매우 많다. 그리고 정기적으로 새로운 안드로이드 버전이 나오면 이 버전에는 새로운 것이 무엇이 있고 어떻게 사용하는지 배워두어야 한다. [안드 개발자 웹 페이지 가기]
그래서 내 블로그에도 조금씩 버전에 대한 정보를 저장하려는 글이 있다. [보러 가기]
수 많은 개발 참고 문서가 있다. 그 중 API 개발 문서를 참고해보자.
ActivityOptions.makeClipRevealAnimation() 함수를 찾아보았다. [보러가기]
'Programming > Android' 카테고리의 다른 글
JetPack (0) | 2021.07.22 |
---|---|
XML options (0) | 2021.07.18 |
Life cycle 생명 주기 (0) | 2021.07.14 |