Ş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şmak 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 Template Host'a ihtiyacınız vardır.

Geliştirmeye genel bakış

Android Automotive OS desteğini eklemek, bu sayfadaki bölümlerde açıklandığı gibi yalnızca birkaç adım gerektirir:

  1. Otomotiv modülü oluşturma
  2. Android Automotive OS için destek beyan etme
  3. CarAppService ve CarAppActivity beyan etme
  4. Gradle bağımlılıklarınızı 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şturun

Android Automotive OS'in bazı bileşenlerinin (ör. manifest) platforma özgü gereksinimleri vardır. Bu bileşenlerin kodunu, telefon uygulamanızda 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ı izleyin:

  1. Android Studio'da Dosya > Yeni > Yeni Modül'ü tıklayın.
  2. Otomotiv Modülü'nü seçin, ardından İleri'yi tıklayın.
  3. Uygulama/Kitaplık adı girin. Bu, kullanıcıların Android Automotive OS'te uygulamanız için gördükleri 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) seçeneğini belirleyip İleri'yi tıklayın. Android Automotive işletim sisteminde Araba Uygulama Kitaplığı'nı destekleyen tüm arabalar, Android 10 API düzeyi 29 veya sonraki bir sürümde çalışır. Bu nedenle, bu değerin seçilmesi tüm uyumlu arabaları hedefler.

  7. Etkinlik Ekleme'yi seçip Son'u tıklayın.

Yeni bir projeye başlıyorsanız:

  1. Android Studio'da Dosya > Yeni > Yeni Proje'yi tıklayın.
  2. Proje Türü olarak Otomotiv'i seçin.
  3. Etkinlik Yok'u seçin ve ardından İleri'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ükleri addır.
  5. Paket adı girin. Paket adı seçme hakkında daha fazla ayrıntı için Paket adları bölümüne bakın.
  6. Minimum SDK için API 29: Android 10 (Q) seçeneğini belirleyip İleri'yi tıklayın.

    Android Automotive işletim sisteminde Araba Uygulama Kitaplığı'nı destekleyen tüm arabalar, Android 10 API düzeyi 29 veya sonraki bir sürümde çalışır. Bu nedenle, bu değerin seçilmesi tüm uyumlu arabaları hedefler.

Modülünüzü Android Studio'da 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 öğesi bazı standart uygulama bilgilerinin yanı sıra Android Automotive OS için destek verildiğini belirten bir uses-feature öğesine de sahiptir. Manifest'te herhangi bir etkinlik tanımlanmamıştır.

Daha sonra, aşağıdaki uses-feature öğelerini manifest dosyanıza 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ışmak için Şablonlar Ana Makinesi'ni kullandığını beyan eder. Kalan dört uses-feature öğesini açık bir şekilde required="false" olarak ayarlamak, uygulamanızın Android Automotive OS cihazlardaki mevcut donanım özellikleriyle çakışmamasını sağlar.

Gradle bağımlılıklarınızı 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ına bir 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 otomotiv modülünüzü paylaşılan modülü içerecek şekilde güncellemeniz gerekir:

Modern

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ı

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ın 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çeriğe sahip olmalıdır:

<automotiveApp>
    <uses name="template"/>
</automotiveApp>

CarAppService ve CarAppActivity özelliklerini beyan etme

Android Auto'da olduğu gibi Android Automotive OS, uygulamanızı çalıştırmak için CarAppService uygulamanızı kullanır. CarAppService uygulamanızın uygulanması ve beyan edilmesiyle ilgili talimatlar için CarAppService ve Oturumunuzu oluşturma ve CarAppService hizmetinizi beyan etme konularına bakın.

Android Auto'nun aksine, Android Automotive OS uygulamanız için giriş noktası olarak kullanılacak ek bir uygulama bileşeni (CarAppActivity) eklemeniz gerekir. Bu etkinliğin uygulanması androidx.car.app:app-automotive yapısına dahildir ve uygulamanızın kullanıcı arayüzünü oluşturmak için şablon barındırma uygulamasıyla iletişim kurmaktan sorumludur. Manifest'inizde bu etkinliğin yalnızca bir örneği olmalı ve bu etkinlik aşağıdaki gibi 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ındaki CarAppActivity sınıfının tam nitelikli sınıf adına ayarlandı.
  • Etkinliğin kendi dışındaki bir uygulama (yani başlatıcı) tarafından başlatılabilmesi gerektiğinden android:exported true olarak ayarlandı.
  • android:launchMode, singleTask olarak ayarlandı. Böylece kullanıcı, sayfadan ayrılırsa başlatıcıdan aynı etkinlik örneğine dönebilir.
  • android:theme, uygulamanın mevcut tam ekran alanını kaplaması için @android:style/Theme.DeviceDefault.NoActionBar olarak ayarlandı.
  • Amaç filtresi, bunun uygulama için başlatıcı etkinliği olduğunu belirtir.
  • İşletim sistemine, araç hareket halindeyken olduğu gibi kullanıcı deneyimi kısıtlamaları mevcutken uygulamanın kullanılabileceğini belirten bir <meta-data> öğesi vardır.

