Android Automotive OS ব্যবহারকারীদের গাড়িতে অ্যাপ ইনস্টল করার অনুমতি দেয়। এই প্ল্যাটফর্মে ব্যবহারকারীদের কাছে পৌঁছাতে, আপনাকে ড্রাইভার-অপ্টিমাইজ করা অ্যাপ ডিস্ট্রিবিউট করতে হবে যা Android Automotive OS-এর সাথে মানানসই। আপনার Android Auto অ্যাপে প্রায় সব কোড ও রিসোর্স আবার ব্যবহার করতে পারবেন, তবে আপনাকে এমন একটি আলাদা বিল্ড তৈরি করতে হবে যা এই পৃষ্ঠায় বর্ণিত প্রয়োজনীয়তা পূরণ করে।
Android Automotive OS-এ আপনার কার অ্যাপ চালাতে, আপনার লেটেস্ট Templates Host প্রয়োজন, যা সিস্টেম অ্যাপ হিসেবে আসে।
ডেভেলপমেন্টের ওভারভিউ
Android Automotive OS-এর সুবিধা যোগ করার জন্য মাত্র কয়েকটি ধাপ অনুসরণ করতে হবে, যেমন এই পৃষ্ঠার বিভিন্ন বিভাগে বর্ণনা করা হয়েছে:
- অটোমোটিভ মডিউল তৈরি করা
- Android Automotive OS-এর জন্য সহায়তা ঘোষণা করা
- আপনার
CarAppServiceওCarAppActivityঘোষণা করুন - আপনার Gradle ডিপেন্ডেন্সি আপডেট করুন
সব Automotive OS ফিচার চালু আছে কিনা তা নিশ্চিত করতে Android Studio Bumblebee বা এর পরের যেকোনও ভার্সন ব্যবহার করুন।
অটোমোটিভ মডিউল তৈরি করা
Android Automotive OS-এর কিছু কম্পোনেন্ট, যেমন ম্যানিফেস্টের প্ল্যাটফর্ম-নির্দিষ্ট প্রয়োজনীয়তা আছে। এমন একটি মডিউল তৈরি করুন যা আপনার প্রোজেক্টের অন্যান্য কোড থেকে এইসব কম্পোনেন্টের কোডকে আলাদা রাখতে পারে, যেমন আপনার ফোন অ্যাপের জন্য ব্যবহৃত কোড।
আগে থেকে থাকা প্রোজেক্টের জন্য, আপনার প্রোজেক্টে অটোমোটিভ মডিউল যোগ করতে এইসব ধাপ অনুসরণ করুন:
- Android Studio-তে, ফাইল > নতুন > নতুন মডিউল বিকল্পে ক্লিক করুন।
- অটোমোটিভ মডিউল বেছে নিন, তারপর পরবর্তী বিকল্পে ক্লিক করুন।
- অ্যাপ্লিকেশন/লাইব্রেরির নাম দিন। Android Automotive OS-এ ব্যবহারকারীরা আপনার অ্যাপের এই নাম দেখতে পাবেন।
- মডিউলের নাম লিখুন।
- আপনার আগে থেকে থাকা অ্যাপের সাথে মেলাতে প্যাকেজের নাম এডিট করুন।
ন্যূনতম SDK-এর জন্য API 29: Android 10 (Q) বেছে নিন, তারপর পরবর্তী বিকল্পে ক্লিক করুন। Android Automotive OS-এ Car App Library কাজ করে এমন সব গাড়িতে Android 10 API লেভেল ২৯ বা তার পরের যেকোনও ভার্সন চলে, তাই এই ভ্যালু বেছে নিলে সব মানানসই গাড়ি টার্গেট করা হয়।
কোনও অ্যাক্টিভিটি যোগ করবেন না বিকল্প বেছে নিন, তারপর সম্পূর্ণ করুন বিকল্পে ক্লিক করুন।
আপনি নতুন প্রোজেক্ট শুরু করলে:
- Android Studio-তে, ফাইল > নতুন > নতুন প্রোজেক্ট বিকল্পে ক্লিক করুন।
- প্রোজেক্টের ধরন হিসেবে অটোমোটিভ বেছে নিন।
- কোনও অ্যাক্টিভিটি নেই বিকল্প বেছে নিন, তারপর পরবর্তী বিকল্পে ক্লিক করুন।
- আপনার প্রোজেক্টের একটি নাম দিন। Android Automotive OS-এ আপনার অ্যাপের জন্য ব্যবহারকারীরা এই নাম দেখতে পান।
- প্যাকেজের নাম লিখুন। প্যাকেজের নাম বেছে নেওয়ার ব্যাপারে আরও বিস্তারিত জানতে, প্যাকেজের নাম বিভাগটি দেখুন ।
ন্যূনতম SDK-এর জন্য API 29: Android 10 (Q) বেছে নিন, তারপর পরবর্তী বিকল্পে ক্লিক করুন।
Android Automotive OS-এ Car App Library কাজ করে এমন সব গাড়িতে Android 10 API লেভেল ২৯ বা তার পরের যেকোনও ভার্সন চলে, তাই এই ভ্যালু বেছে নিলে সব মানানসই গাড়ি টার্গেট করা হয়।
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>
এছাড়াও, Android Automotive OS-এর জন্য তৈরি করা সব অ্যাপের ক্ষেত্রে প্রযোজ্য Google Play ফিচারের প্রয়োজনীয়তা আপনার অ্যাপ পূরণ করে কিনা তা নিশ্চিত করুন।
আপনার 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 ফাইলের কথা উল্লেখ করে যা আপনার অ্যাপের কাজ করতে পারার ক্ষমতা ঘোষণা করে।
আপনার কাছে যে কার অ্যাপ লাইব্রেরি অ্যাপ আছে তা বোঝাতে,
আপনার 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-এর মতো, আপনার Android Automotive OS
অ্যাপের এন্ট্রি পয়েন্ট হিসেবে কাজ করার জন্য আপনাকে অবশ্যই একটি অতিরিক্ত অ্যাপ্লিকেশন কম্পোনেন্ট,
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:launchModesingleTaskহিসেবে সেট করা আছে, তাই ব্যবহারকারী নেভিগেট করে বেরিয়ে গেলে লঞ্চার থেকে অ্যাক্টিভিটির একই ইনস্ট্যান্সে ফিরে যেতে পারবেন।android:theme-এর মান@android:style/Theme.DeviceDefault.NoActionBarহিসেবে সেট করা আছে, যাতে অ্যাপটি উপলভ্য সম্পূর্ণ স্ক্রিন স্পেস ব্যবহার করতে পারে।- ইনটেন্ট ফিল্টার থেকে বোঝা যায় যে এটি অ্যাপের লঞ্চার অ্যাক্টিভিটি।
<meta-data>এলিমেন্ট আছে যা OS-কে ইঙ্গিত করে যে UX সংক্রান্ত বিধিনিষেধ থাকা সত্ত্বেও অ্যাপটি ব্যবহার করা যাবে, যেমন, গাড়ি চলাকালীন ।
নেভিগেশন অ্যাপের জন্য অতিরিক্ত প্রয়োজনীয়তা
নেভিগেশন অ্যাপের জন্য, 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 ডিভাইসে আপনার টেমপ্লেট করা অ্যাপের অভিজ্ঞতা উন্নত করতে, আপনার CarAppActivity-এ ডিপ লিঙ্ক-এর জন্য সহায়তা যোগ করতে
পারেন। যেমন, এটি ব্যবহারকারীদের কোনও ব্রাউজার থেকে সরাসরি আপনার অ্যাপ খুলতে বা দ্রুত শেয়ার ব্যবহার করে ফোন থেকে শেয়ার করা URL
পেলে খুলতে দেয়।
ডিপ লিঙ্ক ইনটেন্ট ফিল্টার যোগ করা
আপনার অ্যাপ যে ডিপ লিঙ্ক হ্যান্ডেল করতে পারে তা OS-কে জানাতে, আপনাকে
আপনার অ্যাপের 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 প্যাকেজ কিট (APK) ডিস্ট্রিবিউট করেন, তাই আপনার মোবাইল অ্যাপের প্যাকেজের নাম আবার ব্যবহার করতে পারেন অথবা নতুন প্যাকেজের নাম তৈরি করতে পারেন। আপনি আলাদা প্যাকেজের নাম ব্যবহার করলে, আপনার অ্যাপের দুটি আলাদা Play Store তালিকা থাকবে। আপনি বর্তমান প্যাকেজের নাম আবার ব্যবহার করলে, আপনার অ্যাপের দুটি প্ল্যাটফর্ম জুড়ে একটি লিস্টিং থাকবে।
এটি মূলত একটি ব্যবসায়িক সিদ্ধান্ত। যেমন, আপনার যদি একটি টিম মোবাইল অ্যাপে কাজ করে এবং অন্য একটি টিম আপনার Android Automotive OS অ্যাপে কাজ করে, তাহলে আলাদা প্যাকেজের নাম রাখা এবং প্রতিটি টিমকে নিজস্ব Play Store তালিকা ম্যানেজ করতে দেওয়া বুদ্ধিমানের কাজ হতে পারে। দুটি পদ্ধতির মধ্যে প্রযুক্তিগত প্রচেষ্টার দিক থেকে খুব বেশি পার্থক্য নেই।
আপনার বর্তমান প্যাকেজের নাম রাখা বা নতুন প্যাকেজের নাম ব্যবহার করার মধ্যে কিছু মূল পার্থক্য নিম্নলিখিত সারণীতে সংক্ষিপ্তভাবে তুলে ধরা হয়েছে:
| ফিচার | একই প্যাকেজের নাম | নতুন প্যাকেজের নাম |
|---|---|---|
| স্টোর লিস্টিং | সিঙ্গেল | একাধিক |
| মিরর করা ইনস্টল | হ্যাঁ: সেট-আপ উইজার্ড চলাকালীন দ্রুত অ্যাপ আবার ইনস্টল করা | না |
| Play Store-এ রিভিউ প্রসেস | রিভিউ ব্লক করা: একটি APK-এর রিভিউ না হলে, একই রিলিজের মধ্যে জমা দেওয়া অন্যান্য APK ব্লক করা হয় | ব্যক্তিগত রিভিউ |
| পরিসংখ্যান, মেট্রিক ও গুরুত্বপূর্ণ তথ্য | কম্বাইন করা: আপনি অটোমোটিভ-নির্দিষ্ট ডেটার জন্য ডিভাইসের নাম অনুযায়ী ফিল্টার করতে পারবেন। | আলাদা |
| ইনডেক্স করা ও সার্চ র্যাঙ্কিং | বর্তমান স্ট্যান্ডিংয়ের উপর ভিত্তি করে তৈরি করা | ক্যারিওভারের সুবিধা নেই |
| অন্যান্য অ্যাপের সাথে ইন্টিগ্রেট করা | বেশিরভাগ ক্ষেত্রে কোনও পরিবর্তন করার প্রয়োজন নেই, ধরে নেওয়া হচ্ছে যে মিডিয়া কোডটি দুটি APK-র মধ্যে শেয়ার করা হয়েছে | Google Assistant-এর মাধ্যমে URI প্লেব্যাকের মতো সংশ্লিষ্ট অ্যাপ আপডেট করতে হতে পারে |
অফলাইন সামগ্রী
প্রযোজ্য হলে, আপনার অ্যাপে অফলাইন সহায়তা প্রয়োগ করুন। 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।