আপনার টেম্পলেটেড অ্যাপে Android Automotive OS-এর জন্য সমর্থন যোগ করুন

Android Automotive OS ব্যবহারকারীদের গাড়িতে অ্যাপ ইনস্টল করতে দেয়। এই প্ল্যাটফর্মে ব্যবহারকারীদের কাছে পৌঁছানোর জন্য, আপনাকে একটি ড্রাইভার-অপ্টিমাইজ করা অ্যাপ বিতরণ করতে হবে যা Android Automotive OS-এর সাথে সামঞ্জস্যপূর্ণ। আপনি আপনার অ্যান্ড্রয়েড অটো অ্যাপের প্রায় সমস্ত কোড এবং সংস্থানগুলি পুনরায় ব্যবহার করতে পারেন, তবে আপনাকে অবশ্যই একটি পৃথক বিল্ড তৈরি করতে হবে যা এই পৃষ্ঠায় বর্ণিত প্রয়োজনীয়তাগুলি পূরণ করে৷

Android Automotive OS-এ আপনার গাড়ির অ্যাপ চালানোর জন্য, আপনার লেটেস্ট টেমপ্লেট হোস্টের প্রয়োজন, যা একটি সিস্টেম অ্যাপ হিসেবে আসে।

উন্নয়ন ওভারভিউ

অ্যান্ড্রয়েড অটোমোটিভ ওএস সমর্থন যোগ করার জন্য শুধুমাত্র কয়েকটি পদক্ষেপের প্রয়োজন, যেমন এই পৃষ্ঠার বিভাগগুলিতে বর্ণনা করা হয়েছে:

  1. একটি স্বয়ংচালিত মডিউল তৈরি করুন
  2. Android Automotive OS এর জন্য সমর্থন ঘোষণা করুন
  3. আপনার CarAppService এবং CarAppActivity ঘোষণা করুন
  4. আপনার Gradle নির্ভরতা আপডেট করুন

সমস্ত স্বয়ংচালিত OS বৈশিষ্ট্যগুলি সক্ষম করা হয়েছে তা নিশ্চিত করতে Android Studio Bumblebee বা নতুন ব্যবহার করুন৷

একটি স্বয়ংচালিত মডিউল তৈরি করুন

অ্যান্ড্রয়েড অটোমোটিভ ওএসের কিছু উপাদান, যেমন ম্যানিফেস্ট, প্ল্যাটফর্ম-নির্দিষ্ট প্রয়োজনীয়তা রয়েছে। একটি মডিউল তৈরি করুন যা এই উপাদানগুলির কোডকে আপনার প্রকল্পের অন্যান্য কোড থেকে আলাদা রাখতে পারে, যেমন আপনার ফোন অ্যাপের জন্য ব্যবহৃত কোড।

একটি বিদ্যমান প্রকল্পের জন্য, আপনার প্রকল্পে একটি স্বয়ংচালিত মডিউল যোগ করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড স্টুডিওতে, ফাইল > নতুন > নতুন মডিউল ক্লিক করুন।
  2. অটোমোটিভ মডিউল নির্বাচন করুন, তারপর পরবর্তী ক্লিক করুন।
  3. একটি অ্যাপ্লিকেশন/লাইব্রেরির নাম প্রদান করুন। এই নামটি ব্যবহারকারীরা Android Automotive OS-এ আপনার অ্যাপের জন্য দেখতে পান।
  4. একটি মডিউল নাম লিখুন।
  5. আপনার বিদ্যমান অ্যাপের সাথে মিল রাখতে প্যাকেজের নাম সম্পাদনা করুন।
  6. API 29 নির্বাচন করুন: ন্যূনতম SDK- এর জন্য Android 10 (Q), তারপর Next এ ক্লিক করুন। Android Automotive OS-এ কার অ্যাপ লাইব্রেরি সমর্থন করে এমন সমস্ত গাড়ি Android 10 API লেভেল 29 বা তার উপরে চলে, তাই এই মান নির্বাচন করা সমস্ত সামঞ্জস্যপূর্ণ গাড়িকে লক্ষ্য করে।

  7. কোন কার্যকলাপ যোগ করুন নির্বাচন করুন, তারপর সমাপ্ত ক্লিক করুন।

