สร้าง APK หลายรายการสำหรับหน้าจอขนาดต่างๆ

หากคุณเผยแพร่แอปใน Google Play คุณควรสร้างและอัปโหลด Android App Bundle เมื่อดำเนินการนี้ Google Play จะดำเนินการดังกล่าวโดยอัตโนมัติ สร้างและแสดง APK ที่เพิ่มประสิทธิภาพสำหรับการกำหนดค่าอุปกรณ์ของผู้ใช้แต่ละราย เพื่อให้ดาวน์โหลดได้เฉพาะ โค้ดและทรัพยากรที่จำเป็นต่อการเรียกใช้แอป การเผยแพร่ APK หลายรายการมีประโยชน์ในกรณีที่คุณ ไม่เผยแพร่ไปยัง Google Play แต่คุณต้องสร้าง รับรอง และจัดการ APK แต่ละรายการด้วยตนเอง

เมื่อพัฒนาแอปพลิเคชัน Android เพื่อใช้ประโยชน์จาก APK หลายรายการบน Google Play ก็เป็นสิ่งสำคัญที่จะใช้แนวทางปฏิบัติที่ดีตั้งแต่เริ่มต้น และป้องกันอาการปวดศีรษะโดยไม่จำเป็น ต่อไปในกระบวนการพัฒนา บทเรียนนี้แสดงวิธีสร้าง APK หลายรายการ โดยแต่ละแอปก็ครอบคลุมขนาดหน้าจอที่ต่างกัน นอกจากนี้ คุณยังจะได้รับเครื่องมือที่จําเป็นในการทำให้การดูแลรักษาโค้ดฐาน APK หลายรายการเป็นไปอย่างราบรื่นที่สุด

ยืนยันว่าคุณต้องมี APK หลายรายการ

เมื่อพยายามสร้างแอปพลิเคชันที่ทำงานได้ในอุปกรณ์ Android หลายขนาด ตามปกติแล้วคุณต้องการให้แอปพลิเคชันใช้ประโยชน์จาก พื้นที่ว่างทั้งหมดในอุปกรณ์ขนาดใหญ่ โดยไม่ต้องแลกกับความสามารถในการใช้งานร่วมกันหรือความสามารถในการใช้งานบนหน้าจอขนาดเล็ก ในระยะแรกอาจดูเหมือนว่า แม้ว่าการรองรับ APK หลายตัวจะเป็นทางออกที่ดีที่สุด แต่ก็ไม่ได้เป็นเช่นนั้นเสมอไป การใช้ APK เดี่ยว แต่ในส่วนคู่มือสำหรับนักพัฒนาซอฟต์แวร์ APK หลายรายการจะมีข้อมูลบางอย่างที่เป็นประโยชน์เกี่ยวกับวิธี โดยใช้ APK เดียว รวมถึงการใช้ไลบรารีการสนับสนุนของเรา และคุณควรอ่าน คู่มือในการรองรับหลายหน้าจอ และยังมีคลังการสนับสนุน สามารถดาวน์โหลดโดยใช้ Android SDK ได้ ซึ่งช่วยให้คุณสามารถใช้ Fragment ในอุปกรณ์ Pre-Honeycomb (ทำให้ การรองรับหลายหน้าจอใน APK เดียวนั้นง่ายขึ้นมาก)

หากจัดการได้ การจำกัดแอปพลิเคชันของคุณไว้ใน APK เดียวมีข้อดีหลายประการ ดังนี้

  • การเผยแพร่และการทดสอบทำได้ง่ายขึ้น
  • มีฐานของโค้ดเพียงค่าเดียวที่ต้องบำรุงรักษา
  • แอปพลิเคชันของคุณสามารถปรับให้เข้ากับการเปลี่ยนแปลงการกำหนดค่าอุปกรณ์
  • การคืนค่าแอปในอุปกรณ์ต่างๆ ใช้งานได้ปกติ
  • หมดห่วงเรื่องความชื่นชอบของตลาด พฤติกรรมจาก "การอัปเกรด" จาก APK หนึ่งไปยัง ถัดไป หรือ APK ใดไปกับอุปกรณ์ระดับใด

ส่วนที่เหลือของบทเรียนนี้จะถือว่าคุณได้ศึกษาหัวข้อดังกล่าวและซึมซับแนวคิด ในแหล่งข้อมูลที่เชื่อมโยง และระบุว่า APK หลายรายการเป็นวิธีที่เหมาะสมสำหรับ แอปพลิเคชัน

