Android 스튜디오 : minSdkVersion 및 targetSdkVersion이 AndroidManifest.xml 및 build.gradle 모두에 지정된 이유는 무엇입니까?


103

방금 Android 스튜디오에 대해 이상한 점을 발견했습니다 . 파일에 build.gradle지정된 항목을 재정의하는 일부 구성 옵션이 파일에 있습니다 AndroidManifest.xml.

예를 들어, 다음 줄이 있습니다 build.gradle.

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 10
    }
...
}

에서 해당 태그를 재정의했습니다 AndroidManifest.xml.

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="8"/>

두 개의 다른 파일에 동일한 설정이 퍼지는 것을 정말 좋아하지 않기 때문에 안전하게 제거 할 수 있는지 build.gradle, AndroidManifest.xml그리고 보관하는 것이 더 합리적 일지 궁금 합니다.

답변:


111

Gradle은 매니페스트 값을 재정의하며 매니페스트 build.gradle보다 파일 을 업데이트하는 것을 선호합니다 . 아마도 이것은 Gradle을 사용하는 올바른 방법입니다. Gradle은 IDE를 통해 제어 할 수있는 제품 버전을 지원하며 이러한 제품 버전은 패키지 이름, 버전 코드, 버전 이름, 대상 SDK 등과 같은 매니페스트의 많은 항목을 변경할 수 있습니다. 그런 다음 Android Studio에서 한 번의 클릭으로 많은 속성을 변경하고 다른 apk를 생성 할 수 있습니다.

매니페스트를 그대로두고 build.gradle. 안전하게 제거 할 수 있습니다.

<uses-sdk></uses-sdk>

매니페스트 및 버전 코드에서.


3
궁금한 사람을 위해 apktool을 사용하여 이와 같이 빌드 된 APK의 압축을 풀면 실제로 AndroidManifest에 minSdkVersion이 표시되지 않습니다. 어디로 가는지는 모르겠지만 옳은 일을합니다 (구글 플레이에 업로드해서 확인했습니다)!
Dan J

6
이상한. Google은 앱이 호출하는 API로 minSDK를 결정하는 것 같습니다. 내 app / build.gradle은 minSDK를 Android 2.2로 지정했지만 Google Play에서는 minSDK = Android 1.6이라고 말합니다. 예, 디 컴파일 된 AndroidManifest.xml에는 minSDK 정보가 없습니다. Android 1.6 기기도 지원하도록 "강제"하기 때문에 이것이 문제라고 생각합니다.
sancho21

1
여기 사이드 바 : developer.android.com/guide/topics/manifest/… 는 Play가 여전히 매니페스트를 어떻게 든 사용한다고 제안합니다. APK 빌드 전에 gradle에 의해 배후에서 다시 삽입되었을 수 있습니까?
jordanpg 2014 년

4
그것이 작동하는 방식입니다. Gradle은 컴파일 중에 누락 된 정보를 매니페스트에 삽입합니다.
mar3kk 2014 년

5
@ sancho21 이것은 알파 및 베타 테스트 중에 Google Play 스토어의 알려진 버그입니다. 찌르려고 밀면 해결되어야합니다. 아니 권위있는 소스 만 참조 answers.unity3d.com/questions/683972/...
톰 Lubitz

0

Android 문서에서 :

참고 : 앱이 요소에서 직접 앱 버전을 정의하는 경우 Gradle 빌드 파일의 버전 값이 매니페스트의 설정을 재정의합니다. 또한 Gradle 빌드 파일에서 이러한 설정을 정의하면 앱의 다른 버전에 대해 다른 값을 지정할 수 있습니다. 유연성을 높이고 매니페스트가 병합 될 때 잠재적 인 덮어 쓰기를 방지하려면 요소에서 이러한 속성을 제거하고 대신 Gradle 빌드 파일에서 버전 설정을 정의해야합니다.

https://developer.android.com/studio/publish/versioning.html#appversioning


나는 그 부분이 versionCode . Specify API level requirements섹션 에서 다음 항목을 인용 했어야합니다
Long
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.