अपने टेंप्लेट वाले ऐप्लिकेशन में, Android Automotive OS के लिए सहायता जोड़ें

Android Automotive OS की मदद से लोग, कार में ऐप्लिकेशन इंस्टॉल कर सकते हैं. इस प्लैटफ़ॉर्म के लोगों तक पहुंचने के लिए, आपको ड्राइवर के लिए ऑप्टिमाइज़ किया गया कोई ऐसा ऐप्लिकेशन उपलब्ध कराना होगा जो Android Automotive OS के साथ काम करता हो. Android Auto ऐप्लिकेशन में, करीब सभी कोड और संसाधनों का फिर से इस्तेमाल किया जा सकता है. हालांकि, आपको अलग से एक ऐसा बिल्ड बनाना होगा जो इस पेज पर बताई गई ज़रूरी शर्तों को पूरा करता हो.

Android Automotive OS पर अपनी कार का ऐप्लिकेशन चलाने के लिए, आपको Templates Host का नया वर्शन चाहिए. यह सिस्टम ऐप्लिकेशन के तौर पर उपलब्ध होता है.

डेवलपमेंट की खास जानकारी

Android Automotive OS के लिए सहायता जोड़ने के लिए, सिर्फ़ कुछ चरणों को पूरा करना होता है. इनके बारे में इस पेज के इन सेक्शन में बताया गया है:

  1. ऑटोमोटिव मॉड्यूल बनाना
  2. Android Automotive OS के लिए सहायता का एलान करना
  3. अपने CarAppService और CarAppActivity का एलान करना
  4. Gradle डिपेंडेंसी अपडेट करना

पक्का करें कि Automotive OS की सभी सुविधाएं चालू हों. इसके लिए, Android Studio Bumblebee या इसके बाद के वर्शन का इस्तेमाल करें .

ऑटोमोटिव मॉड्यूल बनाना

Android Automotive OS के कुछ कॉम्पोनेंट, जैसे कि मेनिफ़ेस्ट के लिए, प्लैटफ़ॉर्म के हिसाब से अलग-अलग ज़रूरी शर्तें होती हैं. एक ऐसा मॉड्यूल बनाएं जो इन कॉम्पोनेंट के कोड को आपके प्रोजेक्ट के अन्य कोड से अलग रख सके. जैसे, आपके फ़ोन ऐप्लिकेशन के लिए इस्तेमाल किया गया कोड.

किसी मौजूदा प्रोजेक्ट में ऑटोमोटिव मॉड्यूल जोड़ने के लिए, यह तरीका अपनाएं:

  1. Android Studio में, फ़ाइल > नया > नया मॉड्यूल पर क्लिक करें.
  2. ऑटोमोटिव मॉड्यूल को चुनें. इसके बाद, आगे बढ़ें पर क्लिक करें.
  3. ऐप्लिकेशन/लाइब्रेरी का नाम डालें. Android Automotive OS पर, उपयोगकर्ताओं को आपके ऐप्लिकेशन के लिए यह नाम दिखता है.
  4. मॉड्यूल का नाम डालें.
  5. मौजूदा ऐप्लिकेशन से मेल खाने के लिए, पैकेज का नाम में बदलाव करें.
  6. **कम से कम एसडीके** के लिए, एपीआई 29: Android 10 (Q) को चुनें. इसके बाद, आगे बढ़ें पर क्लिक करें. Android Automotive OS पर, Car App Library के साथ काम करने वाली सभी कारें, Android 10 एपीआई लेवल 29 या इसके बाद के वर्शन पर चलती हैं. इसलिए, यह वैल्यू चुनने पर, सभी काम करने वाली कारों को टारगेट किया जाता है.

  7. **कोई गतिविधि न जोड़ें** को चुनें. इसके बाद, **पूरा करें** पर क्लिक करें.