ทำแผนภูมิข้อกำหนดของคุณ

เริ่มด้วยการสร้างแผนภูมิง่ายๆ เพื่อตรวจสอบจำนวน APK ที่ต้องการ และหน้าจอที่ต้องการ ขนาดที่แต่ละ APK ครอบคลุม โชคดีที่คุณสามารถ คำนวณความต้องการต่อได้อย่างรวดเร็วและง่ายดาย และมีข้อมูลอ้างอิงไว้ใช้ภายหลัง เริ่มต้นด้วยแถวของเซลล์ที่แสดงขนาดหน้าจอต่างๆ ที่พร้อมใช้งานบนแพลตฟอร์ม Android

เล็ก ปกติ ใหญ่ xlarge

ตอนนี้มีเพียงสีในแผนภูมิให้แต่ละสีแสดงถึง APK ลองดูตัวอย่างวิธีที่คุณ อาจใช้ APK แต่ละรายการกับหน้าจอบางขนาด

เล็ก ปกติ ใหญ่ xlarge

คุณอาจมี APK 2 รายการ ได้แก่ "เล็กและอื่นๆ ทุกอย่าง" ทั้งนี้ขึ้นอยู่กับความต้องการของคุณ หรือ "ขยายและ อื่นๆ" การใส่สีในแผนภูมิยังทำให้การสื่อสารภายในทีมง่ายขึ้น โดยคุณสามารถ ให้เรียก APK แต่ละรายการเป็น "น้ำเงิน" "เขียว" หรือ "แดง" ไม่ว่าจะมีหน้าจอกี่ประเภทก็ตาม ที่ครอบคลุม

ใส่โค้ดและทรัพยากรทั่วไปทั้งหมดไว้ในโปรเจ็กต์ไลบรารี

ไม่ว่าคุณจะปรับเปลี่ยนแอปพลิเคชัน Android ที่มีอยู่ หรือเริ่มต้นแอปพลิเคชันใหม่ตั้งแต่ต้น สิ่งแรกที่คุณควรทำกับฐานของโค้ด และสิ่งสำคัญที่สุดคือ ทุกอย่าง ที่อยู่ในโครงการห้องสมุดต้องอัปเดตเพียงครั้งเดียว (เช่น สตริงที่แปลเป็นภาษาท้องถิ่น ธีมสี ข้อบกพร่องที่แก้ไขแล้วในโค้ดที่แชร์) ซึ่งจะช่วยลดเวลาในการพัฒนาและลด ข้อผิดพลาดต่างๆ ที่สามารถหลีกเลี่ยงได้ง่ายๆ

หมายเหตุ: แม้ว่ารายละเอียดการใช้งานเกี่ยวกับวิธีสร้างและ รวมโครงการห้องสมุดอยู่นอกเหนือขอบเขตของบทเรียนนี้ คุณสามารถเรียนรู้ได้อย่างรวดเร็ว โดยอ่านสร้างไลบรารี Android

หากคุณจะแปลงแอปพลิเคชันที่มีอยู่ ไปใช้การรองรับ APK หลายไฟล์ เสาะหาโค้ดเบสสำหรับทุกไฟล์สตริงที่แปลแล้ว รายการค่า และธีม สี ไอคอนเมนู และเลย์เอาต์ที่จะไม่เปลี่ยนไปใน APK ต่างๆ และ ทั้งหมดไว้ในโครงการห้องสมุด โค้ดที่จะไม่เปลี่ยนแปลงมากนัก ไปในโครงการห้องสมุดด้วย คุณอาจพบว่าตัวเองขยายระยะเวลาเหล่านี้ เพื่อเพิ่มเมธอดจาก APK ไปยัง APK หนึ่งหรือสองเมธอด

ในทางกลับกัน หากคุณกำลังสร้างแอปพลิเคชันตั้งแต่ต้น ให้พยายามเขียนโค้ดในโปรเจ็กต์ไลบรารีก่อน จากนั้นจึงย้ายโค้ดไปยัง APK แต่ละรายการ หากจำเป็น วิธีนี้ง่ายมากในระยะยาว แทนที่จะเพิ่มไว้แค่บัญชีเดียว แล้วก็อีก แล้วก็ลองอีกที จากนั้นก็หลายเดือนต่อมาเพื่อดูว่าจะเลื่อน BLOB นี้ขึ้นได้ไหม ส่วนห้องสมุดได้โดยไม่ต้องทำอะไรให้ยุ่งยาก

สร้างโปรเจ็กต์ APK ใหม่

