เพิ่มการรองรับ Android Automotive OS ในแอปที่มีเทมเพลต

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

หากต้องการเรียกใช้แอปสำหรับรถใน Android Automotive OS คุณต้องมีเวอร์ชันล่าสุด โฮสต์เทมเพลต ซึ่งเป็นแอประบบ

ภาพรวมการพัฒนา

การเพิ่มการรองรับ Android Automotive OS นั้นทำได้ง่ายๆ ในไม่กี่ขั้นตอน เช่น ซึ่งอธิบายไว้ในส่วนต่างๆ ในหน้านี้

  1. สร้างโมดูลยานยนต์
  2. ประกาศการรองรับ Android Automotive OS
  3. ประกาศ CarAppService และ CarAppActivity
  4. อัปเดตทรัพยากร Dependency ของ Gradle

ใช้ Android Studio Bumblebee หรือใหม่กว่าเพื่อ เปิดใช้ฟีเจอร์ทั้งหมดของ Automotive OS แล้ว

สร้างโมดูลยานยนต์

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

สําหรับโปรเจ็กต์ที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่มโมดูลยานยนต์ลงใน โปรเจ็กต์:

  1. ใน Android Studio ให้คลิกไฟล์ > ใหม่ > โมดูลใหม่
  2. เลือก Automotive Module แล้วคลิก Next
  3. ระบุชื่อแอปพลิเคชัน/ไลบรารี นี่คือชื่อที่ผู้ใช้จะเห็น แอปของคุณใน Android Automotive OS
  4. ป้อนชื่อโมดูล
  5. แก้ไขชื่อแพ็กเกจให้ตรงกับแอปที่มีอยู่
  6. เลือก API 29: Android 10 (Q) สำหรับ SDK ขั้นต่ำ แล้วคลิก ถัดไป รถทุกคันที่รองรับไลบรารีแอปรถยนต์ใน Android Automotive OS จะทํางานได้ API ของ Android 10 ระดับ 29 ขึ้นไป ดังนั้นการเลือกค่านี้จึงกำหนดเป้าหมายทั้งหมด ที่เข้ากันได้

  7. เลือกเพิ่มไม่มีกิจกรรม แล้วคลิกเสร็จสิ้น

หากคุณเริ่มโปรเจ็กต์ใหม่ ให้ทำดังนี้

  1. ใน Android Studio ให้คลิกไฟล์ > ใหม่ > โปรเจ็กต์ใหม่
  2. เลือกยานยนต์สําหรับประเภทโปรเจ็กต์
  3. เลือกไม่มีกิจกรรม แล้วคลิกถัดไป
  4. ระบุชื่อโปรเจ็กต์ นี่คือชื่อที่ผู้ใช้เห็นสำหรับ แอปใน Android Automotive OS
  5. ป้อนชื่อแพ็กเกจ ดูส่วนชื่อแพ็กเกจ เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับการเลือกชื่อแพ็กเกจ
  6. เลือก API 29: Android 10 (Q) สำหรับ SDK ขั้นต่ำ แล้วคลิก ถัดไป

    รถทุกคันที่รองรับไลบรารีแอปรถยนต์ใน Android Automotive OS จะทํางานได้ API ของ Android 10 ระดับ 29 ขึ้นไป ดังนั้นการเลือกค่านี้จึงกำหนดเป้าหมายทั้งหมด ที่เข้ากันได้

หลังจากสร้างโมดูลใน Android Studio แล้ว ให้เปิด AndroidManifest.xml ในโมดูลยานยนต์ใหม่

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

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

</manifest>

องค์ประกอบ application มีบางส่วน ข้อมูลแอปมาตรฐานและ uses-feature ที่ประกาศการรองรับ Android Automotive OS โปรดทราบว่ามี ไม่ใช่กิจกรรมที่ประกาศในไฟล์ Manifest

จากนั้นเพิ่มองค์ประกอบ uses-feature ต่อไปนี้ลงในไฟล์ Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

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

    <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" />
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

</manifest>

องค์ประกอบ uses-feature รายการแรกประกาศว่าแอปของคุณใช้โฮสต์เทมเพลต ที่จะเรียกใช้ กำลังตั้งค่าองค์ประกอบ uses-feature ที่เหลือ 4 รายการอย่างชัดแจ้งเป็น required="false" ทำให้แอปของคุณไม่ขัดแย้งกับฟีเจอร์ของฮาร์ดแวร์ที่ใช้ได้ ในอุปกรณ์ Android Automotive OS

อัปเดตทรัพยากร Dependency ของ Gradle

