สร้างแอปที่พักไว้สําหรับ Android Automotive OS

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

ทดสอบแอปที่มีอยู่บนโปรแกรมจำลอง Android Automotive OS

หากต้องการเริ่มสร้างแอปสำหรับ Android Automotive OS ให้ทดสอบแอปที่มีอยู่บนโปรแกรมจำลอง Android Automotive OS ก่อน ในการตั้งค่าโปรแกรมจำลอง ให้ทำตามขั้นตอน ขั้นตอนในหัวข้อทดสอบโดยใช้โปรแกรมจำลอง Android Automotive OS จากนั้นคุณจะสามารถเรียกใช้แอปโดยทำตามคำแนะนำใน เรียกใช้แอปในโปรแกรมจำลอง

เมื่อเรียกใช้แอป ให้สังเกตปัญหาด้านความเข้ากันได้ เช่น ปัญหาต่อไปนี้

  • หน้าจออินโฟเทนเทนมีการวางแนวแบบคงที่ แอปต้องรองรับทั้งการวางแนวตั้งและแนวนอนจึงจะเป็นไปตามหลักเกณฑ์ด้านคุณภาพของแอปรถยนต์
  • API ที่พร้อมใช้งานในอุปกรณ์อื่นๆ อาจไม่พร้อมใช้งานใน Android Automotive OS เช่น API บริการ Google Play บางรายการไม่พร้อมใช้งานใน Android Automotive OS โปรดดูส่วนปิดใช้ฟีเจอร์ เพื่อดูรายละเอียดเกี่ยวกับวิธีจัดการปัญหาเหล่านี้

กำหนดค่าไฟล์ Manifest ของแอป

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

ฟีเจอร์ที่จำเป็นของ Android Automotive OS

แอปที่สร้างสำหรับ Android Automotive OS ต้องใส่องค์ประกอบ <uses-feature> ต่อไปนี้ในไฟล์ AndroidManifest.xml เพื่อแสดงใน Play Store ในรถยนต์

<manifest ...>
    ...
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    ...
</manifest>

แอปที่ส่งไปยังแทร็กที่ไม่เกี่ยวข้องกับยานยนต์จะประกาศองค์ประกอบ <uses-feature> ที่แสดงในตัวอย่างโค้ดก่อนหน้าไม่ได้ เนื่องจากใช้ฮาร์ดแวร์เฉพาะรถยนต์ไม่ได้ ดังนั้น หากต้องการเผยแพร่แอปเดียวกันสำหรับทั้งอุปกรณ์ยานยนต์และอุปกรณ์ที่ไม่ใช่ยานยนต์ คุณจะต้องสร้างแอปอย่างน้อย 2 เวอร์ชัน ได้แก่ เวอร์ชันสำหรับอุปกรณ์ยานยนต์และเวอร์ชันสำหรับอุปกรณ์เคลื่อนที่ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างเวอร์ชันแยกเหล่านี้ได้ในเอกสารประกอบต่อไปนี้

แอปทั้ง 2 เวอร์ชันสามารถใช้ชื่อแพ็กเกจเดียวกันได้ แต่ต้องมี รหัสเวอร์ชันที่แตกต่างกันเนื่องจากมีการอัปโหลดไปยังแทร็กของ Play Store แยกกัน

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

นอกจากองค์ประกอบที่แสดงในตัวอย่างโค้ดก่อนหน้านี้แล้ว แอปที่สร้างขึ้นสำหรับ Android Automotive OS ต้องมีองค์ประกอบ <uses-feature> ต่อไปนี้ใน องค์ประกอบราก <manifest>:

<uses-feature
  android:name="android.hardware.wifi"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.portrait"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.landscape"
  android:required="false"/>

การตั้งค่าฟีเจอร์เหล่านี้อย่างชัดเจนเป็น "ไม่จำเป็น" จะช่วยรับประกันได้ว่าแอปของคุณ ไม่ขัดแย้งกับ ฟีเจอร์ฮาร์ดแวร์ที่พร้อมใช้งานในอุปกรณ์ Android Automotive OS

ตรวจสอบว่าไม่มีกิจกรรมที่เพิ่มประสิทธิภาพเพื่อลดความกระจัดกระจาย