ควรมีโปรเจ็กต์ Android แยกต่างหากสำหรับแต่ละ APK ที่คุณจะเผยแพร่ ใช้งานง่าย ขององค์กร ให้วางโปรเจ็กต์ไลบรารีและโปรเจ็กต์ APK ที่เกี่ยวข้องทั้งหมดไว้ในโฟลเดอร์หลักเดียวกัน นอกจากนี้ โปรดทราบว่า APK แต่ละรายการต้องมีชื่อแพ็กเกจเดียวกัน แม้ว่าจะไม่จำเป็นต้องใช้ชื่อแพ็กเกจเดียวกับไลบรารีก็ตาม หากคุณจะมี APK 3 รายการตามรูปแบบดังกล่าว ที่อธิบายไว้ก่อนหน้านี้ ไดเรกทอรีรากอาจมีลักษณะดังนี้

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-red

เมื่อสร้างโปรเจ็กต์แล้ว ให้เพิ่มโปรเจ็กต์ไลบรารีเป็นการอ้างอิงไปยังโปรเจ็กต์ APK แต่ละโปรเจ็กต์ ถ้า ให้กำหนดกิจกรรมเริ่มต้นในโปรเจ็กต์ไลบรารี และขยายกิจกรรมนั้นใน APK ของคุณ การมีการกำหนดกิจกรรมเริ่มต้นในโครงการห้องสมุดทำให้คุณสามารถใส่ การเริ่มต้นแอปพลิเคชันของคุณในที่เดียว เพื่อให้ APK แต่ละรายการไม่ต้อง การนำ "Universal" มาใช้ใหม่ เช่น การเริ่มต้น Analytics การตรวจสอบการอนุญาตให้ใช้สิทธิ ขั้นตอนการเริ่มต้นใช้งานที่ไม่ค่อยมีการเปลี่ยนแปลงจาก APK ไปเป็น APK

ปรับไฟล์ Manifest

เมื่อผู้ใช้ดาวน์โหลดแอปพลิเคชันที่ใช้ APK หลายรายการผ่าน Google Play APK ที่จะใช้นั้นได้รับเลือกโดยใช้กฎง่ายๆ 2 ข้อดังนี้

  • ไฟล์ Manifest ต้องแสดงให้เห็นว่า APK ดังกล่าวมีสิทธิ์
  • APK ที่มีหมายเลขเวอร์ชันสูงสุดจะเป็นผู้ชนะ

ตัวอย่างเช่น มาดูชุด APK หลายรายการที่อธิบายไว้ก่อนหน้านี้ และสมมติว่า APK แต่ละรายการได้รับการตั้งค่าให้รองรับหน้าจอทุกขนาดที่ใหญ่กว่าขนาดหน้าจอ "เป้าหมาย" ของแอป ถ่ายทีละรายการ ช่วงที่เป็นไปได้ของ APK แต่ละรายการจะมีลักษณะดังนี้

เล็ก ปกติ ใหญ่ xlarge
เล็ก ปกติ ใหญ่ xlarge
เล็ก ปกติ ใหญ่ xlarge

แต่หากใช้ "จำนวนเวอร์ชันสูงสุดจะชนะ" ถ้าเราตั้งค่าแอตทริบิวต์ versionCode ใน APK แต่ละรายการที่สีแดง ≥ สีเขียว ≥ สีน้ำเงิน แผนภูมิจะยุบลงจนเป็นดังนี้

เล็ก ปกติ ใหญ่ xlarge

ทีนี้ เรามาสมมติว่า APK สีแดงมีข้อกำหนดบางอย่างซึ่งอีก 2 รายการไม่มี หน้าตัวกรองใน Google Play ของ Android คู่มือนักพัฒนาซอฟต์แวร์มีรายการข้อผิดพลาดทั้งหมดที่เป็นไปได้ สมมติว่าสีแดงต้องใช้กล้องหน้า ประเด็นทั้งหมดของ APK สีแดงคือการใช้ สำหรับรับชมความบันเทิงด้วยกล้องหน้า แต่ปรากฏว่า อุปกรณ์ขนาดใหญ่บางรุ่นไม่มีกล้องด้านหน้า! สยองขวัญ

