Şablonlu uygulamanıza Android Automotive OS için destek ekleyin

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:

  1. Otomotiv modülü oluşturma
  2. Android Automotive OS için destek beyan etme
  3. CarAppService ve CarAppActivity öğelerinizi beyan etme
  4. 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:

  1. Android Studio'da Dosya > Yeni > Yeni Modül'ü tıklayın.
  2. Otomotiv Modülü'nü seçin ve İleri'yi tıklayın.
  3. Uygulama/Kitaplık adı girin. Bu, Android Automotive OS'te kullanıcıların uygulamanız için gördüğü addır.
  4. Bir modül adı girin.
  5. Paket adını mevcut uygulamanızla eşleşecek şekilde düzenleyin.
  6. 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.

  7. Etkinlik Ekle'yi seçin ve ardından Son'u tıklayın.

Yeni bir proje başlatıyorsanız:

  1. Android Studio'da Dosya > Yeni > Yeni Proje'yi tıklayın.
  2. Proje Türü için Otomotiv'i seçin.
  3. Etkinlik yok'u seçip Sonraki'yi tıklayın.
  4. Projeniz için bir ad girin. Bu, kullanıcıların Android Automotive OS'te uygulamanız için gördüğü addır.
  5. Bir paket adı girin. Paket adı seçme hakkında daha fazla bilgi için Paket adları bölümüne bakın.
  6. 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çeren CarAppActivity 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çin singleTask 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 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.