Android Automotive OS, kullanıcıların arabaya uygulama yüklemesine olanak tanır. Bu platformda kullanıcılara ulaşabilmek için Android Automotive OS ile uyumlu ve sürücüye göre optimize edilmiş uygulamalar dağıtmanız gerekir. Android Auto uygulamanızda hemen hemen tüm kod ve kaynakları yeniden kullanabilirsiniz. Ancak bu sayfada açıklanan şartları karşılayan ayrı bir derleme oluşturmanız gerekir.
Araba uygulamanızı Android Automotive OS'te çalıştırmak için sistem uygulaması olarak gelen en yeni Templates Host'a ihtiyacınız vardır.
Geliştirmeye genel bakış
Android Automotive OS desteği eklemek için bu sayfadaki bölümlerde açıklandığı gibi yalnızca birkaç adım gerekir:
- Otomotiv modülü oluşturma
- Android Automotive OS desteğini beyan etme
CarAppServiceveCarAppActivitytanımlayın- Gradle bağımlılıklarınızı güncelleyin
Tüm Automotive OS özelliklerinin etkinleştirildiğinden emin olmak için Android Studio Bumblebee veya daha yeni bir sürümü kullanın.
Otomotiv modülü oluşturma
Android Automotive OS'in bazı bileşenleri (ör. manifest) platforma özel şartlara tabidir. Bu bileşenlerin kodunu projenizdeki diğer kodlardan (ör. telefon uygulamanız için kullanılan kod) ayrı tutabilecek bir modül oluşturun.
Mevcut bir projeye otomotiv modülü eklemek için aşağıdaki adımları uygulayın:
- Android Studio'da File > New > New Module'u (Dosya > Yeni > Yeni Modül) tıklayın.
- Otomotiv Modülü'nü seçin ve Sonraki'yi tıklayın.
- Uygulama/Kitaplık adı girin. Bu, kullanıcıların Android Automotive OS'te uygulamanız için gördüğü addır.
- Bir Modül adı girin.
- Paket adını mevcut uygulamanızla eşleşecek şekilde düzenleyin.
Minimum SDK için API 29: Android 10 (Q)'yu seçin ve İleri'yi tıklayın. Android Automotive OS'te Car App Library'yi destekleyen tüm arabalar Android 10 API düzeyi 29 veya sonraki sürümlerde çalışır. Bu nedenle, bu değeri seçtiğinizde tüm uyumlu arabalar hedeflenir.
Etkinlik Yok Ekle'yi seçin ve Son'u tıklayın.
Yeni bir proje başlatıyorsanız:
- Android Studio'da File > New > New Project'i (Dosya > Yeni > Yeni Proje) tıklayın.
- Proje Türü için Otomotiv'i seçin.
- Etkinlik Yok'u seçip Sonraki'yi tıklayın.
- Projeniz için bir ad girin. Bu, kullanıcıların Android Automotive OS'de uygulamanız için gördüğü addır.
- Paket adı girin. Paket adı seçme hakkında daha fazla bilgi için Paket adları bölümüne bakın.
Minimum SDK için API 29: Android 10 (Q)'yu seçin ve İleri'yi tıklayın.
Android Automotive OS'te Car App Library'yi destekleyen tüm arabalar Android 10 API düzeyi 29 veya sonraki sürümlerde çalışır. Bu nedenle, bu değeri seçtiğinizde tüm uyumlu arabalar hedeflenir.
Android Studio'da modülünüzü oluşturduktan sonra yeni otomotiv modülünüzdeki AndroidManifest.xmldosyayı açın:
<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> öğesinde bazı standart uygulama bilgilerinin yanı sıra Android Automotive OS desteğini bildiren bir <uses-feature> öğesi bulunur.
Manifest'te herhangi bir etkinlik tanımlanmadığını unutmayın.
Özellik şartlarını beyan etme
Ardından, düzgün çalışması için şablon ana makinesi gerektiğini belirtmek üzere manifest dosyanıza aşağıdaki uses-feature öğesini ekleyin:
<manifest ...>
...
<uses-feature
android:name="android.software.car.templates_host"
android:required="true" />
...
</manifest>
Ayrıca, uygulamanızın Android Automotive OS için geliştirilen tüm uygulamalar için geçerli olan Google Play özelliği şartlarını karşıladığından emin olun.
Gradle bağımlılıklarınızı güncelleme
Otomotiv modülünüze, uygulamanızın Android Automotive OS'te çalışması için gereken CarAppActivity uygulamasını içeren androidx.car.app:app-automotive yapısına bağımlılık eklemeniz gerekir.
Uygulamanızı hem Android Auto'yu hem de Android Automotive OS'i destekleyecek şekilde geliştiriyorsanız CarAppService öğenizi, mobil ve otomotiv modülleriniz arasında paylaştığınız ayrı bir modülde tutmanızı öneririz. Bu yaklaşımı kullanıyorsanız aşağıdaki snippet'te gösterildiği gibi, Gradle'ın proje bağımlılıklarını kullanarak paylaşılan modülü içerecek şekilde otomotiv modülünüzü güncellemeniz gerekir:
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 desteğini beyan etme
Uygulamanızın Android Automotive OS'i desteklediğini belirtmek için aşağıdaki manifest girişini kullanın:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Bu manifest girişi, uygulamanızın desteklediği otomotiv özelliklerini bildiren bir XML dosyasını ifade eder.
Araba Uygulaması Kitaplığı uygulamanız olduğunu belirtmek için Android Automotive OS modülünüzdeki res/xml/ dizinine automotive_app_desc.xml adlı bir XML dosyası ekleyin. Bu dosya aşağıdaki içerikleri içermelidir:
<automotiveApp>
<uses name="template"/>
</automotiveApp>
CarAppService ve CarAppActivity'nizi tanımlayın
Android Auto'da olduğu gibi Android Automotive OS de uygulamanızı çalıştırmak için CarAppService uygulamanızı kullanır. CarAppService uygulamanızı uygulama ve tanımlama talimatları için CarAppService ve Session'ınızı oluşturma ve CarAppService'inizi tanımlama başlıklı makaleleri inceleyin.
Android Auto'nun aksine, Android Automotive OS uygulamanızın giriş noktası olarak hizmet verecek ek bir uygulama bileşeni olan CarAppActivity'yı eklemeniz gerekir. Bu etkinliğin uygulanması androidx.car.app:app-automotive yapısına dahil edilmiştir ve uygulamanızın kullanıcı arayüzünü oluşturmak için şablon ana makine uygulamasıyla iletişim kurmaktan sorumludur. Manifest dosyanızda bu etkinliğin yalnızca bir örneği olmalı ve aşağıdaki gibi bildirilmelidir:
<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-automotiveyapıtındakiCarAppActivitysınıfının tam nitelikli sınıf adı olarak ayarlanır.- Etkinliğin kendisi dışında bir uygulama (yani başlatıcı) tarafından başlatılması gerektiğinden
android:exported,trueolarak ayarlanır. android:launchMode,singleTaskolarak ayarlanır. Böylece kullanıcı, sayfadan ayrılırsa başlatıcıdan etkinliğin aynı örneğine dönebilir.android:theme,@android:style/Theme.DeviceDefault.NoActionBarolarak ayarlanır. Böylece uygulama, kendisine ayrılan ekran alanının tamamını kaplar.- Intent filtresi, bunun uygulama için başlatıcı etkinliği olduğunu gösterir.
<meta-data>öğesi, işletim sistemine uygulamanın, araç hareket halindeyken olduğu gibi kullanıcı deneyimi kısıtlamaları varken kullanılabileceğini belirtir.
Navigasyon uygulamaları için ek şartlar
Navigasyon uygulamaları için aşağıdaki snippet'te gösterildiği gibi CarAppActivity ile ilgili birkaç zorunlu manifest girişi daha vardır:
<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>
- Ek
android.intent.category.APP_MAPSkategorisi, sistemin uygulamanızın kullanıcının konumunu gösterebileceğini anlamasını sağlar. androidx.car.app.action.NAVIGATEintent filtresi, kullanıcıların başka bir araba uygulamasından gelen dolaylı gezinme intentini işlerken uygulamanızı kullanma seçeneğine sahip olmasını sağlar.
Derin bağlantıları destekleme
Şablonlu uygulamanızın Android Automotive OS cihazlarındaki deneyimini iyileştirmek için CarAppActivity'nize derin bağlantı desteği ekleyebilirsiniz. Örneğin, bu özellik sayesinde kullanıcılar uygulamanızı doğrudan bir tarayıcıdan veya Quick Share kullanılarak telefondan paylaşılan bir URL'yi aldıklarında açabilir.
Derin bağlantı intent filtreleri ekleme
İşletim sistemine uygulamanızın derin bağlantıları işleyebildiğini bildirmek için uygulamanızın <activity> öğesine uygun intent filtreleri eklemeniz gerekir.CarAppActivity Ek bilgiler için Gelen bağlantılar için intent filtreleri ekleme başlıklı makaleyi inceleyin.
En iyi kullanıcı deneyimi için, mobil uygulamanız tarafından desteklenen ve araç içi uygulamanız tarafından makul ölçüde desteklenebilen tüm derin bağlantıları desteklemenizi öneririz.
Derin bağlantı amaçlarını işleme
Uygulamanızın intent'leri işlemesi için hem onCreateScreen() sırasında araba uygulamanızın Session oluşturulurken hem de onNewIntent() sırasında yeni bir intent aldığında gelen intent'lerdeki verileri okuması gerekir:
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 } }
Dikkat edilmesi gereken diğer noktalar
Android Automotive OS uygulamanızı geliştirirken aşağıdaki diğer hususları da göz önünde bulundurun:
Paket adları
Android Automotive OS için ayrı bir Android Paket Kiti (APK) dağıttığınızdan mobil uygulamanızdaki paket adını yeniden kullanabilir veya yeni bir paket adı oluşturabilirsiniz. Farklı bir paket adı kullanırsanız uygulamanızın iki ayrı Play Store girişi olur. Mevcut paket adınızı yeniden kullanırsanız uygulamanızın her iki platformda da tek bir girişi olur.
Bu karar, büyük ölçüde işletmeyle ilgilidir. Örneğin, mobil uygulama üzerinde çalışan bir ekibiniz ve Android Automotive OS uygulamanız üzerinde çalışan ayrı bir ekibiniz varsa ayrı paket adları kullanmak ve her ekibin kendi Play Store mağaza girişini yönetmesine izin vermek mantıklı olabilir. Her iki yaklaşımı kullanmak için gereken teknik çaba arasında büyük bir fark yoktur.
Aşağıdaki tabloda, mevcut paket adınızı koruma veya yeni bir paket adı kullanma arasındaki diğer bazı temel farklar özetlenmektedir:
| Özellik | Aynı paket adı | Yeni paket adı |
|---|---|---|
| Mağaza girişi | Tek | Birden çok |
| Yansıtılmış yükleme | Evet: Kurulum sihirbazı sırasında uygulamaları hızlı bir şekilde yeniden yükleme | Hayır |
| Play Store inceleme süreci | Yorumların engellenmesi: Bir APK için yorum başarısız olursa aynı sürümde gönderilen diğer APK'lar engellenir. | Bireysel incelemeler |
| İstatistikler, metrikler ve vitals | Birleştirilmiş: Otomotivle ilgili veriler için cihaz adına göre filtreleme yapabilirsiniz. | Ayır |
| Dizine ekleme ve arama sıralaması | Mevcut durumdan yararlanma | Devretme yok |
| Diğer uygulamalarla entegrasyon | Medya kodu her iki APK arasında paylaşıldığı sürece büyük olasılıkla herhangi bir değişiklik yapılması gerekmez. | Google Asistan ile URI oynatma gibi durumlarda ilgili uygulamayı güncellemeniz gerekebilir. |
Çevrimdışı içerik
Gerekirse uygulamanızda çevrimdışı desteği uygulayın. Android Automotive OS'li araçların kendi veri bağlantıları olması beklenir. Bu nedenle, araç maliyetine bir veri planı dahildir veya kullanıcı tarafından ödenir. Ancak arabaların, mobil cihazlara kıyasla daha değişken bir bağlantıya sahip olması da bekleniyor.
Çevrimdışı destek stratejinizi belirlerken göz önünde bulundurmanız gereken birkaç nokta:
- İçerik indirmek için en uygun zaman, uygulamanızın kullanıldığı zamandır.
- Kablosuz bağlantının mevcut olduğunu varsaymayın. Araba hiçbir zaman kablosuz bağlantı aralığına girmeyebilir veya özgün donanım üreticisi (OEM), mobil ağ lehine kablosuz bağlantıyı devre dışı bırakmış olabilir.
- Kullanıcıların kullanacağını düşündüğünüz içerikleri akıllıca önbelleğe almanızda sorun olmasa da, kullanıcının bu davranışı değiştirmesine izin vermenizi öneririz.
- Arabaların disk alanı değiştiği için kullanıcılara çevrimdışı içeriği silme olanağı tanıyın.
Sık sorulan sorular
Android Automotive OS hakkında sık sorulan bazı soruların yanıtlarını aşağıdaki bölümlerde bulabilirsiniz.
Üçüncü taraf SDK'ları ve kitaplıklarının kullanımıyla ilgili herhangi bir kısıtlama veya öneri var mı?
Üçüncü taraf SDK'larının ve kitaplıklarının kullanımıyla ilgili belirli yönergeler yoktur. Üçüncü taraf SDK'ları ve kitaplıklarını kullanmayı tercih ederseniz tüm araba uygulaması kalite şartlarına uymak sizin sorumluluğunuzdadır.
Google Play Console'u kullanarak Android Automotive OS uygulamamı nasıl yayınlayabilirim?
Android Automotive OS uygulamanızı Google Play Console'u kullanarak nasıl yayınlayacağınız hakkında ayrıntılı bilgi için Arabalara dağıtma başlıklı makaleyi inceleyin.
Sorun giderme
Android Automotive OS'te sık karşılaşılan bazı sorun giderme senaryolarıyla ilgili yardım için aşağıdakilere bakın.
Car App Library uygulamasını sistem ayarlarından kaldırdıktan sonra bile yeni bir sürümü yüklemeye çalışırken hata alıyorum.
Uygulamanın kaldırıldığından emin olmak için
adb uninstall app.package.namekomutunu kullanın.