ภายในโมดูลยานยนต์ คุณต้องเพิ่มการอ้างอิง อาร์ติแฟกต์ androidx.car.app:app-automotive รายการ ซึ่งรวมถึงการติดตั้งใช้งาน CarAppActivity ที่จําเป็นสําหรับแอปของคุณในการทำงาน ใน Android Automotive OS

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

ดึงดูด

buildscript {
    ...
    dependencies {
        ...
        implementation "androidx.car.app:app-automotive:car_app_library_version"
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation("androidx.car.app:app-automotive:car_app_library_version")
        implementation(project(":shared_module_name"))
    }
}

ประกาศการรองรับ Android Automotive OS

ใช้รายการไฟล์ Manifest ต่อไปนี้เพื่อประกาศว่าแอปของคุณรองรับ Android Automotive OS:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

รายการไฟล์ Manifest นี้อ้างถึงไฟล์ XML ที่ประกาศ Automotive ที่แอปของคุณรองรับ

หากต้องการระบุว่าคุณมีแอป Car App Library เพิ่มไฟล์ XML ชื่อ automotive_app_desc.xml ในไดเรกทอรี res/xml/ ใน โมดูล Android Automotive OS ของคุณ ไฟล์นี้ควรมีเนื้อหาต่อไปนี้

<automotiveApp>
    <uses name="template"/>
</automotiveApp>

ประกาศ CarAppService และ CarAppActivity

Android Automotive OS จะใช้ CarAppService เช่นเดียวกับ Android Auto ในการใช้งานแอปของคุณ โปรดดู สร้าง CarAppService และเซสชัน และประกาศ CarAppService ของคุณสําหรับ วิธีการติดตั้งใช้งานและการประกาศCarAppService

สิ่งที่ต่างจาก Android Auto คือคุณต้องใส่คอมโพเนนต์ของแอปพลิเคชันเพิ่มเติม CarAppActivity เพื่อทำหน้าที่เป็นจุดแรกเข้าของ Android Automotive OS แอป การดำเนินกิจกรรมนี้รวมอยู่ใน อาร์ติแฟกต์ androidx.car.app:app-automotive และมีหน้าที่สื่อสาร กับแอปพลิเคชันโฮสต์เทมเพลตเพื่อแสดง UI ของแอป คุณควรมีเพียง กิจกรรมนี้เพียงครั้งเดียวในไฟล์ Manifest ของคุณ และต้องมีการระบุว่าเป็น ดังต่อไปนี้:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

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

</activity>
  • android:name ได้รับการตั้งค่าเป็นชื่อคลาสที่มีคุณสมบัติครบถ้วนของ CarAppActivity จากอาร์ติแฟกต์ app-automotive
  • มีการตั้งค่า android:exported เป็น true เนื่องจากต้องเปิดกิจกรรมได้โดย นอกเหนือจากตัวแอปเอง (เช่น Launcher)
  • มีการตั้งค่า android:launchMode เป็น singleTask เพื่อให้ผู้ใช้กลับมาที่เดิมได้ ของกิจกรรมจากตัวเรียกใช้งานหากออกจากตัวเรียกใช้งาน
  • android:theme ได้รับการตั้งค่าเป็น @android:style/Theme.DeviceDefault.NoActionBar ว่าแอปใช้พื้นที่เต็มหน้าจอที่มี
  • ตัวกรอง Intent ระบุว่านี่คือกิจกรรม Launcher ของแอป
  • มีองค์ประกอบ <meta-data> ที่ระบุไปยังระบบปฏิบัติการว่าแอปสามารถ ใช้ขณะที่มีข้อจำกัดด้าน UX เช่น เมื่อยานพาหนะอยู่ใน ภาพเคลื่อนไหว

สำหรับแอปการนำทาง ยังมีแอปอื่นๆ อีก รายการไฟล์ Manifest ที่จำเป็นสำหรับ CarAppActivity ดังต่อไปนี้ snippet:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!-- Include the category below ONLY for navigation apps -->
        <category android:name="android.intent.category.APP_MAPS" />
    </intent-filter>

    <!-- Include the intent-filter below ONLY for navigation apps -->
    <intent-filter>
        <action android:name="androidx.car.app.action.NAVIGATE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="geo" />
    </intent-filter>

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

</activity>
  • android.intent.category.APP_MAPS เพิ่มเติม หมวดหมู่จะบอกให้ระบบทราบว่าแอปของคุณสามารถแสดงตําแหน่งของผู้ใช้ได้
  • ตัวกรอง Intent androidx.car.app.action.NAVIGATE จะช่วยให้ผู้ใช้ ตัวเลือกในการใช้แอปเมื่อจัดการ Intent แบบไม่เจาะจงปลายทางจาก แอปรถยนต์อีกแอปหนึ่ง