เพื่อให้มั่นใจว่าแอปจะพร้อมใช้งานขณะจอดรถเท่านั้น อย่า รวมองค์ประกอบ <meta-data> ต่อไปนี้ใน เอลิเมนต์ <activity> ภายใน manifest:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

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

รายการไฟล์ Manifest สำหรับหมวดหมู่ที่เฉพาะเจาะจง

นอกเหนือจากข้อกำหนดข้างต้นที่มีผลกับแอปที่หยุดทำงานทั้งหมดแล้ว หมวดหมู่วิดีโอและเกมยังมีข้อกำหนดเพิ่มเติมดังนี้

เพิ่มประสิทธิภาพแอปสำหรับ Android Automotive OS

โปรดทำดังนี้เพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด ระหว่างสร้างแอปสำหรับ Android Automotive OS ด้วย

เพิ่มประสิทธิภาพสำหรับหน้าจอขนาดใหญ่

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

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

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

ทำงานกับส่วนแทรกของหน้าต่างและส่วนตัดของจอแสดงผล

Android Automotive OS มี UI ของระบบเช่นเดียวกับอุปกรณ์รูปแบบอื่นๆ เช่น สถานะและแถบนำทาง และการรองรับโฆษณาที่ไม่ใช่สี่เหลี่ยมผืนผ้า จอแสดงผล

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

แถบระบบ โหมดสมจริง และการแสดงผลแบบเต็มหน้าจอ

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

นอกจากนี้ Android Automotive OS ยังอนุญาตให้ OEM ควบคุมได้ว่าแอปจะแสดงหรือซ่อนแถบระบบเพื่อเข้าและออกจากโหมดสมจริงได้หรือไม่ ตัวอย่างเช่น การป้องกันไม่ให้แอปดำเนินการต่อไปนี้ การซ่อนแถบของระบบจะช่วยให้ OEM สามารถดูแลให้ระบบควบคุมยานพาหนะ เช่น ระบบปรับอากาศ ซึ่งคุณสามารถเข้าถึงได้ตลอดเวลาบนหน้าจอ หาก OEM ป้องกันไม่ให้แอปดำเนินการต่อไปนี้ การควบคุมแถบระบบ ไม่มีอะไรเกิดขึ้นเมื่อแอปเรียก WindowInsetsController (หรือ WindowInsetsControllerCompat) API เพื่อแสดงหรือซ่อนแถบระบบ โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตรวจจับว่าแอปของคุณแก้ไขส่วนแทรกได้หรือไม่ในเอกสารประกอบของ show และ hide

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

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

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

ปรับให้เข้ากับจอแสดงผลที่มีรูปทรงไม่ปกติ

นอกจากจอแสดงผลแบบสี่เหลี่ยมผืนผ้าแล้ว ยานพาหนะบางคันอาจมีรูปทรงไม่ปกติ ตามที่แสดงในรูปที่ 1

แผนภาพของอุปกรณ์ Android Automotive OS ที่มีจอแสดงผลโค้งด้านขวา
รูปที่ 1: อุปกรณ์ Android Automotive OS ที่มีจอแสดงผล ซึ่งมีโค้งอยู่ด้านขวา พื้นที่สีเขียวคือสี่เหลี่ยมผืนผ้าที่ปลอดภัยซึ่งไม่ทับซ้อนกับขอบเขตของส่วนที่ตัดออกของการแสดงผลของเส้นโค้ง

หากแอปไม่แสดงผลแบบไร้ขอบ ก็ไม่ต้องดำเนินการใดๆ เพื่อแสดงผลภายในพื้นที่ปลอดภัย

หากแอปแสดงผลแบบเต็มหน้าจอ คุณจะเลือกลักษณะการทำงานของแอปในส่วนที่แสดงผลได้ คุณสามารถทำได้โดยใช้แหล่งข้อมูล โดยการตั้งค่า android:windowLayoutInDisplayCutoutMode สำหรับธีมของแอปหรือขณะรันไทม์ โดยการปรับเปลี่ยน layoutInDisplayCutoutMode