আপনি যদি একটি নতুন প্রকল্প শুরু করেন:

  1. অ্যান্ড্রয়েড স্টুডিওতে, ফাইল > নতুন > নতুন প্রকল্পে ক্লিক করুন।
  2. প্রকল্পের প্রকারের জন্য স্বয়ংচালিত নির্বাচন করুন।
  3. কোন কার্যকলাপ নির্বাচন করুন, তারপর পরবর্তী ক্লিক করুন।
  4. আপনার প্রকল্পের জন্য একটি নাম প্রদান করুন. এই নামটি ব্যবহারকারীরা Android Automotive OS-এ আপনার অ্যাপের জন্য দেখতে পান।
  5. একটি প্যাকেজের নাম লিখুন। একটি প্যাকেজ নাম নির্বাচন সম্পর্কে আরো বিস্তারিত জানার জন্য প্যাকেজ নাম বিভাগটি দেখুন।
  6. API 29 নির্বাচন করুন: ন্যূনতম SDK- এর জন্য Android 10 (Q), তারপর Next এ ক্লিক করুন।

    Android Automotive OS-এ কার অ্যাপ লাইব্রেরি সমর্থন করে এমন সমস্ত গাড়ি Android 10 API লেভেল 29 বা তার উপরে চলে, তাই এই মান নির্বাচন করা সমস্ত সামঞ্জস্যপূর্ণ গাড়িকে লক্ষ্য করে।

আপনি Android স্টুডিওতে আপনার মডিউল তৈরি করার পরে, আপনার নতুন স্বয়ংচালিত মডিউলে 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 অটোমোটিভ আর্টিফ্যাক্টের উপর নির্ভরতা যোগ করতে হবে, যার মধ্যে রয়েছে Android Automotive OS-এ আপনার অ্যাপ চালানোর জন্য প্রয়োজনীয় CarAppActivity বাস্তবায়ন।

আপনি যদি অ্যান্ড্রয়েড অটো এবং অ্যান্ড্রয়েড অটোমোটিভ ওএস উভয়কে সমর্থন করার জন্য আপনার অ্যাপ তৈরি করেন, তাহলে আমরা সুপারিশ করব যে আপনি আপনার CarAppService একটি পৃথক মডিউলে রাখুন যা আপনি আপনার মোবাইল এবং স্বয়ংচালিত মডিউলগুলির মধ্যে ভাগ করেন৷ আপনি যদি এই পদ্ধতিটি ব্যবহার করেন, তাহলে নিচের স্নিপেটে দেখানো হিসাবে Gradle-এর প্রকল্প নির্ভরতা ব্যবহার করে ভাগ করা মডিউল অন্তর্ভুক্ত করতে আপনাকে আপনার স্বয়ংচালিত মডিউল আপডেট করতে হবে:

গ্রোভি

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

কোটলিন

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 ফাইলকে নির্দেশ করে যা আপনার অ্যাপ সমর্থন করে এমন স্বয়ংচালিত ক্ষমতাগুলি ঘোষণা করে৷

আপনার কাছে একটি কার অ্যাপ লাইব্রেরি অ্যাপ রয়েছে তা নির্দেশ করতে, আপনার 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 ঘোষণা করুন

অ্যান্ড্রয়েড অটোর বিপরীতে, আপনার অ্যান্ড্রয়েড অটোমোটিভ ওএস অ্যাপের এন্ট্রি পয়েন্ট হিসাবে পরিবেশন করতে আপনাকে অবশ্যই একটি অতিরিক্ত অ্যাপ্লিকেশন উপাদান, CarAppActivity অন্তর্ভুক্ত করতে হবে। এই কার্যকলাপের বাস্তবায়ন androidx.car.app:app-automotive আর্টিফ্যাক্টে অন্তর্ভুক্ত করা হয়েছে এবং আপনার অ্যাপের UI রেন্ডার করার জন্য টেমপ্লেট হোস্ট অ্যাপ্লিকেশনের সাথে যোগাযোগের জন্য দায়ী। আপনার ম্যানিফেস্টে এই ক্রিয়াকলাপের শুধুমাত্র একটি উদাহরণ থাকা উচিত এবং এটি অবশ্যই নিম্নরূপ ঘোষণা করা উচিত:

<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 প্যাকেজ কিট (APK) বিতরণ করেন, তাই আপনি আপনার মোবাইল অ্যাপ থেকে প্যাকেজ নামটি পুনরায় ব্যবহার করতে পারেন বা একটি নতুন প্যাকেজ নাম তৈরি করতে পারেন৷ আপনি যদি একটি ভিন্ন প্যাকেজের নাম ব্যবহার করেন, আপনার অ্যাপে দুটি আলাদা প্লে স্টোর তালিকা রয়েছে। আপনি যদি আপনার বর্তমান প্যাকেজের নাম পুনরায় ব্যবহার করেন, আপনার অ্যাপের উভয় প্ল্যাটফর্মে একটি একক তালিকা রয়েছে।

এটি মূলত একটি ব্যবসায়িক সিদ্ধান্ত। উদাহরণস্বরূপ, যদি আপনার মোবাইল অ্যাপে একটি টিম কাজ করে এবং একটি পৃথক দল আপনার Android Automotive OS অ্যাপে কাজ করে, তাহলে আলাদা প্যাকেজের নাম রাখা এবং প্রতিটি দলকে নিজস্ব Play Store তালিকা পরিচালনা করতে দেওয়া বোধগম্য হতে পারে। উভয় পদ্ধতি ব্যবহার করার জন্য প্রয়োজনীয় প্রযুক্তিগত প্রচেষ্টার মধ্যে একটি বড় পার্থক্য নেই।

নিম্নলিখিত সারণীটি আপনার বর্তমান প্যাকেজের নাম রাখা বা একটি নতুন প্যাকেজ নাম ব্যবহার করার মধ্যে কিছু অন্যান্য মূল পার্থক্যকে সংক্ষিপ্ত করে:

বৈশিষ্ট্য একই প্যাকেজের নাম নতুন প্যাকেজের নাম
দোকান তালিকা একক একাধিক
মিরর ইনস্টল হ্যাঁ: সেটআপ উইজার্ডের সময় দ্রুত অ্যাপ পুনরায় ইনস্টল করুন না
প্লে স্টোর পর্যালোচনা প্রক্রিয়া রিভিউ ব্লক করা: যদি একটি APK এর জন্য রিভিউ ব্যর্থ হয়, তাহলে একই রিলিজে জমা দেওয়া অন্যান্য APK ব্লক করা হয় স্বতন্ত্র পর্যালোচনা
পরিসংখ্যান, মেট্রিক্স, এবং গুরুত্বপূর্ণ সম্মিলিত: আপনি স্বয়ংচালিত-নির্দিষ্ট ডেটার জন্য ডিভাইসের নাম দ্বারা ফিল্টার করতে পারেন। আলাদা
ইনডেক্সিং এবং সার্চ র‍্যাঙ্কিং বর্তমান স্ট্যান্ডিং বন্ধ করুন কোন ক্যারিওভার নেই
অন্যান্য অ্যাপের সাথে একীভূত হচ্ছে সম্ভবত কোন পরিবর্তনের প্রয়োজন নেই, ধরে নিচ্ছি যে মিডিয়া কোড উভয় APK এর মধ্যে ভাগ করা হয়েছে Google সহকারীর সাথে ইউআরআই প্লেব্যাকের মতো সংশ্লিষ্ট অ্যাপ আপডেট করতে হতে পারে

অফলাইন বিষয়বস্তু

প্রযোজ্য হলে, আপনার অ্যাপে অফলাইন সমর্থন প্রয়োগ করুন। অ্যান্ড্রয়েড অটোমোটিভ ওএস সহ গাড়িগুলির নিজস্ব ডেটা সংযোগ থাকবে বলে আশা করা হচ্ছে, যার অর্থ একটি ডেটা প্ল্যান গাড়ির খরচের মধ্যে অন্তর্ভুক্ত করা হয়েছে বা ব্যবহারকারীর দ্বারা অর্থ প্রদান করা হয়েছে৷ যাইহোক, গাড়ির মোবাইল ডিভাইসের তুলনায় আরো পরিবর্তনশীল সংযোগ থাকবে বলে আশা করা হচ্ছে।

