Android stüdyosu: minSdkVersion ve targetSdkVersion neden hem AndroidManifest.xml'de hem de build.gradle'da belirtiliyor?


103

Android stüdyo hakkında garip bir şey keşfettim: build.gradledosyada , dosyada belirtilenleri geçersiz kılan bazı yapılandırma seçenekleri var AndroidManifest.xml.

Örneğin, şu satırlar vardı build.gradle:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 10
    }
...
}

bu, içindeki karşılık gelen etiketi geçersiz kılıyordu AndroidManifest.xml:

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

Aynı ayarların iki farklı dosyaya yayılmasını gerçekten sevmiyorum, bu yüzden onu güvenli bir şekilde kaldırıp kaldıramayacağımı build.gradleveya AndroidManifest.xmlnerede saklamanın daha mantıklı olduğunu merak ediyorum .

Yanıtlar:


111

Gradle, manifest değerlerini geçersiz kılar ve ben build.gradle, manifest yerine dosyayı güncellemeyi tercih ederim . Muhtemelen Gradle'ı kullanmanın doğru yolu budur. Gradle, bir IDE aracılığıyla kontrol edilebilen ürün tatlarını destekler ve bu ürün tatları, Manifest'imizde paket adı, sürüm kodu, sürüm adı, hedef SDK ve diğerleri gibi birçok şeyi değiştirebilir. Ardından, Android Studio'da tek bir tıklama ile birçok özelliği değiştirebilir ve başka bir apk oluşturabilirsiniz.

Manifest'i olduğu gibi bırakabilir ve tüm konfigürasyonu içinde yapabilirsiniz build.gradle. Güvenle kaldırabilirsiniz

<uses-sdk></uses-sdk>

bildirimden ve sürüm kodlarından.


3
Merak edenler için, böyle oluşturulmuş bir APK'yi açmak için apktool kullanırsanız, AndroidManifest'te minSdkVersion'ı gerçekten görmezsiniz. Nereye gittiğini bilmiyorum ama doğru olanı yapıyor (Google Play'e yükleyerek onayladım)!
Dan J

6
Garip. Google, minSDK'ya uygulamamızın hangi API'yi çağırdığına karar veriyor gibi görünüyor. Benim app / build.gradle, minSDK'nin Android 2.2 olduğunu belirtmesine rağmen, Google Play'de minSDK = Android 1.6 diyor. Ve evet, derlenmiş AndroidManifest.xml dosyası hiçbir minSDK bilgisi içermez. Bizi Android 1.6 cihazlarını da desteklemeye "zorladığı" için bunun bir sorun olduğunu düşünüyorum.
sancho21

1
Buradaki kenar çubuğu: developer.android.com/guide/topics/manifest/… , Play'in bir şekilde manifest'i hala kullandığını gösteriyor. Belki de APK oluşturmadan önce sahne arkasına kademeli olarak yeniden eklenmiştir?
jordanpg

4
İşte böyle çalışır. Gradle, derleme sırasında tezahür ettirmek için eksik bilgileri ekleyecektir.
mar3kk

5
@ sancho21 Bu, alfa ve beta testi sırasında Google Play mağazasında bilinen bir hatadır. Üretim için bastığınızda çözülmelidir. Yetkili bir kaynak değil, ancak cevaplara
bakın.unity3d.com/questions/683972/…

0

Android dokümanlarından:

Not: Uygulamanız uygulama sürümünü doğrudan öğede tanımlıyorsa Gradle derleme dosyasındaki sürüm değerleri, manifest'teki ayarları geçersiz kılar. Ayrıca, Gradle derleme dosyalarında bu ayarları tanımlamak, uygulamanızın farklı sürümleri için farklı değerler belirlemenize olanak tanır. Daha fazla esneklik ve manifest birleştirildiğinde olası üzerine yazmayı önlemek için, bu öznitelikleri öğeden kaldırmalı ve bunun yerine Gradle derleme dosyalarında sürüm ayarlarınızı tanımlamalısınız.

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


1
Sanırım o kısımdan bahsediyordu versionCode . Bir sonrakini Specify API level requirementsbölümden alıntılamalıydınız
Uzun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.