compileSdkVersion과 targetSdkVersion의 차이점은 무엇입니까? 잘 모르겠습니다 targetSdkVersion. 그것이 말하는 전부는

Gradle을 사용하여 빌드하기위한 설명서 를 살펴 보았지만 여전히 차이점 compileSdkVersion과 차이점을 잘 모르겠습니다 targetSdkVersion.

그것이 말하는 전부는 :

compileSdkVersion속성은 컴파일 대상을 지정합니다.

“컴파일 대상”이란 무엇입니까?

이것을 해석하는 두 가지 가능한 방법이 있습니다.

  1. compileSdkVersion반면, 응용 프로그램 구축에 사용되는 컴파일러의 버전 targetSdkVersion은 IS “적용 대상이 API 수준” . (이 경우라면 ? compileSdkVersion보다 크거나 같아야 한다고 가정 합니다 targetSdkVersion.
  2. 그들은 같은 것을 의미합니다. “compilation target”== “응용 프로그램이 대상으로하는 API 레벨”
  3. 다른 것?

나는 이 질문 이 이전에 요청 된 것을 보았지만 하나의 대답은 문서를 인용하는 것입니다.



답변

compileSdkVersion

compileSdkVersion앱에 대해 컴파일 된 API의 버전입니다. 즉, 해당 버전의 API에 포함 된 Android API 기능 (및 모든 이전 버전)을 사용할 수 있습니다. API 16 기능을 사용하려고하지만 compileSdkVersion15로 설정 하면 컴파일 오류가 발생합니다. compileSdkVersion16으로 설정 한 경우 앱의 실행 경로가 API 16에 특정한 API를 호출하지 않는 한 API 15 디바이스에서 앱을 계속 실행할 수 있습니다.

targetSdkVersion

targetSdkVersion당신이 활용할 수있는 방법을 앱이 컴파일 또는 어떤 API를 함께 할 수 없다. 는 targetSdkVersion당신이 지정한 버전 (아마도에 포함까지)에 응용 프로그램을 테스트 한 것을 나타 내기 위해서 가정된다. 이것은 인증과 비슷하거나 OS 기능 측면에서 앱을 처리하는 방법에 대한 힌트로 Android OS를 제공하고 있음을 나타냅니다.

예를 들어, 설명서에 다음 과 같이 나와 있습니다.

예를 들어이 값을 “11”이상으로 설정하면 Android 3.0 이상에서 실행할 때 시스템이 앱에 새로운 기본 테마 (Holo)를 적용 할 수 있습니다.

런타임시 Android OS 는이 값을 기반으로 OS 컨텍스트에서 앱이 양식화되거나 달리 실행되는 방식을 변경할 수 있습니다. 이 값의 영향을받는 다른 몇 가지 알려진 예가 있으며 해당 목록은 시간이 지남에 따라 증가 할 수 있습니다.

실질적인 목적으로 대부분의 앱은 targetSdkVersion최신 버전의 API 로 설정 하려고합니다. 이렇게하면 최신 Android 기기에서 앱이 최대한 멋지게 보입니다. 을 지정하지 않으면 targetSdkVersion기본값은 minSdkVersion입니다.


답변

원 라이너 가이드로서 :

minSdkVersion <= targetSdkVersion <= compileSdkVersion

이상적으로 :

minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)

이안 레이크 (Ian Lake)의이 훌륭한 게시물에서 더 읽어보기


답변

compileSdkVersion최신 안정 버전이어야합니다. 는 targetSdkVersion완벽하게 테스트 및 작거나 같아야한다 compileSdkVersion.


답변

게임에 늦었습니다. 위의 몇 가지 훌륭한 답변이 있습니다. 본질적으로 compileSdkVersion앱이 컴파일 된 API 버전이고 targetSdkVersion앱은 테스트 된 버전을 나타냅니다.

다음 참고 사항으로 해당 답변을 보완하고 싶습니다.

  1. targetSdkVersion영향 권한을 요청하는 방법 :

    • 장치가 안드로이드 6.0 (API 레벨 23) 이상을 실행하고, 경우 응용 프로그램의가 targetSdkVersion23 이상이며, 실행시 사용자의 응용 프로그램 요청 권한.
    • 장치가 안드로이드 5.1 (API 레벨 22)를 실행하는 경우 낮추거나 응용 프로그램의가 targetSdkVersion22 이하이고, 시스템은 사용자가 앱을 설치하는 경우 사용 권한을 부여하도록 요청합니다.
  2. compileSdkVersion앱의 targetSdkVersion에서 선언 한 버전보다 높으면 시스템에서 호환성 동작을 활성화하여 앱이 계속 예상대로 작동하도록 할 수 있습니다. ( REF )

  3. 각각의 새로운 안드로이드 릴리스와 함께 …

    • targetSdkVersion 최신 API 레벨에 맞게 증가한 다음 해당 플랫폼 버전에서 애플리케이션을 철저히 테스트하십시오.
    • compileSdkVersion반면에 새 플랫폼 버전 전용 기능을 추가하지 않는 한 변경하지 않아도됩니다.
    • 결과적으로 targetSdkVersion종종 (초기)보다 compileSdkVersion작지만, 잘 유지 / 구축 된 앱을 보는 것은 드문 일이 아닙니다targetSdkVersion > compileSdkVersion

