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ızdaki 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 sunulan en yeni Templates Host'a ihtiyacınız vardır.
Geliştirmeye genel bakış
Android Automotive OS desteği eklemek için bu sayfada açıklanan bölümlerde belirtildiği gibi yalnızca birkaç adım gerekir:
- Otomotiv modülü oluşturma
- Android Automotive OS için destek beyan etme
CarAppService
veCarAppActivity
öğelerinizi beyan etme- Gradle bağımlılıkları güncelleme
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 manifest gibi bazı bileşenleri platforma özgü gereksinimlere sahiptir. Bu bileşenlerin kodunu, telefon uygulamanız için kullanılan kod gibi projenizdeki diğer kodlardan 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 Dosya > Yeni > Yeni Modül'ü tıklayın.
- Otomotiv Modülü'nü seçin ve İleri'yi tıklayın.
- Uygulama/Kitaplık adı girin. Bu, Android Automotive OS'te kullanıcıların 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)'u seçin ve ardından Sonraki'yi tıklayın. Android Automotive OS'te Araba Uygulama Kitaplığı'nı destekleyen tüm arabalar Android 10 API düzeyi 29 veya sonraki sürümleri çalıştırır. Bu nedenle, bu değeri seçtiğinizde uyumlu tüm arabalar hedeflenir.
Etkinlik Ekle'yi seçin ve ardından Son'u tıklayın.
Yeni bir proje başlatıyorsanız:
- Android Studio'da Dosya > Yeni > Yeni Proje'yi 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'te uygulamanız için gördüğü addır.
- Bir 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)'u seçin ve ardından Sonraki'yi tıklayın.
Android Automotive OS'te Araba Uygulama Kitaplığı'nı destekleyen tüm arabalar Android 10 API düzeyi 29 veya sonraki sürümleri çalıştırır. Bu nedenle, bu değeri seçtiğinizde uyumlu tüm arabalar hedeflenir.
Android Studio'da modülünüzü oluşturduktan sonra yeni otomotiv modülünüzde AndroidManifest.xml
dosyasını 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 bilgileri ve Android Automotive OS desteğini beyan eden bir uses-feature
öğesi bulunur. Manifest dosyasında beyan edilen etkinlik olmadığını unutmayın.
Ardından manifest dosyanıza aşağıdaki uses-feature
öğelerini ekleyin:
<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>
İlk uses-feature
öğesi, uygulamanızın çalışması için Şablonlar Ana Makinesini kullandığını belirtir. Kalan dört uses-feature
öğesini required="false"
olarak açıkça ayarlamak, uygulamanızın Android Automotive OS cihazlardaki mevcut donanım özellikleriyle çakışmasını önler.
Gradle bağımlılıkları güncelleme
Otomotiv modülünüzde, uygulamanızın Android Automotive OS'te çalışması için gereken CarAppActivity
uygulamasını içeren androidx.car.app:app-automotive
yapısını bağımlı olarak eklemeniz gerekir.
Uygulamanızı hem Android Auto 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ı kullanılarak 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 için destek beyan etme
Uygulamanızın Android Automotive OS'i desteklediğini beyan etmek 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 açıklayan bir XML dosyasını ifade eder.
Araba Uygulama Kitaplığı uygulamanız olduğunu belirtmek için Android Automotive OS modülünüzde automotive_app_desc.xml
adlı bir XML dosyası ekleyin.res/xml/
Bu dosya aşağıdaki içeriği içermelidir:
<automotiveApp>
<uses name="template"/>
</automotiveApp>
CarAppService ve CarAppActivity'nizi tanımlama
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 beyan etmeyle ilgili talimatlar için CarAppService ve Oturumunuzu Oluşturma ve CarAppService'inizi Beyan Etme başlıklı makaleleri inceleyin.
Android Auto'dan farklı olarak, Android Automotive OS uygulamanızın giriş noktası olarak hizmet verecek CarAppActivity
adlı ek bir uygulama bileşeni eklemeniz gerekir. Bu etkinliğin uygulanması androidx.car.app:app-automotive
yapısına dahil edilir ve uygulamanızın kullanıcı arayüzünü oluşturmak için şablon ana uygulamayla iletişim kurmaktan sorumludur. Manifest dosyanızda bu etkinliğin yalnızca bir örneği olmalıdır ve aşağıdaki şekilde beyan edilmelidir:
<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
yapısını içerenCarAppActivity
sınıfının tam nitelikli sınıf adına ayarlanır.- Etkinlik kendisinden başka bir uygulama (yani başlatıcı) tarafından başlatılabilir olması gerektiğinden
android:exported
,true
olarak ayarlanır. android:launchMode
, kullanıcının Başlatıcı'dan ayrılırsa etkinliğin aynı örneğine geri dönebilmesi içinsingleTask
olarak ayarlanır.android:theme
, uygulamanın kullanabileceği ekran alanının tamamını kaplaması için@android:style/Theme.DeviceDefault.NoActionBar
olarak ayarlanır.- Intent filtresi, bunun uygulamanın başlatıcı etkinliği olduğunu belirtir.
- OS'ye, uygulamanın kullanıcı deneyimi kısıtlamaları geçerliyken (ör. araç hareket halindeyken) kullanılabileceğini belirten bir
<meta-data>
öğesi vardır.
Navigasyon uygulamaları için ek şartlar
Navigasyon uygulamaları için aşağıdaki snippet'te gösterildiği gibi CarAppActivity
için birkaç tane daha zorunlu manifest girişi 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_MAPS
kategorisi, sistemin uygulamanızın kullanıcının konumunu gösterebileceğini bilmesini sağlar. androidx.car.app.action.NAVIGATE
intent filtresi, kullanıcıların başka bir araba uygulamasından gelen dolaylı bir gezinme intent'ini işlerken uygulamanızı kullanma seçeneğine sahip olmasını sağlar.
Dikkat edilmesi gereken diğer noktalar
Android Automotive OS uygulamanızı geliştirirken aşağıdaki hususları da göz önünde bulundurun:
Paket adları
Android Automotive OS için ayrı bir Android Paketi 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ıyorsanız uygulamanızın iki ayrı Play Store girişi vardır. Mevcut paket adınızı yeniden kullanırsanız uygulamanız her iki platformda da tek bir girişe sahip olur.
Bu, esas olarak işletmeyle ilgili bir karardır. Ö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 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ı kullanmaya devam etmekle yeni bir paket adı kullanmak arasındaki diğer bazı önemli farklılıklar ö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 hızlı uygulama yeniden yükleme | Hayır |
Play Store inceleme süreci | İncelemeleri engelleme: Bir APK'nın incelemesi başarısız olursa aynı sürümde gönderilen diğer APK'lar engellenir | Bağımsız yorumlar |
İstatistikler, metrikler ve önemli metrikler | Birleştirilmiş: Otomotiv'e özgü veriler için cihaz adına göre filtreleme yapabilirsiniz. | Ayır |
Dizine ekleme ve arama sıralaması | Mevcut konumdan yararlanma | Aktarma yapılamaz. |
Diğer uygulamalarla entegrasyon | Medya kodunun her iki APK arasında paylaşıldığı varsayıldığında büyük olasılıkla değişiklik gerekmez. | İlgili uygulamayı (ör. Google Asistan ile URI oynatma) güncellemeniz gerekebilir |
Çevrimdışı içerik
Mümkünse uygulamanızda çevrimdışı desteği uygulayın. Android Automotive OS'e sahip araçların kendi veri bağlantılarına sahip olması beklenir. Yani veri planı aracın maliyetine dahildir veya kullanıcı tarafından ödenir. Bununla birlikte, arabaların mobil cihazlardan daha değişken bir bağlantıya sahip olması da beklenir.
Çevrimdışı destek stratejinizi belirlerken göz önünde bulundurmanız gereken birkaç nokta aşağıda verilmiştir:
- İçerik indirmek için en uygun zaman, uygulamanız kullanımdaykendir.
- Kablosuz bağlantının kullanılabileceğini varsaymayın. Bir araba hiçbir zaman kablosuz aralığa giremeyebilir veya orijinal donanım üreticisi (OEM), hücresel ağ için kablosuz bağlantıyı devre dışı bırakmış olabilir.
- Kullanıcıların kullanmasını beklediğiniz içeriği akıllıca önbelleğe almak sorun olmasa da kullanıcının bu davranışı değiştirmesine izin vermenizi öneririz.
- Araçlardaki disk alanı değişiklik gösterdiğinden kullanıcılara çevrimdışı içeriği silme olanağı sunun.
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ı kullanmayla ilgili herhangi bir kısıtlama veya öneri var mı?
Üçüncü taraf SDK'ları ve kitaplıklarının kullanımıyla ilgili belirli kurallar yoktur. Üçüncü taraf SDK'ları ve kitaplıklarını kullanmayı seçseniz bile tüm araç uygulaması kalite koşullarına uymaktan sorumlusunuz.
Android Automotive OS uygulamamı Google Play Console'u kullanarak nasıl yayınlayabilirim?
Android Automotive OS uygulamanızı Google Play Console'u kullanarak yayınlama 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ğıdaki bölüme bakın.
Bir Car App Library uygulamasını sistem ayarlarından kaldırdıktan sonra bile yeni sürümü yüklemeye çalışırken hata alıyorum.
Uygulamanın kaldırıldığından emin olmak için
adb uninstall app.package.name
komutunu kullanın.