अगर कोई नया प्रोजेक्ट शुरू किया जा रहा है, तो:

  1. Android Studio में, फ़ाइल > नया > नया प्रोजेक्ट पर क्लिक करें.
  2. प्रोजेक्ट का टाइप के लिए, ऑटोमोटिव को चुनें.
  3. **कोई गतिविधि नहीं** को चुनें. इसके बाद, **आगे बढ़ें** पर क्लिक करें.
  4. अपने प्रोजेक्ट के लिए नाम डालें. Android Automotive OS पर, उपयोगकर्ताओं को आपके ऐप्लिकेशन के लिए यह नाम दिखता है.
  5. पैकेज का नाम डालें. पैकेज का नाम चुनने के बारे में ज़्यादा जानकारी के लिए, पैकेज के नाम सेक्शन देखें.
  6. **कम से कम एसडीके** के लिए, एपीआई 29: Android 10 (Q) को चुनें. इसके बाद, आगे बढ़ें पर क्लिक करें.

    Android Automotive OS पर, Car App Library के साथ काम करने वाली सभी कारें, 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 के साथ काम करता है. ध्यान दें कि मेनिफ़ेस्ट में कोई गतिविधि एलान नहीं की गई है.

सुविधा से जुड़ी ज़रूरी शर्तों का एलान करना

इसके बाद, अपने मेनिफ़ेस्ट में यह uses-feature एलिमेंट जोड़ें, ताकि यह बताया जा सके कि ऐप्लिकेशन को ठीक से काम करने के लिए, टेंप्लेट होस्ट की ज़रूरत है:

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

इसके अलावा, पक्का करें कि आपका ऐप्लिकेशन, Google Play की उन ज़रूरी शर्तों को पूरा करता हो जो Android Automotive OS के लिए बनाए गए सभी ऐप्लिकेशन पर लागू होती हैं.

Gradle डिपेंडेंसी अपडेट करना

अपने ऑटोमोटिव मॉड्यूल में, आपको androidx.car.app:app-automotive आर्टफ़ैक्ट, पर डिपेंडेंसी जोड़नी होगी. इसमें CarAppActivity का वह लागू करने का तरीका शामिल होता है जिसकी मदद से आपका ऐप्लिकेशन, Android Automotive OS पर चल सकता है.

अगर आपका ऐप्लिकेशन, Android Auto और Android Automotive OS, दोनों के साथ काम करता है, तो हमारा सुझाव है कि आप अपने CarAppService को किसी अलग मॉड्यूल में रखें. इसे अपने मोबाइल और ऑटोमोटिव मॉड्यूल के बीच शेयर किया जा सकता है. अगर इस तरीके का इस्तेमाल किया जा रहा है, तो आपको अपने ऑटोमोटिव मॉड्यूल को अपडेट करना होगा, ताकि इसमें 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 के लिए सहायता का एलान करना

यह एलान करने के लिए कि आपका ऐप्लिकेशन, Android Automotive OS के साथ काम करता है, मेनिफ़ेस्ट में यह एंट्री जोड़ें:

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

मेनिफ़ेस्ट की इस एंट्री में, एक XML फ़ाइल का रेफ़रंस दिया गया है. इस फ़ाइल में, उन ऑटोमोटिव सुविधाओं के बारे में बताया गया है जो आपके ऐप्लिकेशन के साथ काम करती हैं.

यह बताने के लिए कि आपके पास Car App Library का कोई ऐप्लिकेशन है, अपने Android Automotive OS मॉड्यूल की res/xml/ डायरेक्ट्री में automotive_app_desc.xml नाम की एक XML फ़ाइल जोड़ें. इस फ़ाइल में यह कॉन्टेंट शामिल होना चाहिए:

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

अपने CarAppService और CarAppActivity का एलान करना

Android Auto की तरह, Android Automotive OS भी आपके CarAppService ऐप्लिकेशन को चलाने के लिए, CarAppServiceके लागू करने के तरीके का इस्तेमाल करता है. अपना CarAppService और सेशन बनाना और अपने CarAppService का एलान करना देखें.