ปัจจัยอื่นๆ ที่ควรพิจารณา

โปรดคำนึงถึงข้อควรพิจารณาอื่นๆ เหล่านี้เมื่อพัฒนา Android Automotive แอประบบปฏิบัติการ:

ชื่อแพ็กเกจ

เนื่องจากคุณเผยแพร่ Android Package Kit (APK) แยกต่างหากสำหรับ Android Automotive OS คุณจึงทำสิ่งต่อไปนี้ได้ ใช้ชื่อแพ็กเกจจากแอปบนอุปกรณ์เคลื่อนที่ของคุณซ้ำหรือสร้างแพ็กเกจใหม่ ชื่อ หากคุณใช้ชื่อแพ็กเกจอื่น แอปของคุณจะมี Play Store 2 ชื่อแยกกัน ทั้งหมด หากคุณใช้ชื่อแพ็กเกจปัจจุบันซ้ำ แอปของคุณจะมี เพียงแห่งเดียวสำหรับทั้ง 2 แพลตฟอร์ม

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

ตารางต่อไปนี้จะสรุปความแตกต่างที่สำคัญอื่นๆ ระหว่างการเก็บแพ็กเกจปัจจุบันไว้ หรือใช้ชื่อแพ็กเกจใหม่:

ฟีเจอร์ ชื่อแพ็กเกจเดียวกัน ชื่อแพ็กเกจใหม่
ข้อมูลผลิตภัณฑ์ใน Store ซิงเกิล หลายรายการ
ติดตั้งแบบมิเรอร์ ใช่: ติดตั้งแอปอีกครั้งอย่างรวดเร็วโดยใช้วิซาร์ดการตั้งค่า ไม่
กระบวนการตรวจสอบของ Play Store การบล็อกการตรวจสอบ: หากการตรวจสอบล้มเหลวสำหรับ APK หนึ่ง APK อื่นๆ ที่ส่งมาในรุ่นเดียวกันถูกบล็อก รีวิวแต่ละรายการ
สถิติ เมตริก และวิตามิน แบบรวม: คุณกรองตามชื่ออุปกรณ์สําหรับยานยนต์ที่เฉพาะเจาะจงได้ แยก
การจัดทำดัชนีและการจัดอันดับการค้นหา ต่อยอดจากสถานะปัจจุบัน ไม่มีการโอน
การผสานรวมกับแอปอื่นๆ ส่วนใหญ่แล้วไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ เพราะมีการแชร์โค้ดสื่อระหว่าง APK ทั้ง 2 รายการ อาจต้องอัปเดตแอปที่เกี่ยวข้อง เช่น สำหรับการเล่น URI ด้วย Google Assistant

เนื้อหาออฟไลน์

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

โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อพิจารณาการสนับสนุนแบบออฟไลน์ กลยุทธ์:

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

คำถามที่พบบ่อย

โปรดดูส่วนต่อไปนี้สำหรับคำตอบสำหรับคำถามที่พบบ่อยเกี่ยวกับ Android Automotive OS

มีข้อจำกัดหรือคำแนะนำในการใช้ SDK และไลบรารีของบุคคลที่สามไหม

ไม่มีหลักเกณฑ์ที่เฉพาะเจาะจงเกี่ยวกับการใช้ SDK และไลบรารีของบุคคลที่สาม หากเลือกใช้ SDK และไลบรารีของบุคคลที่สาม คุณยังคงมีหน้าที่ ในการปฏิบัติตามข้อกำหนดด้านคุณภาพของแอปรถยนต์ทั้งหมด

ฉันจะเผยแพร่แอป Android Automotive OS โดยใช้ Google Play Console ได้อย่างไร

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

  1. เปิด Play Console
  2. เลือกแอป
  3. จากเมนูด้านซ้าย ให้เลือกรุ่น > ตั้งค่า > การตั้งค่าขั้นสูง > แบบฟอร์ม ปัจจัย
  4. เลือกเพิ่มรูปแบบของอุปกรณ์ > Android Automotive OS จากนั้นทำตาม วิธีการใน Play Console

การแก้ปัญหา

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

  • แม้หลังจากถอนการติดตั้งแอป Car App Library จากการตั้งค่าระบบแล้ว ฉันได้รับข้อผิดพลาดเมื่อพยายามติดตั้งเวอร์ชันใหม่

    เพื่อให้แน่ใจว่าถอนการติดตั้งแอปพลิเคชันแล้ว ให้ใช้คำสั่ง adb uninstall app.package.name