เนื่องจากประเภทของส่วนที่ถูกตัดออกของจอแสดงผลในอุปกรณ์ Android Automotive OS แตกต่างจากในอุปกรณ์เคลื่อนที่ คุณจึงไม่ควรใช้ LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT หรือ LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES ซึ่งมีลักษณะการทำงานที่เพิ่มประสิทธิภาพให้เหมาะกับส่วนที่ถูกตัดออกในอุปกรณ์เคลื่อนที่ แต่ ใช้ LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER หรือ LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS ให้หลีกเลี่ยงหรือ เข้าสู่ส่วนที่ถูกตัดออกเสมอ เมื่อเลือกรายการหลัง ดูรองรับหน้าจอรอยบากสำหรับข้อมูลเพิ่มเติม รายละเอียดเกี่ยวกับ API ที่เกี่ยวข้องกับหน้าจอรอยบาก

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

ปิดใช้ฟีเจอร์

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

คุณสามารถใช้ PackageManager.hasSystemFeature API เพื่อตรวจหาว่าแอปทำงานบน Android Automotive OS หรือไม่โดยตรวจสอบฟีเจอร์ FEATURE_AUTOMOTIVE ดังที่แสดงในตัวอย่างต่อไปนี้

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

หรือหากแอปของคุณมีคอมโพเนนต์ Android Auto ด้วยเช่นกัน คุณสามารถทำสิ่งต่อไปนี้ ใช้ CarConnection API จาก ไลบรารีแอป Android for Cars เพื่อตรวจหาว่าแอป ที่ทำงานใน Android Automotive OS หรือ Android Auto หรือหากไม่ได้เชื่อมต่อ รถยนต์เลย

สำหรับการแสดงภาพซ้อนภาพ (PIP) โปรดทำตาม แนวทางปฏิบัติที่ดีที่สุด เพื่อตรวจสอบว่า พร้อมใช้งานและตอบสนองอย่างเหมาะสม

จัดการกับสถานการณ์ออฟไลน์

แม้ว่ารถยนต์จะเชื่อมต่ออินเทอร์เน็ตได้มากขึ้นเรื่อยๆ แต่เราขอแนะนำให้แอปสามารถทำงานได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต เช่น ในกรณีต่อไปนี้

  • ผู้ใช้อาจเลือกไม่ใช้อินเทอร์เน็ตมือถือที่เสนอเป็นส่วนหนึ่งของแพ็กเกจการสมัครใช้บริการจากผู้ผลิตรถยนต์
  • การเข้าถึงอินเทอร์เน็ตผ่านมือถืออาจถูกจำกัดในบางพื้นที่
  • รถที่มีวิทยุ Wi-Fi อาจอยู่นอกระยะสัญญาณ Wi-Fi หรือ OEM อาจ ปิด Wi-Fi เพื่อใช้เครือข่ายมือถือแทน

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

ใช้แหล่งข้อมูลอื่น

เพื่อช่วยปรับแอปสำหรับรถยนต์ คุณสามารถใช้ตัวระบุทรัพยากร car เพื่อระบุ แหล่งข้อมูลอื่น เมื่อวิ่งบนยานพาหนะ Android Automotive OS ตัวอย่างเช่น หากคุณใช้ ทรัพยากรมิติข้อมูลที่จะจัดเก็บ คุณอาจใช้ค่าที่มากขึ้นสำหรับชุดทรัพยากร car เพื่อทำให้ เป้าหมายการสัมผัสมีขนาดใหญ่ขึ้น

จัดจำหน่ายแอปของคุณ

หลังจากทดสอบแอปตามหลักเกณฑ์ด้านคุณภาพของแอปรถยนต์สำหรับหมวดหมู่ของแอปและสร้างบิลด์ Android Automotive OS ของแอปโดยทำการเปลี่ยนแปลงที่จำเป็นสำหรับหมวดหมู่ของแอปแล้ว คุณจะเผยแพร่แอปไปยังแทร็กรูปแบบของ Automotive OS ใน Play Store ได้ ดูจัดจำหน่ายแอป Android สำหรับรถยนต์ เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับขั้นตอนการเผยแพร่

แสดงความคิดเห็นเกี่ยวกับแอปที่พักไว้

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

สร้างปัญหาใหม่