แม้ว่า Android เวอร์ชันล่าสุดมักจะมี API ที่ยอดเยี่ยมสำหรับแอปของคุณ แต่คุณก็ควรสนับสนุน Android เวอร์ชันเก่าต่อไปจนกว่าอุปกรณ์จำนวนมากขึ้นจะได้รับการอัปเดต บทเรียนนี้จะแสดงวิธีใช้ประโยชน์จาก API ล่าสุดในขณะที่ยังคงรองรับเวอร์ชันเก่าด้วย
ใช้ตัวช่วยสร้างโปรเจ็กต์ใหม่ของ Android Studio เพื่อดูการกระจายอุปกรณ์ที่ใช้งานอยู่ ซึ่งใช้ Android แต่ละเวอร์ชัน การกระจายนี้อิงตามจำนวนอุปกรณ์ที่ เข้าชม Google Play Store โดยทั่วไป เราขอแนะนำให้รองรับอุปกรณ์ที่ใช้งานอยู่ประมาณ 90% ขณะที่ กำหนดเป้าหมายแอปเป็นเวอร์ชันล่าสุด
เคล็ดลับ: หากต้องการมอบฟีเจอร์และฟังก์ชันการทำงานที่ดีที่สุดใน Android หลายเวอร์ชัน คุณควรใช้ Android Support Library ในแอป ซึ่งจะช่วยให้คุณใช้ API ของแพลตฟอร์มล่าสุดหลายรายการในเวอร์ชันเก่าได้
ระบุระดับ API ขั้นต่ำและเป้าหมาย
ไฟล์ AndroidManifest.xml
อธิบายรายละเอียดเกี่ยวกับแอปของคุณและ
ระบุเวอร์ชันของ Android ที่รองรับ โดยเฉพาะอย่างยิ่ง แอตทริบิวต์ minSdkVersion
และ targetSdkVersion
สำหรับองค์ประกอบ <uses-sdk>
จะระบุระดับ API ต่ำสุดที่แอปของคุณเข้ากันได้ และระดับ API สูงสุดที่คุณออกแบบและทดสอบแอป
เช่น
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" /> ... </manifest>
เมื่อมีการเปิดตัว Android เวอร์ชันใหม่ๆ สไตล์และลักษณะการทำงานบางอย่างอาจเปลี่ยนแปลงไป
หากต้องการให้แอปใช้ประโยชน์จากการเปลี่ยนแปลงเหล่านี้และตรวจสอบว่าแอปเข้ากับสไตล์ของอุปกรณ์ของผู้ใช้แต่ละรายได้ คุณควรตั้งค่าtargetSdkVersion
ให้ตรงกับ Android เวอร์ชันล่าสุดที่พร้อมใช้งาน
เนื่องจากเวอร์ชันรองของ SDK ไม่ได้เชื่อมโยงกับการเปลี่ยนแปลงลักษณะการทำงาน จึงไม่สามารถตั้งค่า targetSdkVersion
ให้แสดงเวอร์ชันรองของ SDK ได้ หากต้องการเรียก API ใน SDK เวอร์ชันย่อยที่ใหม่กว่า minSdkVersion
ให้ตรวจสอบเวอร์ชันระบบที่รันไทม์
ตรวจสอบเวอร์ชันของระบบที่รันไทม์
Android มีโค้ดที่ไม่ซ้ำกันสำหรับแต่ละเวอร์ชันของแพลตฟอร์มในBuild
คลาสค่าคงที่ ใช้โค้ดเหล่านี้ภายในแอปเพื่อสร้างเงื่อนไขที่รับประกันว่าโค้ดที่
ขึ้นอยู่กับ API ระดับสูงกว่าจะทำงานเฉพาะเมื่อ API เหล่านั้นพร้อมใช้งานในระบบ
Kotlin
private fun setUpActionBar() { // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { actionBar.setDisplayHomeAsUpEnabled(true) } }
Java
private void setUpActionBar() { // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); } }
คุณใช้ Build.VERSION.SDK_INT_FULL เพื่อตรวจสอบว่ามี SDK เวอร์ชันหลักหรือเวอร์ชันย่อยหรือไม่
Kotlin
if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) { // Use APIs introduced in a major or minor SDK release }
Java
if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) { // Use APIs introduced in a major or minor SDK release }
หมายเหตุ: เมื่อแยกวิเคราะห์ทรัพยากร XML ระบบ Android จะไม่สนใจแอตทริบิวต์ XML
ที่อุปกรณ์ปัจจุบันไม่รองรับ คุณจึงใช้แอตทริบิวต์ XML ที่
รองรับเฉพาะในเวอร์ชันใหม่ได้อย่างปลอดภัยโดยไม่ต้องกังวลว่าเวอร์ชันเก่าจะใช้งานไม่ได้เมื่อ
พบโค้ดดังกล่าว เช่น หากคุณตั้งค่า
targetSdkVersion="11"
แอปจะรวม ActionBar
โดยค่าเริ่มต้น
ใน Android 3.0 ขึ้นไป จากนั้นหากต้องการเพิ่มรายการในเมนูลงในแถบการดำเนินการ คุณต้องตั้งค่า
android:showAsAction="ifRoom"
ใน XML ของทรัพยากรเมนู การดำเนินการนี้ในไฟล์ XML ข้ามเวอร์ชันนั้นปลอดภัย เนื่องจาก Android เวอร์ชันเก่าจะเพียงแค่ไม่สนใจแอตทริบิวต์ showAsAction
(กล่าวคือ คุณไม่จำเป็นต้องมีเวอร์ชันแยกต่างหากใน res/menu-v11/
)
ใช้สไตล์และธีมของแพลตฟอร์ม
Android มีธีมประสบการณ์ของผู้ใช้ที่ทำให้แอปมีรูปลักษณ์ของระบบปฏิบัติการพื้นฐาน คุณใช้ธีมเหล่านี้กับแอปได้ภายใน ไฟล์ Manifest การใช้รูปแบบและธีมในตัวเหล่านี้จะช่วยให้แอปของคุณ ดูเป็นไปตามรูปลักษณ์และความรู้สึกของ Android เวอร์ชันล่าสุดอย่างเป็นธรรมชาติในแต่ละรุ่นใหม่
หากต้องการให้กิจกรรมของคุณดูเหมือนกล่องโต้ตอบ ให้ทำดังนี้
<activity android:theme="@android:style/Theme.Dialog">
วิธีทำให้กิจกรรมมีพื้นหลังโปร่งใส
<activity android:theme="@android:style/Theme.Translucent">
วิธีใช้ธีมที่กำหนดเองซึ่งกำหนดไว้ใน /res/values/styles.xml
<activity android:theme="@style/CustomTheme">
หากต้องการใช้ธีมกับทั้งแอป (กิจกรรมทั้งหมด) ให้เพิ่มandroid:theme
แอตทริบิวต์
ลงในองค์ประกอบ <application>
ดังนี้
<application android:theme="@style/CustomTheme">
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างและการใช้ธีมได้ในคำแนะนำเกี่ยวกับสไตล์และธีม