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

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

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

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

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

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

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

वाहन संबंधित मॉड्यूल बनाना

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

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

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

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

नया प्रोजेक्ट शुरू करने के लिए:

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

    Android Automotive OS पर कार ऐप्लिकेशन लाइब्रेरी की सुविधा इस्तेमाल करने वाली सभी कारें, 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 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 एलिमेंट को required="false" पर सेट करने से यह पक्का होता है कि आपका ऐप्लिकेशन, Android Automotive OS डिवाइसों में उपलब्ध हार्डवेयर सुविधाओं के साथ काम करता है.

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

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

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

Groovy

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>

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

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

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

अपनी CarAppService और CarAppActivity की जानकारी दें

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

Android Auto के उलट, आपको अपने Android Automotive OS ऐप्लिकेशन के एंट्री पॉइंट के तौर पर काम करने के लिए, एक और ऐप्लिकेशन कॉम्पोनेंट, CarAppActivity शामिल करना होगा. इस गतिविधि को लागू करने की जानकारी, 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>
  • अतिरिक्त android.intent.category.APP_MAPS कैटगरी से सिस्टम को पता चलता है कि आपका ऐप्लिकेशन, उपयोगकर्ता की जगह की जानकारी दिखा सकता है.
  • androidx.car.app.action.NAVIGATE इंटेंट फ़िल्टर यह पक्का करता है कि जब उपयोगकर्ता किसी दूसरे कार ऐप्लिकेशन से नेविगेशन के लिए इंटेंट का इस्तेमाल कर रहे हों, तब उनके पास आपके ऐप्लिकेशन का इस्तेमाल करने का विकल्प हो.

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

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

पैकेज के नाम

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

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

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

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

ऑफ़लाइन कॉन्टेंट

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

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

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

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

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

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

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

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

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

समस्या का हल

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

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

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