แต่โชคดีที่หากผู้ใช้เรียกดู Google Play จากอุปกรณ์ดังกล่าว Google Play จะดูไฟล์ Manifest และเห็นว่า Red ระบุกล้องหน้าเป็นข้อกำหนด แล้วจึงละเว้นแอปดังกล่าวโดยปริยาย เนื่องจากพิจารณาแล้วว่า Red กับอุปกรณ์นั้นไม่เข้ากัน จากนั้นระบบจะเห็นว่า สีเขียวไม่เพียงใช้ได้กับอุปกรณ์ขนาดใหญ่เท่านั้น แต่ยังไม่สนใจว่าจะมี กล้องหน้า ผู้ใช้ยังคงดาวน์โหลดแอปได้จาก Google Play เนื่องจาก แม้ว่ากล้องหน้าจะเสียหายทั้งหมด แต่ก็ยังมี APK ที่รองรับหน้าจอนั้น ขนาด 100 x 240

คุณต้องมีรหัสเวอร์ชันที่ดีเพื่อให้ APK ทั้งหมดของคุณอยู่ใน "แทร็ก" แยกกัน สคีม เวอร์ชันที่แนะนำนั้นอยู่ที่บริเวณรหัสเวอร์ชันของ คู่มือนักพัฒนาซอฟต์แวร์ของเรา เนื่องจากชุด APK ตัวอย่างมีการจัดการกับ 1 ใน 3 ที่เป็นไปได้เท่านั้น ก็เพียงพอแล้วในการแยก APK แต่ละรายการด้วย 1, 000 และเพิ่มขึ้นจากตรงนั้น ช่วงเวลานี้ อาจมีลักษณะดังนี้

น้ำเงิน: 1001, 1002, 1003, 1004...
เขียว: 2001, 2002, 2003, 2004...
แดง:3001, 3002, 3003, 3004...

เมื่อนำทั้งหมดนี้มารวมกัน ไฟล์ Manifest ของ Android ก็น่าจะมีลักษณะคล้าย ดังต่อไปนี้:

สีน้ำเงิน:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

สีเขียว:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

สีแดง:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="false"
        android:xlargeScreens="true" />
    ...

โปรดทราบว่าในทางเทคนิคแล้ว APK หลายรายการจะใช้งานได้กับหน้าจอที่รองรับ หรือแท็กหน้าจอที่เข้ากันได้ โดยทั่วไปแนะนำให้ใช้หน้าจอสนับสนุน และโดยทั่วไปแล้วเป็นความคิดที่ไม่ดีเลยที่จะใช้แท็กทั้ง 2 แท็กในไฟล์ Manifest เดียวกัน ทั้งนี้ ทำให้สิ่งต่างๆ ซับซ้อนโดยไม่จำเป็นและเพิ่มโอกาสที่จะเกิดข้อผิดพลาด และโปรดทราบว่าแทนที่จะใช้ประโยชน์จากค่าเริ่มต้น (ขนาดเล็กและ ปกติ จะเป็นจริงโดยค่าเริ่มต้นเสมอ) ไฟล์ Manifest จะตั้งค่าสำหรับ หน้าจอแต่ละขนาด วิธีนี้จะช่วยให้คุณไม่ต้องปวดหัวลงไปได้ ตัวอย่างเช่น ไฟล์ Manifest ที่มี SDK เป้าหมายของ < 9 จะมีการตั้งค่า "xlarge" เป็น "เท็จ" โดยอัตโนมัติ เนื่องจากไม่มีขนาดดังกล่าวอยู่ ดังนั้นโปรดระบุข้อมูลอย่างชัดเจน

ตรวจสอบเช็กลิสต์ก่อนการเปิดตัว

ก่อนอัปโหลดไปยัง Google Play โปรดตรวจสอบรายการต่อไปนี้อีกครั้ง โปรดทราบว่า เกี่ยวข้องกับ APK หลายรายการโดยเฉพาะ และมิได้เป็นรายการตรวจสอบที่สมบูรณ์ ที่มีการอัปโหลดไปยัง Google Play

  • APK ทั้งหมดต้องมีชื่อแพ็กเกจเดียวกัน
  • APK ทั้งหมดต้องรับรองด้วยใบรับรองเดียวกัน
  • หน้าจอทุกขนาดที่คุณต้องการให้ APK รองรับ โดยตั้งค่าเป็น "จริง" ในไฟล์ Manifest หน้าจอทุกขนาด ที่คุณต้องการหลีกเลี่ยง โปรดตั้งค่าเป็น "เท็จ"
  • ตรวจสอบตัวกรองไฟล์ Manifest อีกครั้งเพื่อหาข้อมูลที่ขัดแย้งกัน (APK ที่รองรับเฉพาะ ไม่มีใครเห็นคัพเค้กบนหน้าจอ XLARGE เลย)
  • ไฟล์ Manifest ของ APK แต่ละรายการต้องไม่ซ้ำกันในหน้าจอที่รองรับ พื้นผิว openGL หรือ เวอร์ชันแพลตฟอร์ม
  • ลองทดสอบ APK แต่ละรายการบนอุปกรณ์อย่างน้อย 1 เครื่อง แต่คุณมีโปรแกรมจำลองอุปกรณ์ที่ปรับแต่งได้มากที่สุดแห่งหนึ่งในธุรกิจอยู่ในเครื่องสำหรับพัฒนาซอฟต์แวร์ สนุกได้เลย