Gezinme uygulamaları için aşağıdaki snippet'te gösterildiği gibi CarAppActivity için gerekli birkaç 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_MAPS kategorisi, uygulamanın kullanıcının konumunu gösterebildiğini sisteme bildirir.
  • androidx.car.app.action.NAVIGATE intent filtresi, kullanıcıların başka bir araba uygulamasından dolaylı navigasyon amacını ele alırken uygulamanızı kullanma seçeneğine sahip olmasını sağlar.

Dikkat Edilecek Diğer Noktalar

Android Automotive OS uygulamanızı geliştirirken aşağıdaki diğer noktaları aklınızda bulundurun:

Paket adları

Android Automotive OS için ayrı bir Android Package Kit (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 genel 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ına sahip olmak ve her ekibin kendi Play Store girişini yönetmesine izin vermek mantıklı olabilir. Her iki yaklaşımın da kullanılması için gereken teknik çalışma 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ı önemli farklılıklar özetlenmektedir:

Öne Çıkarın Aynı paket adı Yeni paket adı
Mağaza girişi Tek Birden fazla
Yansıtılmış yükleme Evet: kurulum sihirbazı sırasında uygulamayı hızlı yeniden yükleme Hayır
Play Store İnceleme süreci İncelemeleri engelleme: İnceleme bir APK için başarısız olursa aynı sürümde gönderilen diğer APK'lar engellenir Bireysel yorumlar
İstatistikler, metrikler ve hayati değerler Birleşik: Otomobillere özel veriler için cihaz adına göre filtreleme yapabilirsiniz. Ayır
Dizine ekleme ve arama sıralaması Mevcut durumunu geliştirin Devretme yok
Diğer uygulamalarla entegrasyon Medya kodunun iki APK arasında paylaşıldığı varsayıldığında, büyük olasılıkla değişiklik yapılmasına gerek yoktur İlgili uygulamanın güncellenmesi gerekebilir. Örneğin, Google Asistan'la URI çalması için

Çevrimdışı içerik

Mümkünse uygulamanızda çevrimdışı desteği uygulayın. Android Automotive OS yüklü arabaların kendi veri bağlantısının olması beklenir. Diğer bir deyişle, veri planı araç maliyetine dahil edilir veya kullanıcı tarafından ödenir. Bununla birlikte, arabaların mobil cihazlardan daha değişken bağlantıya sahip olması da beklenir.

Çevrimdışı destek stratejinizi belirlerken şunları göz önünde bulundurun:

  • İçerik indirmek için en iyi zaman uygulamanızın kullanıldığı zamandır.
  • Kablosuz bağlantı olduğunu varsaymayın. Bir araba hiçbir zaman kablosuz kapsama alanına giremeyebilir veya Özgün Donanım Üreticisi (OEM), kablosuz bağlantıyı devre dışı bırakarak hücresel ağ kullanmaya başlamış olabilir.
  • Kullanıcıların kullanmasını beklediğiniz içeriği akıllı bir şekilde önbelleğe almakta bir sakınca olmamakla birlikte, kullanıcının bu davranışı değiştirmesine izin vermenizi öneririz.
  • Arabalardaki disk alanı değişiklik gösterdiğinden, kullanıcılara çevrimdışı içeriği silebilecekleri bir yol sunun.

Sık sorulan sorular

Android Automotive OS hakkında sık sorulan bazı soruların yanıtları için aşağıdaki bölümlere bakın.

Üçüncü taraf SDK'larının ve kitaplıklarının kullanımına ilişkin 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 bir yönerge yoktur. Üçüncü taraf SDK'ları ve kitaplıkları kullanmayı tercih etseniz de araba uygulaması kalitesiyle ilgili tüm şartlara uymakla yükümlüsünüz.

Android Automotive OS uygulamamı Google Play Console'u kullanarak nasıl yayınlayabilirim?

Uygulama yayınlama işlemi, telefon uygulaması yayınlamaya benzer ancak farklı bir form faktörü kullanırsınız. Uygulamanızda Android Automotive OS sürüm türünü kullanmak üzere kaydolmak için aşağıdaki adımları uygulayın:

  1. Play Console'u açın.
  2. Uygulamanızı seçin.
  3. Soldaki menüden Sürüm > Kurulum > Gelişmiş ayarlar > Form faktörleri'ni seçin.
  4. Form faktörü ekle > Android Automotive OS'i seçin ve Play Console'daki talimatları uygulayın.

Sorun giderme

Android Automotive OS'te sık karşılaşılan bazı sorun giderme senaryolarıyla ilgili yardım almak için aşağıdaki bilgilere bakın.

  • Araba Uygulama Kitaplığı uygulamasını sistem ayarlarından kaldırdıktan sonra bile yeni bir sürümü yüklemeye çalışırken hata mesajı alıyorum.

    Uygulamanın kaldırıldığından emin olmak için adb uninstall app.package.name komutunu kullanın.