আপনার অফলাইন সমর্থন কৌশল বিবেচনা করার সময় এখানে কয়েকটি বিষয় মনে রাখতে হবে:

  • কন্টেন্ট ডাউনলোড করার সর্বোত্তম সময় হল আপনার অ্যাপ ব্যবহারের সময়।
  • অনুমান করবেন না যে ওয়াইফাই উপলব্ধ। একটি গাড়ি কখনই ওয়াইফাই রেঞ্জের মধ্যে নাও আসতে পারে, বা অরিজিনাল ইকুইপমেন্ট ম্যানুফ্যাকচারার (OEM) সেলুলার নেটওয়ার্কের পক্ষে ওয়াইফাই অক্ষম করতে পারে৷
  • যদিও আপনি ব্যবহারকারীদের ব্যবহার করতে চান এমন সামগ্রীকে স্মার্টলি ক্যাশে করা ঠিক আছে, আমরা সুপারিশ করছি যে আপনি ব্যবহারকারীকে এই আচরণ পরিবর্তন করতে দিন।
  • গাড়ির ডিস্কের স্থান পরিবর্তিত হয়, তাই ব্যবহারকারীদের অফলাইন সামগ্রী মুছে ফেলার একটি উপায় দিন৷

সচরাচর জিজ্ঞাস্য

Android Automotive OS সম্পর্কে প্রায়শই জিজ্ঞাসিত কিছু প্রশ্নের উত্তরের জন্য নিম্নলিখিত বিভাগগুলি দেখুন৷

তৃতীয় পক্ষের SDK এবং লাইব্রেরি ব্যবহার করার জন্য কোন বিধিনিষেধ বা সুপারিশ আছে?

তৃতীয় পক্ষের SDK এবং লাইব্রেরি ব্যবহার করার বিষয়ে কোনো নির্দিষ্ট নির্দেশিকা নেই৷ আপনি যদি থার্ড-পার্টি SDK এবং লাইব্রেরি ব্যবহার করা বেছে নেন, তাহলেও গাড়ি অ্যাপের গুণমানের প্রয়োজনীয়তা মেনে চলার জন্য আপনি দায়ী।

আমি কিভাবে Google Play Console ব্যবহার করে আমার Android Automotive OS অ্যাপ প্রকাশ করব?

অ্যাপ প্রকাশের প্রক্রিয়াটি একটি ফোন অ্যাপ প্রকাশ করার মতই, কিন্তু আপনি একটি ভিন্ন ফর্ম ফ্যাক্টর ব্যবহার করেন। অ্যান্ড্রয়েড অটোমোটিভ ওএস রিলিজ টাইপ ব্যবহার করার জন্য আপনার অ্যাপটি বেছে নিতে, এই ধাপগুলি অনুসরণ করুন:

  1. প্লে কনসোল খুলুন।
  2. আপনার অ্যাপ্লিকেশন নির্বাচন করুন.
  3. বাম মেনু থেকে, রিলিজ > সেটআপ > অ্যাডভান্সড সেটিংস > ফর্ম ফ্যাক্টর নির্বাচন করুন।
  4. ফর্ম ফ্যাক্টর যোগ করুন > Android Automotive OS নির্বাচন করুন, তারপর প্লে কনসোলে নির্দেশাবলী অনুসরণ করুন।

সমস্যা সমাধান

অ্যান্ড্রয়েড অটোমোটিভ ওএস-এ কিছু সাধারণ সমস্যা সমাধানের পরিস্থিতিতে সাহায্যের জন্য নিম্নলিখিতগুলি দেখুন৷

  • এমনকি সিস্টেম সেটিংস থেকে একটি কার অ্যাপ লাইব্রেরি অ্যাপ আনইনস্টল করার পরেও, একটি নতুন সংস্করণ ইনস্টল করার চেষ্টা করার সময় আমি একটি ত্রুটি পেয়েছি।

    অ্যাপটি আনইনস্টল করা হয়েছে তা নিশ্চিত করতে, adb uninstall app.package.name কমান্ডটি ব্যবহার করুন।