Android Automotive OS, sürüş sırasında kullanım için geliştirilen uygulamaları desteklemenin yanı sıra park hâlindeyken tarayıcılar, oyunlar ve video uygulamalarını da destekler. Sadece birkaç küçük değişiklik yaparak diğer büyük ekranlı cihazlara yaptığınız gibi aynı uygulamayı arabalara da gönderebilirsiniz.
Mevcut uygulamanızı Android Automotive OS emülatöründe test edin
Android Automotive OS uygulamanızı derlemeye başlamak için önce mevcut uygulamanızı bir Android Automotive OS emülatöründe test edin. Emülatör kurmak için Android Automotive OS emülatörünü kullanarak test etme bölümündeki adımları uygulayın. Ardından Uygulamanızı emülatörde çalıştırma bölümündeki talimatları uygulayarak uygulamayı çalıştırabilirsiniz.
Uygulamanızı çalıştırırken aşağıdakiler gibi uyumluluk sorunlarına dikkat edin:
- Bilgi-eğlence sistemi ekranlarının yönleri sabittir. Araba uygulaması kalite yönergelerine uymak için uygulamaların hem dikey hem de yatay yönleri desteklemesi gerekir.
- Diğer cihazlarda kullanılabilen API'ler Android Automotive OS'te kullanılamayabilir. Örneğin, bazı Google Play Hizmetleri API'leri Android Automotive OS'te kullanılamaz. Bu sorunların nasıl ele alınacağına ilişkin ayrıntılar için Özellikleri devre dışı bırakma bölümüne bakın.
Uygulamanızın manifest dosyalarını yapılandırma
Android Automotive OS'i hedeflemek için uygulamanızda belirli manifest girişlerinin olması gerekir. Bunlarla birlikte, Android Automotive OS'i hedefleyen uygulamalar ayrı bir Automotive OS sürüm türü kullanılarak Play Store'a gönderilir. Bu cihazlar, arabada güvenle kullanılabildiğinden emin olmak için manuel inceleme sürecine tabi tutulur. Daha fazla ayrıntı için Arabalar için Android uygulamalarını dağıtma bölümüne bakın.
Gerekli Android Automotive OS özellikleri
Android Automotive OS için geliştirilen uygulamaların arabalarda Play Store'da listelenmesi için AndroidManifest.xml
dosyasında aşağıdaki <uses-feature>
öğesini içermesi gerekir:
<manifest ...>
...
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
...
</manifest>
Otomotiv olmayan kanallara gönderilen uygulamalar, arabaya özgü donanıma bağlı olamayacağı için önceki kod örneğinde gösterilen <uses-feature>
öğesini bildiremez. Dolayısıyla, aynı uygulamayı hem otomotiv hem de otomotiv harici cihazlar için göndermek isterseniz biri otomotiv cihazları, diğeri de mobil cihazlar için olmak üzere uygulamanızın en az iki çeşidini oluşturmanız gerekir. Bu farklı aromaları nasıl oluşturacağınız hakkında daha fazla bilgi için aşağıdaki belgelere bakın:
Uygulamanın iki sürümü aynı paket adını paylaşabilir, ancak Play Store kanallarına ayrı olarak yüklendikleri için farklı sürüm kodlarına sahip olmaları gerekir.
Alternatif olarak, mobil ve otomotiv APK'larınız veya App Bundle'larınız için ayrı türler kullanmak yerine farklı paket adları kullanabilirsiniz. Her bir yaklaşımın artılarını anlamak için medya uygulaması geliştirici kılavuzundaki Paket adları bölümüne bakın.
Android Automotive OS için oluşturulan uygulamaların, önceki kod örneğinde gösterilen öğeye ek olarak kök <manifest>
öğesinde aşağıdaki <uses-feature>
öğelerini içermesi gerekir:
<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"/>
Bu özelliklerin açıkça gerekli değil olarak ayarlanması, Android Automotive OS cihazlardaki mevcut donanım özellikleriyle uygulamanızın çakışmamasını sağlar.
Dikkat dağıtıcı öğeler için optimize edilmiş etkinlikler bulunmadığından emin olun.
Uygulamanızın yalnızca park hâlindeyken kullanılabildiğinden emin olmak için manifestinizdeki hiçbir <activity>
öğesine aşağıdaki <meta-data>
öğesini eklemeyin:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Bu meta veriler olmadan, araba sürüş moduna geçtiğinde uygulamanızın etkinlikleri işletim sistemi tarafından otomatik olarak engellenir. Böylece, sürücünün dikkatini dağıtan unsurlar azaltılır. Bu işlem, onPause
yaşam döngüsü geri araması olarak gerçekleşir. Bu sırada uygulamanızdan hem video hem de ses oynatmayı duraklatmanız gerekir.
Kategoriye özel manifest girişleri
Tüm park edilmiş uygulamalar için geçerli olan önceki şartlara ek olarak, video ve oyun kategorilerinin ek şartları vardır:
- Video uygulamaları için Uygulamanızı video uygulaması olarak işaretleme bölümüne bakın.
- Oyunlar için Uygulamanızı oyun olarak işaretleme bölümüne bakın.
Uygulamanızı Android Automotive OS için optimize edin
Kullanıcılarınıza mümkün olan en iyi deneyimi sunmak amacıyla, Android Automotive OS için uygulama geliştirirken aşağıdakileri göz önünde bulundurun.
Büyük ekranlar için optimize etme
Android Automotive OS araçlarda bulunan ekranlar, tabletlere ve katlanabilir cihazlara göre boyut, çözünürlük ve en boy oranı açısından telefonlara kıyasla daha benzerdir. Bu nedenle, uygulamanızı büyük ekranlar için optimize etmek arabalardaki kullanıcılarınız için de faydalıdır.
Büyük ekran boyutlarından en iyi şekilde yararlanmayla ilgili ayrıntılar için özellikle, Farklı ekran boyutlarını destekleme ve Kullanıcı arayüzünü duyarlı düzenlere taşıma kılavuzlarına ve tasarım ilhamı ve rehberliği için medya ve oyunlar galerilerine bakın.
Giriş uyumluluğu gibi diğer büyük ekran optimizasyonları, Android Automotive OS için doğrudan faydalı değildir ancak yine de kullanıcı deneyimini iyileştirebilir. Örneğin, klavyeyle gezinme dönen gezinme ile aynı API'leri kullandığından burada yapılan optimizasyonlar her iki form faktörüne de fayda sağlayabilir.
Pencere içleri ve ekran kesimleriyle çalışın
Diğer form faktörlerinde olduğu gibi Android Automotive OS de durum ve gezinme çubukları gibi sistem kullanıcı arayüzü öğeleri ve dikdörtgen olmayan ekranlar desteği içerir.
Varsayılan olarak uygulamalar, sistem çubukları veya ekran kesimleriyle çakışmayan bir alan çizer. Ancak, uygulamanızın uygulamanızı pencere içlerinde gösterme bölümünde açıklandığı gibi sistem çubuklarını gizlemesini, arkalarına içerik çizmesini veya içeriği ekran kesiminde göstermesini isteyebilirsiniz. Uygulamanız bunlardan herhangi birini yapıyorsa uygulamanızın Android Automotive OS cihaz ekosisteminde iyi çalışmasını sağlamayla ilgili ayrıntılar için aşağıdaki alt bölümlere bakın.
Sistem çubukları, yoğun içerik modu ve uçtan uca oluşturma
Arabalardaki sistem çubukları, diğer form faktörlerinden farklı şekilde boyutlandırılabilir ve konumlandırılabilir. Örneğin, gezinme çubukları ekranın soluna, sağına veya altına yerleştirilebilir. Üst tarafta bir durum çubuğu ve alt tarafta bir gezinme çubuğu olsa bile (çoğu telefon ve tablette olduğu gibi) bu öğelerin boyutu arabalarda büyük olasılıkla çok daha büyük olacaktır.
Ayrıca Android Automotive OS, OEM'lerin uygulamaların etkili moda girmek ve yoğun moddan çıkmak için sistem çubuklarını gösterip göstermeyeceğini kontrol etmesine de olanak tanır. Örneğin, OEM'ler uygulamaların sistem çubuklarını gizlemesini engelleyerek iklim kontrolleri gibi araç kontrollerinin her zaman ekranda erişilebilir olmasını sağlayabilir. Bir OEM, uygulamaların sistem çubuklarını kontrol etmesini engellemişse uygulama, sistem çubuklarını göstermek veya gizlemek için WindowInsetsController
(veya WindowInsetsControllerCompat
) API'lerini çağırdığında hiçbir şey olmaz. Uygulamanızın ekleri değiştirip değiştiremediğini nasıl tespit edeceğiniz hakkında daha fazla bilgi edinmek için show
ve hide
belgelerine bakın.
Benzer şekilde, OEM'ler de uygulamaların sistem çubuklarının rengini ve şeffaflığını ayarlayıp ayarlayamayacağını kontrol edebilir. Böylece, çubukların ve içlerindeki öğelerin her zaman net bir şekilde görülebilmesini sağlayabilirsiniz. Uygulamanız uçtan uca çizim yapıyorsa sistem çubuklarının arkasına yalnızca kritik olmayan içeriğin çizildiğinden emin olun. Cihazın OEM'si, çubukların rengini veya saydamlığını ayarlamayı engellerse bu içerik görünmeyebilir.
<!-- Depending on OEM configuration, these style declarations
(and the corresponding runtime calls) may be ignored -->
<style name="...">
<item name="android:statusBarColor">...</item>
<item name="android:navigationBarColor">...</item>
<item name="android:windowTranslucentStatus">...</item>
<item name="android:windowTranslucentNavigation">...</status>
</style>
Uygulamanız uçtan uca giderse sistem çubuklarının boyutu, sayısı, türü veya konumu hakkında varsayımlarda bulunmayın. Bunun yerine, uygulamanızın içeriğini sistem çubuklarına göre düzenlemek için pencere iç içe aktarma API'lerini kullanın. Bu API'lerin nasıl kullanılacağıyla ilgili daha fazla ayrıntı için Uygulamanızda içeriği uçtan uca görüntüleme bölümüne bakın. Hiçbir zaman önerilmediğinde, içeriği büyük olasılıkla arabalarda göstermeyecek diğer cihazların güvenli alanda tutabilecek sabit kodlanmış dolgu değerleri.
Düzensiz şekilli ekranlara uyum sağlar
Dikdörtgen ekranlara ek olarak, bazı araçların ekranları Şekil 1'de gösterildiği gibi düzensiz şekilli ekranlara sahip olabilir:
![Android Automotive OS cihaz şemasında sağ tarafta kavisli bir ekran bulunur.](https://developer.android.com/static/images/training/cars/aaos-curved.png?authuser=5&hl=tr)
Uygulamanız uçtan uca oluşturmuyorsa güvenli alanda oluşturulması için herhangi bir işlem yapmanız gerekmez.
Uygulamanız uçtan uca oluşturuluyorsa ekran kesimlerine göre nasıl davranmasını istediğinizi seçebilirsiniz. Uygulamanızın teması için android:windowLayoutInDisplayCutoutMode
özelliğini ayarlayarak kaynakları kullanarak veya çalışma zamanında pencerenin layoutInDisplayCutoutMode
özelliğini değiştirerek bunu gerçekleştirebilirsiniz.
Android Automotive OS cihazlarda bulunan ekran kesimi türleri mobil cihazlardakilerden farklı olduğu için mobil cihazlardaki kesimler için optimize edilmiş davranışa sahip LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
veya LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
kullanmayın. Bunun yerine, kesmeden her zaman kaçınmak veya kesmeyi her zaman girmek için LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
veya LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
kullanın. İkincisini seçerken ekran kesimleriyle ilgili API'ler hakkında daha fazla bilgi için Ekran kesimlerini destekleme bölümüne bakın.
Uygulamanız, ekran kesimi alanında oluşturulduysa ve Android Automotive OS ile mobil arasında farklı bir davranışa sahip olmak istiyorsanız uygulamanız çalışma zamanında bu davranışı ayarlıyorsa Özellikleri devre dışı bırakma ve uygulamanız bu davranışı kaynak dosyaları kullanarak ayarlıyorsa Alternatif kaynaklar kullan konularına bakın.
Özellikleri devre dışı bırak
Mevcut bir mobil uygulamayı Android Automotive OS'te kullanıma sunuyorsanız belirli özellikler ve işlevler alakalı veya kullanılamıyor olabilir. Örneğin, arabalar genellikle kameralara erişim sağlamaz. Ayrıca, Android Automotive OS'te Google Play hizmetlerinin yalnızca bir alt kümesi kullanılabilir. Daha fazla bilgi için Arabalar için Google Play Hizmetleri bölümüne bakın.
Aşağıdaki örnekte gösterildiği gibi FEATURE_AUTOMOTIVE
özelliğini kontrol ederek uygulamanın Android Automotive OS'te çalışıp çalışmadığını tespit etmek için PackageManager.hasSystemFeature
API'sini kullanabilirsiniz:
Kotlin
val packageManager: PackageManager = ... // Get a PackageManager from a Context val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
Java
PackageManager packageManager = ... // Get a PackageManager from a Context boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
Alternatif olarak, uygulamanızın bir Android Auto bileşeni de varsa Arabalar için Android Uygulama Kitaplığı'ndaki CarConnection API'sini kullanarak uygulamanın Android Automotive OS mi yoksa Android Auto mı çalıştığını veya bir arabaya bağlı olup olmadığını tespit edebilirsiniz.
Pencere İçinde Pencere (PiP) için, özelliğin kullanılabilir olup olmadığını kontrol etmek ve uygun şekilde tepki vermek amacıyla kabul edilen en iyi uygulamaları uygulayın.
Çevrimdışı senaryoları yönetme
Araçlar giderek daha fazla internete bağlı hale gelirken uygulamaların, aşağıdaki gibi internet bağlantısı olmadan da çalışabilmesi önerilir:
- Kullanıcılar, otomobil üreticisinin bir abonelik paketinin parçası olarak sunulan mobil veri kullanımını devre dışı bırakabilir.
- Belirli bölgelerde mobil veriye erişim sınırlı olabilir.
- Kablosuz radyosu olan arabalar kablosuz menzilinin dışında olabilir veya OEM, kablosuz ağı kapatıp mobil ağı tercih edebilir.
Çevrimdışı içerik sunma gibi yöntemlerle, internet erişimine bağlı işlevleri incelikle azaltarak uygulamanızda bu tür durumların üstesinden gelmeye hazır olun. Daha fazla bilgi için ağ iletişimi optimize etmek için en iyi uygulamalar bölümüne bakın.
Alternatif kaynaklar kullanma
Uygulamanızı bir Android Automotive OS aracında çalışırken alternatif kaynaklar sağlamak için car
kaynak niteleyiciyi kullanabilirsiniz. Örneğin, dolgu değerlerini depolamak için Boyut kaynakları kullanıyorsanız dokunma hedeflerini büyütmek amacıyla car
kaynak grubu için daha büyük bir değer kullanabilirsiniz.
Uygulamanızı dağıtma
Uygulamanızı kategorisi için araba uygulaması kalite yönergelerine göre test edip kategorisinde gerekli değişiklikleri yaparak bir Android Automotive OS derlemesi yaptıktan sonra Play Store'daki Automotive OS form faktörü kanallarında yayınlayabilirsiniz. Yayınlama işlemi hakkında daha fazla bilgi için Arabalar için Android uygulamalarını dağıtma bölümüne bakın.
Park edilmiş uygulamalarla ilgili geri bildirimde bulunma
Park edilmiş uygulamanızı Android Automotive OS için geliştirirken bir sorunla karşılaşırsanız veya özellik isteğinde bulunursanız Google Issue Tracker'ı kullanarak bunu bildirebilirsiniz. Sorun şablonuna istenen tüm bilgileri girdiğinizden emin olun. Yeni bir sorun oluşturmadan önce, bu sorunun sorunlar listesinde önceden bildirilip bildirilmediğini kontrol edin. İzleyicideki bir sorun için yıldızı tıklayarak sayılara abone olabilir ve oy verebilirsiniz. Daha fazla bilgi için Bir Soruna Abone Olma bölümüne bakın.