นอกจากนี้ควรตรวจสอบ APK ที่คอมไพล์แล้วก่อนนำเข้าสู่ตลาด เพื่อให้แน่ใจว่าไม่ได้มี ที่อาจซ่อนแอปพลิเคชันของคุณบน Google Play ได้ วิธีนี้ค่อนข้างง่ายด้วยการใช้ "aapt" ของ Google Aapt (เครื่องมือแพ็กเกจเนื้อหา Android) เป็นส่วนหนึ่งของกระบวนการสร้างสำหรับการสร้างและ ทำแพ็กเกจแอปพลิเคชัน Android ของคุณ และยังเป็นเครื่องมือที่ใช้งานสะดวกในการตรวจสอบแอปพลิเคชันเหล่านั้น

>aapt dump badging
package: name='com.example.hello' versionCode='1' versionName='1.0'
sdkVersion:'11'
uses-permission:'android.permission.SEND_SMS'
application-label:'Hello'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Hello' icon='res/drawable-mdpi/icon.png'
launchable-activity: name='com.example.hello.HelloActivity'  label='Hello' icon=''
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

เมื่อคุณตรวจสอบเอาต์พุต aapt อย่าลืมตรวจสอบว่าไม่มีค่าที่ขัดแย้งกัน รองรับหน้าจอและหน้าจอที่เข้ากันได้ และคุณไม่มี "used-feature" โดยไม่ตั้งใจ ค่า ที่เพิ่มเข้ามาอันเป็นผลมาจากสิทธิ์ที่คุณตั้งค่าไว้ในไฟล์ Manifest ในตัวอย่างข้างต้น APK ไม่แสดงให้คนส่วนใหญ่เห็น หรือบางอุปกรณ์ก็มองไม่เห็น

เหตุผล การเพิ่มสิทธิ์ที่จำเป็น SEND_SMS ทำให้ได้เพิ่มข้อกำหนดด้านฟีเจอร์ของ android.hardware.telephony โดยปริยาย เนื่องจากอุปกรณ์ขนาดใหญ่ (หรือทั้งหมด) ส่วนใหญ่เป็นแท็บเล็ตที่ไม่มีฮาร์ดแวร์สำหรับโทรศัพท์ Google Play จะกรอง APK นี้ในกรณีนี้ จนกว่าอุปกรณ์ในอนาคตจะมีขนาดใหญ่พอที่จะรายงานว่าหน้าจอเป็นขนาดที่ใหญ่และมีฮาร์ดแวร์โทรศัพท์

โชคดีที่ปัญหานี้แก้ไขได้ง่ายๆ ด้วยการเพิ่มสิ่งต่อไปนี้ลงใน ไฟล์ Manifest:

<uses-feature android:name="android.hardware.telephony" android:required="false" />

ระบบจะเพิ่มข้อกำหนด android.hardware.touchscreen โดยนัยด้วย หากต้องการให้ APK แสดงในทีวีที่ไม่ใช่อุปกรณ์หน้าจอสัมผัส คุณควรเพิ่มข้อมูลต่อไปนี้ลงในไฟล์ Manifest

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

เมื่อทำตามรายการตรวจสอบก่อนการเปิดตัวเรียบร้อยแล้ว ให้อัปโหลด APK ไปยัง Google Play อาจใช้เวลาสักพักกว่าที่แอปพลิเคชันจะปรากฏเมื่อเรียกดู Google Play ดำเนินการตรวจสอบเป็นครั้งสุดท้าย ดาวน์โหลดแอปพลิเคชันลงในอุปกรณ์ทดสอบใดๆ ที่คุณอาจต้องตรวจสอบ ที่ APK กำหนดเป้าหมายไปยังอุปกรณ์ที่ต้องการ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเผยแพร่ APK หลายรายการบน Google Play โปรดอ่าน การรองรับ APK หลายรายการ