Android Auto के उलट, आपको एक और ऐप्लिकेशन कॉम्पोनेंट, CarAppActivity शामिल करना होगा. यह आपके Android Automotive OS ऐप्लिकेशन के लिए एंट्री पॉइंट के तौर पर काम करता है. इस गतिविधि को लागू करने का तरीका, androidx.car.app:app-automotive आर्टफ़ैक्ट में शामिल है. यह आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को रेंडर करने के लिए, टेंप्लेट होस्ट ऐप्लिकेशन के साथ कम्यूनिकेट करता है. आपके मेनिफ़ेस्ट में इस गतिविधि का सिर्फ़ एक इंस्टेंस होना चाहिए. इसे इस तरह एलान किया जाना चाहिए:

<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 को app-automotive आर्टफ़ैक्ट से, CarAppActivity क्लास के पूरी तरह क्वालिफ़ाइड क्लास के नाम पर सेट किया जाता है.
  • android:exported को true पर सेट किया जाता है, क्योंकि गतिविधि को किसी ऐसे ऐप्लिकेशन से लॉन्च किया जाना चाहिए जो खुद न हो. जैसे, लॉन्चर.
  • android:launchMode को singleTask पर सेट किया जाता है, ताकि उपयोगकर्ता नेविगेट करने पर, लॉन्चर से गतिविधि के उसी इंस्टेंस पर वापस जा सके.
  • android:theme को @android:style/Theme.DeviceDefault.NoActionBar पर सेट किया जाता है, ताकि ऐप्लिकेशन, उसके लिए उपलब्ध पूरी स्क्रीन का इस्तेमाल कर सके.
  • इंटेंट फ़िल्टर से पता चलता है कि यह ऐप्लिकेशन के लिए लॉन्चर गतिविधि है.
  • एक <meta-data> एलिमेंट होता है, जिससे ओएस को यह पता चलता है कि यूज़र एक्सपीरियंस (यूएक्स) से जुड़ी पाबंदियां लागू होने पर भी, ऐप्लिकेशन का इस्तेमाल किया जा सकता है. जैसे, जब वाहन चल रहा हो.

नेविगेशन ऐप्लिकेशन के लिए, मेनिफ़ेस्ट में कुछ और एंट्री ज़रूरी हैं. इनके बारे में यहां बताया गया है:CarAppActivity

<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>
  • The additional android.intent.category.APP_MAPS कैटगरी से सिस्टम को यह पता चलता है कि आपका ऐप्लिकेशन, उपयोगकर्ता की जगह की जानकारी दिखा सकता है.
  • androidx.car.app.action.NAVIGATE इंटेंट फ़िल्टर से यह पक्का होता है कि उपयोगकर्ताओं के पास, किसी अन्य कार ऐप्लिकेशन से मिले, नेविगेशन के लिए किसी इंटेंट को हैंडल करते समय, आपके ऐप्लिकेशन का इस्तेमाल करने का विकल्प हो.

Android Automotive OS डिवाइसों पर, टेंप्लेट वाले ऐप्लिकेशन के अनुभव को बेहतर बनाने के लिए, आप अपने CarAppActivity में डीप लिंक की सुविधा जोड़ सकते हैं. उदाहरण के लिए, इससे उपयोगकर्ता, Quick Share का इस्तेमाल करके फ़ोन से शेयर किए गए यूआरएल को पाने पर या किसी ब्राउज़र से सीधे आपका ऐप्लिकेशन खोल सकते हैं.

डीप लिंक के लिए इंटेंट फ़िल्टर जोड़ना

ओएस को यह बताने के लिए कि आपका ऐप्लिकेशन, डीप लिंक को हैंडल कर सकता है, आपको अपने ऐप्लिकेशन के CarAppActivity के लिए <activity> एलिमेंट में सही इंटेंट फ़िल्टर जोड़ने होंगे. ज़्यादा जानकारी के लिए, आने वाले लिंक के लिए इंटेंट फ़िल्टर जोड़ना देखें. ज़्यादा जानकारी के लिए, निर्देश देखें.