답변

The CompileSdkVersion 개발 프로세스 중에 앱이 컴파일 등을 위해 사용하는 SDK 플랫폼의 버전입니다 (항상 최신 버전을 사용해야 함). 사용중인 API 버전과 함께 제공됩니다.

build.gradle파일 에서 이것을 볼 수 있습니다 :

targetSdkVersion:앱이 개발 프로세스 후에 앱 스토어에 제공 할 수있는 정보를 포함합니다 TARGET the SPECIFIED version of the Android platform. 앱의 기능에 따라 현재보다 낮은 버전의 API를 타겟팅 할 수 있습니다. 예를 들어 현재 버전이 23 인 경우에도 API 18을 타겟팅 할 수 있습니다.

이 공식 Google 페이지를 잘 살펴보십시오 .


답변

compiledSdkVersion이전 답변과 관련 하여 많은 차이점이 있으므로 Android의 웹 페이지에 따라 여기에서 약간의 설명을 시도합니다.

A-Android의 말

https://developer.android.com/guide/topics/manifest/uses-sdk-element.html 에 따르면 :

플랫폼 버전 및 API 레벨 선택 애플리케이션을 개발할 때 애플리케이션을 컴파일 할 플랫폼 버전을 선택해야합니다. 일반적으로 응용 프로그램이 지원할 수있는 가장 낮은 버전의 플랫폼에 대해 응용 프로그램을 컴파일해야합니다.

따라서 Android에 따르면 올바른 순서입니다.

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B-다른 사람들의 말

어떤 사람들은 항상 가장 높은 컴파일 된 SkdVersion을 사용하는 것을 선호합니다. minSdkVersion보다 새로운 API 기능을 사용하고 있는지 확인하기 위해 코드 힌트에 의존하기 때문에 코드를 사용하지 않도록 변경하거나 런타임시 사용자 API 버전을 검사하여 조건부로 이전 API 버전의 폴 백과 함께 사용하기 때문입니다.

더 이상 사용되지 않는 사용에 대한 힌트도 코드에 표시되어 새로운 API 레벨에서 더 이상 사용되지 않는 것을 알 수 있으므로 원하는 경우 적절하게 대응할 수 있습니다.

따라서 다른 사람들에 따르면 올바른 순서입니다.

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

무엇을해야합니까?

그것은 당신과 당신의 응용 프로그램에 달려 있습니다.

런타임시 사용자의 API 레벨에 따라 다른 API 기능을 제공하려는 경우 옵션 B를 사용하십시오. 코딩하는 동안 사용하는 기능에 대한 힌트를 얻을 수 있습니다. 런타임에 사용자 API 레벨을 확인하지 않고 minSdkVersion보다 최신 API 기능을 사용하지 않도록하십시오. 그렇지 않으면 앱이 중단됩니다. 이 접근법은 또한 코딩하는 동안 새로운 것과 오래된 것을 배우는 이점이 있습니다.

새로운 기능이나 오래된 기능을 이미 알고 있고 업데이트되지 않는 일회성 앱을 개발 중이거나 조건부로 새로운 API 기능을 제공하지 않을 것이라고 확신한다면 옵션 A를 사용하십시오. 귀찮게하지 않습니다. 더 이상 사용되지 않는 힌트가 포함되어 있으므로 최신 API 기능을 사용할 수 없습니다.


답변

내 2 센트 : 모든 SDK 버전과 컴파일 할 수 있지만 “최소 SDK 버전”에서 지원하지 않는 API는 호출하지 않도록주의하십시오. 즉, 최신 버전의 SDK에 대해 “컴파일”할 수 있습니다.

“타겟 버전”은 처음에 타겟팅하고 테스트 한 대상을 나타냅니다. 실사를하지 않은 경우 Android에 “Oreo”의 “Lollipop”대상 앱을 배포하기 전에 추가 확인을 수행해야한다는 사실을 Android에 알리는 방법입니다.

따라서 “대상 버전”은 “최소 SDK 버전”보다 낮지 않지만 “컴파일 된 버전”보다 높을 수는 없습니다.