Android Studio: เหตุใดจึงระบุ minSdkVersion และ targetSdkVersion ทั้งใน AndroidManifest.xml และ build.gradle


103

ฉันเพิ่งค้นพบบางอย่างที่แปลก ๆ เกี่ยวกับ Android studio: มีตัวเลือกการกำหนดค่าบางอย่างใน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ไฟล์มากกว่าไฟล์ Manifest อาจเป็นวิธีที่ถูกต้องโดยใช้ Gradle Gradle รองรับรสชาติของผลิตภัณฑ์ซึ่งสามารถควบคุมได้ผ่าน IDE และรสชาติของผลิตภัณฑ์เหล่านั้นสามารถเปลี่ยนแปลงได้หลายอย่างใน Manifest ของเราเช่นชื่อแพ็กเกจรหัสเวอร์ชันชื่อเวอร์ชัน SDK เป้าหมายและอื่น ๆ อีกมากมาย จากนั้นคลิกเพียงครั้งเดียวใน Android Studio คุณสามารถเปลี่ยนคุณสมบัติมากมายและสร้าง APK อื่นได้

build.gradleคุณสามารถแสดงชัดแจ้งเป็นมันและทำทั้งหมดในการกำหนดค่า คุณสามารถลบออกได้อย่างปลอดภัย

<uses-sdk></uses-sdk>

จากไฟล์ Manifest และรหัสเวอร์ชัน


3
สำหรับใครที่สงสัยว่าหากคุณใช้ apktool เพื่อคลายไฟล์ APK ที่สร้างขึ้นแบบนี้คุณจะไม่เห็น minSdkVersion ใน AndroidManifest ฉันไม่รู้ว่ามันไปไหน แต่มันทำในสิ่งที่ถูกต้อง (ฉันยืนยันโดยการอัปโหลดไปยัง Google Play)!
แดน J

6
แปลก. ดูเหมือนว่า Google จะตัดสินใจ 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 ยังคงใช้ไฟล์ Manifest อยู่ อาจจะมีการแทรกใหม่เบื้องหลังโดย gradle ก่อนสร้าง APK?
jordanpg

4
นั่นคือวิธีการทำงาน Gradle จะแทรกข้อมูลที่ขาดหายไปในรายการระหว่างการคอมไพล์
มี.ค. 3

5
@ sancho21 นี่คือบั๊กที่รู้จักกับ Google Play Store ระหว่างการทดสอบอัลฟาและเบต้า ควรแก้ไขเมื่อคุณกดเพื่อแยง ไม่ใช่แหล่งข้อมูลที่เชื่อถือได้ แต่ดูanswer.unity3d.com/questions/683972/…
Tom Lubitz

0

จากเอกสาร Android:

หมายเหตุ: หากแอปของคุณกำหนดเวอร์ชันของแอปในองค์ประกอบโดยตรงค่าเวอร์ชันในไฟล์สร้าง Gradle จะแทนที่การตั้งค่าในไฟล์ Manifest นอกจากนี้การกำหนดการตั้งค่าเหล่านี้ในไฟล์บิวด์ 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.