हमारा सुझाव है कि आप अपने कार ऐप्लिकेशन में, मोबाइल ऐप्लिकेशन के उन सभी डीप लिंक की सुविधा उपलब्ध कराएं जिन्हें कार ऐप्लिकेशन में इस्तेमाल किया जा सकता है, ताकि उपयोगकर्ताओं को बेहतर अनुभव मिल सके.

इंटेंट हैंडल करने के लिए, आपके ऐप्लिकेशन को आने वाले इंटेंट से डेटा पढ़ना चाहिए ऐसा तब भी होना चाहिए, जब आपके कार ऐप्लिकेशन का Session बनाया जा रहा हो onCreateScreen(). साथ ही, तब भी होना चाहिए, जब उसे onNewIntent() के दौरान कोई नया इंटेंट मिलता है:

class MySession : Session() {
    // ...
    override fun onCreateScreen(intent: Intent): Screen {
        // Handle the intent when the app is being started for the first time
        return MyStartScreen(carContext)
    }

    override fun onNewIntent(intent: Intent) {
        // Handle the intent when the app is already running
    }
}

ध्यान में रखने लायक अन्य बातें

Android Automotive OS ऐप्लिकेशन डेवलप करते समय, इन अन्य बातों का ध्यान रखें:

पैकेज के नाम

Android Automotive OS के लिए, Android Package Kit (APK) अलग से डिस्ट्रिब्यूट किया जाता है. इसलिए, अपने मोबाइल ऐप्लिकेशन के पैकेज के नाम का फिर से इस्तेमाल किया जा सकता है या नया पैकेज नाम बनाया जा सकता है. अगर किसी अलग पैकेज नाम का इस्तेमाल किया जाता है, तो आपके ऐप्लिकेशन की Play Store पर दो अलग-अलग लिस्टिंग होती हैं. अगर मौजूदा पैकेज के नाम का फिर से इस्तेमाल किया जाता है, तो आपके ऐप्लिकेशन की दोनों प्लैटफ़ॉर्म पर एक ही लिस्टिंग होती है.

यह मुख्य तौर पर, कारोबार से जुड़ा फ़ैसला होता है. उदाहरण के लिए, अगर मोबाइल ऐप्लिकेशन पर काम करने वाली टीम अलग है और Android Automotive OS ऐप्लिकेशन पर काम करने वाली टीम अलग है, तो पैकेज के अलग-अलग नाम रखना और हर टीम को अपनी Play Store लिस्टिंग मैनेज करने देना सही हो सकता है. दोनों तरीकों का इस्तेमाल करने के लिए, तकनीकी तौर पर ज़्यादा मेहनत करने की ज़रूरत नहीं होती.

यहां दी गई टेबल में, मौजूदा पैकेज के नाम को बनाए रखने या नया पैकेज नाम इस्तेमाल करने के बीच के कुछ अन्य मुख्य अंतरों के बारे में बताया गया है:

सुविधा एक ही पैकेज का नाम नया पैकेज का नाम
स्टोर पेज एक कई
मिरर वाला इंस्टॉल हां: सेटअप विज़र्ड के दौरान, ऐप्लिकेशन को तेज़ी से फिर से इंस्टॉल किया जा सकता है नहीं
Play Store पर समीक्षा की प्रोसेस समीक्षाओं को ब्लॉक करना: अगर किसी एक APK के लिए समीक्षा में गड़बड़ी पाई जाती है, तो उसी रिलीज़ में सबमिट किए गए अन्य APK को ब्लॉक कर दिया जाता है अलग-अलग समीक्षाएं
आंकड़े, मेट्रिक, और ज़रूरी जानकारी एक साथ: ऑटोमोटिव से जुड़े डेटा के लिए, डिवाइस के नाम के हिसाब से फ़िल्टर किया जा सकता है. अलग-अलग
इंडेक्सिंग और खोज नतीजों में रैंकिंग मौजूदा रैंकिंग के आधार पर कोई कैरीओवर नहीं
अन्य ऐप्लिकेशन के साथ इंटिग्रेट करना ज़्यादातर मामलों में, बदलाव करने की ज़रूरत नहीं होती. हालांकि, इसके लिए यह ज़रूरी है कि दोनों APK के बीच मीडिया कोड शेयर किया गया हो संबंधित ऐप्लिकेशन को अपडेट करना पड़ सकता है. जैसे, Google Assistant की मदद से यूआरआई प्लेबैक के लिए

ऑफ़लाइन सामग्री

अगर लागू हो, तो अपने ऐप्लिकेशन में ऑफ़लाइन सुविधा उपलब्ध कराएं. Android Automotive OS वाली कारों में, डेटा कनेक्टिविटी की सुविधा मौजूद होती है. इसका मतलब है कि वाहन की कीमत में डेटा प्लान शामिल होता है या उपयोगकर्ता इसके लिए अलग से पेमेंट करता है. हालांकि, कारों में मोबाइल डिवाइसों के मुकाबले, कनेक्टिविटी की ज़्यादा सुविधाएं उपलब्ध होती हैं.

ऑफ़लाइन सुविधा उपलब्ध कराने की रणनीति तय करते समय, इन बातों का ध्यान रखें:

  • कॉन्टेंट डाउनलोड करने का सबसे सही समय वह होता है, जब आपका ऐप्लिकेशन इस्तेमाल किया जा रहा हो.
  • यह न मान लें कि वाई-फ़ाई उपलब्ध है. ऐसा हो सकता है कि कोई कार, वाई-फ़ाई की रेंज में कभी न आए या ओरिजनल इक्विपमेंट मैन्युफ़ैक्चरर (ओईएम) ने मोबाइल नेटवर्क के लिए, वाई-फ़ाई की सुविधा बंद कर दी हो.
  • उपयोगकर्ताओं के इस्तेमाल करने की संभावना वाले कॉन्टेंट को स्मार्ट तरीके से कैश किया जा सकता है. हालांकि, हमारा सुझाव है कि आप उपयोगकर्ता को इस व्यवहार में बदलाव करने की अनुमति दें.
  • कारों में डिस्क स्पेस अलग-अलग होता है. इसलिए, उपयोगकर्ताओं को ऑफ़लाइन कॉन्टेंट मिटाने का विकल्प दें.

अक्सर पूछे जाने वाले सवाल

Android Automotive OS के बारे में अक्सर पूछे जाने वाले कुछ सवालों के जवाब पाने के लिए, ये सेक्शन देखें.

तीसरे पक्ष के एसडीके और लाइब्रेरी का इस्तेमाल करने के लिए, क्या कोई पाबंदियां या सुझाव हैं?

तीसरे पक्ष के एसडीके और लाइब्रेरी का इस्तेमाल करने के लिए, कोई खास दिशा-निर्देश नहीं हैं. अगर तीसरे पक्ष के एसडीके और लाइब्रेरी का इस्तेमाल किया जाता है, तब भी आपको कार ऐप्लिकेशन की क्वालिटी से जुड़ी सभी ज़रूरी शर्तों का पालन करना होगा.

Google Play Console का इस्तेमाल करके, Android Automotive OS ऐप्लिकेशन कैसे पब्लिश किया जा सकता है?

Google Play Console का इस्तेमाल करके, Android Automotive OS ऐप्लिकेशन पब्लिश करने के तरीके के बारे में जानने के लिए, कार में उपलब्ध कराना देखें.

समस्या का हल

Android Automotive OS पर, समस्या हल करने के कुछ सामान्य तरीकों के बारे में जानने के लिए, यह लेख पढ़ें.

  • सिस्टम सेटिंग से, Car App Library का कोई ऐप्लिकेशन अनइंस्टॉल करने के बाद भी, नया वर्शन इंस्टॉल करने पर मुझे गड़बड़ी मिलती है.

    यह पक्का करने के लिए कि ऐप्लिकेशन अनइंस्टॉल हो गया है, कमांड का इस्तेमाल करें adb uninstall app.package.name.