Android 14'te yeni uzaktan erişim özelliği kullanıma sunuluyor. Bu özellik, iş ortaklarının bir araçta Android'i uzaktan uyandırmasına üzerine konuşacağız. Örneğin, Yazılım uygulamak için gece boyunca garaj modu güncellemelerine göz atın. Uçtan uca için Android'e ait olmayan birden fazla bileşen gerekiyor. iş akışını takip edin. Android, Android dışı cihazlar için uygulama tanımlamaz veya uygulama sağlamaz (bu sorumluluk size aittir).
Daha fazla bilgi edinmek için aşağıdaki bölümleri inceleyin:
İş akışı. Örnekteki birden çok bileşen arasındaki iş akışı ve görevlerin teslimi için kullanılan mimaridir.
Uzak görev istemcisi yazma Uzaktan erişimi kullan ve uzaktan görev istemcisi yazmayı öğreneceksiniz.
Tedarikçi firma uygulaması. Şuradaki tedarikçi bileşenleri: uzaktan erişimi desteklemek için örnek mimari.
Fabrika ayarlarına sıfırlama ve sahiplik aktarımı. Nasıl kullanacağınızı öğrenin ve araç sahipliğini aktarmalısınız.
Uzaktan erişim istemcisini test edin. Uzaktan erişimi nasıl test edeceğinizi öğrenin özelliğini kullanabilirsiniz.
Mimari
Aşağıdaki içerikte aşağıdaki örnek mimarinin kullanıldığı varsayılmaktadır: varsayıma dayalıdır ve gerçek mimariyi yansıtmayabilir. OEM'ler uyum sağlamalı araç ve sunucu mimarilerinde gerçek bir uygulamaya geçtik.
Şekil 1. Örnek mimari.
Örnek mimari şu donanım bileşenlerinden oluşur:
Donanım bileşeni | Açıklama |
---|---|
Uygulama işlemcisi | Android çalıştıran işlemci. Android, sanal bellekte (VM) çalışabilir (gerçek donanımda değil). |
Araç işlemcisi | Uygulamanın gücünü kontrol etmekten sorumlu işlemci işlemci. |
Telematik kontrol birimi (TCU) | Araçtaki işlemci her zaman şu kişilerden uzaktan mesaj alabiliyor: sahip olacaksınız. TCU'nun her zaman açık veya düşük güç modunda olduğu varsayılır. Tekliflerinizi otomatikleştirmek ve optimize etmek için uzaktan mesajları takip eder. |
Uyandırma sunucusu | Bulutta çalışan ve araçtaki TCU ile iletişim kurarak uyandırma komutları verebilir. |
Uzak görev sunucusu | Uzak görev sunucusu bulutta çalışır ve insanlar ile uzaktan görevleri yönetiyor. |
Örnek mimari şu yazılım bileşenlerinden oluşur: Android'de çalışan:
Android üzerinde yazılım bileşeni | Açıklama |
---|---|
Araba Hizmeti | Uzaktan erişim API'leri sağlayan AAOS çerçeve hizmeti. |
Uzaktan görev istemcisi | Tedarikçi tarafından yazılmış
Service
uzaktan görevler yürüten bir sınıftır. Bir Android sistemi birden fazla çalışabilir
uzaktan görev istemcileri. |
Uzaktan erişim HAL'si | Uzaktan erişim için uygulanmalıdır. . AAOS ile Android dışı bir cihaz arasındaki iletişim için soyutlama katmanı temel bir bileşendir. |
Android olmayan yazılım bileşenleri aşağıda açıklanmıştır:
Android dışı yazılım bileşeni | Açıklama |
---|---|
İstemciyi uyandır | uyandırma sunucusu. Ayrıca, Uzaktan Erişim HAL ile uzaktaki görevleri Araba Hizmeti'ne teslim etmek için kullanılır. |
Uyandırma sunucusu uygulaması | TCU'da çalışan uyandırma istemcisiyle iletişim kuran sunucu. Teneke Kutu uyandırma istemcisine uyandırma istekleri gönderir. |
Uzak görev sunucusu uygulaması | Uzak görevleri yöneten sunucu. Kullanıcılar şu işlemler için bu sunucuyla etkileşimde bulunur: gözden geçirebilir ve uzaktan görevleri izleyebilirsiniz. |
İş akışı
Bu bölümde, örnek bir iş akışındaki adımlar listelenmiştir.
Örnek iş akışı
Aşağıdakine benzeyen ayrıntılı bir iş akışı görünebilir:
Kullanıcı aracı garaja park eder.
İş ortağı, araçla etkileşimde bulunduğunda aracı bir gecede güncellemeye çalışıyor pek olası değildir.
İş ortağı bulut sunucusu, araca sistem uzaktan görevi gönderir. Daha net bir ifadeyle, telematik kontrol birimi (TCU).
Aracın TCU'su, Android elektronik kontrol birimini (ECU) uyandırarak Garaj modunu tetikleyen bir OEM hizmeti var.
Android, Google Play aracılığıyla güncellemeleri indirip yüklemek için Garaj modunu çalıştırır.
Güncellemeyi uyguladıktan sonra Android, görevi tamamlandı olarak işaretler ve veya belirtilen bir zaman aşımına uğrar.
Ayrıntılı iş akışı
Uzaktan erişim için atmanız gereken iki önemli adım vardır. Birincisi, İstemciyi kaydedin. Bu, belirli bir kullanıcıyı belirli bir uzaktan kumandaya görev istemcisinin özelliğini içerir. Diğeri ise bir görev teslim etmektir. belirli bir kullanıcı için uzak görevi belirli bir uzak göreve teslim etmektir çalışan bir müşteri olabilir.
Müşteri kaydedin
Uzaktan erişim özelliğini kullanmak için kullanıcının uzak görev istemcisini açması gerekir uygulamayı en az bir kez uygulamanız ve müşteri kayıt işlemini tamamlamanız gerekir (kalın metin AAOS tarafından uygulanan görevleri gösterir):
Araba servisi, başlatma sırasında uzaktan erişimden araç bilgilerini alır HAL.
Araba servisi, başlatma sırasında tüm uzaktan görev istemcilerini intent filtresine ve izne sahip.
Uzaktan görev istemcisi başlatıldığında, uzak görev istemcisi kendini Otomobil Servisi.
Araba hizmeti, uzak görev istemcisini kayıt konusunda bilgilendirir araç kimliği ve istemci kimliği gibi bilgiler için de geçerlidir. İstemci kimliği benzersiz ve bu istemciye Araba Hizmeti tarafından atandı. Benzersiz olması garanti edilir aynı araçta çalışan tüm uzaktan görev müşterileri arasında.
Kullanıcı, uzak görev istemcisi aracılığıyla uzak görev sunucusuna giriş yapar ve bu araç için uzaktan erişim özelliğini etkinleştirir. Bu adım genellikle Uzak görev sunucusu üzerinden kimlik doğrulamayı içerir.
Uzak görev istemcisi, kullanıcının bilgilerini araç kimliğiyle birlikte yükler ve istemci kimliğini uzak görev sunucusuna bağlar ve kullanıcıdan, bu aracı kullanabilirsiniz.
İsteğe bağlı olarak, bu adım ek iki faktörlü kimlik doğrulama içerebilir. söz konusu olabilir.
Uzak görev sunucusu, İstek, gönderenin araç kimliğiyle eşleşiyor. Bunu şu adreslerden yapabilirsiniz: gerekir.
Fabrika ayarlarına sıfırlama işlemi yapılmadıkça istemci kayıt işlemi gereklidir Kullanıcı başına araç başına bir defa. İstemci kimliği, Araba Hizmeti'nde yerel olarak depolanır ve aynı müşteri için aynı kalır.
Şekil 2. İstemci kaydedin.
İstemci kaydını iptal etme
Kullanıcılar, araçtan veya araçtan aracın bağlantısını kaldırabilir. uzak görev sunucusu:
Kullanıcılar araçta, uzaktan görev istemci uygulamasını açıp bu aracın daha önce bağlandığı kullanıcıyla olan bağlantısını kaldırmak için bağlantı kaldırma isteği hesaplar.
Uzaktan görev sunucusunda, kullanıcılar hesaplarına giriş yapabilir ve bu hesaptan daha önce bağlanmış bir araç.
Kullanıcı, aracın bağlantısını kendi hesabıyla kaldırırsa uzak görev sunucusu, Belirli bir kullanıcıya ait depolanan eşlemeyi kaldırın.
Görevleri teslim etme
Bulutta:
Kullanıcı, uzak görev sunucusunu kullanarak belirli bir kullanıcıya uzak görev kullanabilirsiniz.
Uzak görev sunucusu, kullanıcı kimliğini araç kimliği ve istemci kimliğiyle eşleştirir. Google görev verilerini, araç kimliğini ve istemci kimliğini uyandırma sunucusuna gönderir.
Uyandırma sunucusu, araç kimliği için belirli TCU'yu bulur ( TCU kaydı zaten yapıldı) ve görev verilerini ve istemci kimliğini teslim edilir.
Araçta (kalın metin, AAOS tarafından gerçekleştirilen görevleri belirtir):
TCU, uzak sunucudan uzak görevler alır.
AAOS çalıştıran uygulama işlemcisi (AP) kapalıysa TCU, araç işlemcisi (VP),
Car Service, TCU'dan görev alır.
Araba Hizmeti, görevleri ilgili uzaktan görev istemcisine dağıtır.
Uzak görev istemcisi görevi alır ve yürütür.
(İsteğe bağlı) Uzak görev istemcisi daha fazla görev ayrıntısı için görev sunucusuyla iletişime geçer ve görevi yürütür.
(İsteğe bağlı) Uzak görev istemcisi hizmeti, görev sonucunu görev sunucusuna bildirir.
Uzak görev istemcisi, görev tamamlandığında Araba Hizmeti'ni bilgilendirir.
Gerekirse Araba Hizmeti, aracın güç durumunu geri yükler.
Şekil 3. Görevleri teslim etme.
Uzak görev istemcisi yazma
CarRemoteAccessManager
, uzaktan erişim özellikleri için API sağlar. Öğrenmek için
daha fazla bilgi için
CarRemoteAccessManager aracılığıyla).
Uzak görev istemcisi, uzaktan görevleri yürüten ve
CarRemoteAccessManager
Bu, PERMISSION_USE_REMOTE_ACCESS
ve
PERMISSION_CONTROL_REMOTE_ACCESS
ve şunun için bir intent filtresi beyan etmelidir:
RemoteTaskClientService
, örneğin:
<service android:name=".remoteaccess.RemoteTaskClientService"
android:directBootAware="true"
android:exported="true">
<intent-filter>
<action android:name="android.car.remoteaccess.RemoteTaskClientService" />
</intent-filter>
</service>
Aşağıdaki oluşturma işlemi sırasında uzak görev istemcisi kendisini Araba Hizmeti'ne kaydetmelidir:
public final class RemoteTaskClientService extends Service {
@Override
public void onCreate() {
// mCar = Car.createCar()...
mRemoteAccessManager = (CarRemoteAccessManager)
mcar.getCarManager(Car.CAR_REMOTE_ACCESS_SERVICE);
if (mRemoteAccessManager == null) {
// Remote access feature is not supported.
return;
}
mRemoteAccessManager.setRemoteTaskClient(executor, mRemoteTaskClient);
}
}
Null değeri döndürmek için onBind işlevini geçersiz kılmalıdır.
@Override
public IBinder onBind(Intent intent) {
return null;
}
Araba Hizmeti, yaşam döngüsünü yönetir. Araba Hizmeti, şu tarihlerde bu hizmete bağlanır: uzak bir görev geldiği için çok önemlidir. Araba Hizmeti, şu durumlarda bu hizmetle olan bağlantısını kaldırır: görev tamamlandı. Daha fazla bilgi edinmek için bkz. Bir hizmetin yaşam döngüsünü yönetme.
Uzak görev istemcisi sistem kullanıcısı olarak çalıştığı için erişimi yoktur. verileri de kapsar.
Aşağıdaki örnekte, kayıtlı geri aramaların nasıl işleneceği gösterilmektedir:
private final class RemoteTaskClient
implements CarRemoteAccessManager.RemoteTaskClientCallback {
@Override
public void onRegistrationUpdated(
RemoteTaskClientRegistrationInfo info) {
// Register to remote task server using info.
}
@Override
public void onRemoteTaskRequested(String taskId,
byte[] data, int remainingTimeSec) {
// Parses the data and execute the task.
// Report task result to remote task server.
mRemoteAccessManager.reportRemoteTaskDone(taskId);
}
@Override
public void onShutdownStarting(CompleteableRemoteTaskFuture future) {
// Stop the executing task.
// Clear the pending task queue.
future.complete();
}
}
Tedarikçi uygulaması
Uzaktan erişim özelliği isteğe bağlıdır ve varsayılan olarak devre dışıdır. aşağıdaki gibi bir RRO ekleyin:
// res/xml/overlays.xml
<?xml version="1.0" encoding="utf-8"?>
<overlay>
<item target="array/config_allowed_optional_car_features" value="@array/config_allowed_optional_car_features" />
</overlay>
// res/values/config.xml
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string-array translatable="false" name="config_allowed_optional_car_features">
<item>car_remote_access_service</item>
</string-array>
</resources>
// Android.bp
runtime_resource_overlay {
name: "RemoteAccessOverlay",
resource_dirs: ["res"],
manifest: "AndroidManifest.xml",
sdk_version: "current",
product_specific: true
}
İsterseniz bir userdebug/eng derlemesinde aşağıdaki adb komutunu da kullanabilirsiniz:
adb shell cmd car_service enable-feature car_remote_access_service
Android'le ilgili gereksinimler
Uzaktan erişim HAL'si
Uzaktan erişim donanım soyutlama katmanı (HAL), tedarikçinin AAOS ile başka bir ECU arasındaki iletişim için soyutlama katmanı (örneğin, TCU). Uzaktan erişim özelliğinin desteklenmesi için zorunludur. Gerekli değil uzaktan erişim özelliği uygulanmadığında uygulanır.
Arayüz şurada tanımlanmıştır: IRemoteAccess.aidl şunları içerir:
Sınıf | Açıklama |
---|---|
String getVehicleId() |
Uyandırma tarafından tanınabilecek benzersiz bir araç kimliği alır sunucu. |
String getWakeupServiceName() |
Uzaktan uyandırma sunucusunun adını alır. |
String getProcessorId() |
gerekir. |
void setRemoteTaskCallback(IRemoteTaskCallback callback)
Uzak bir görev istendiğinde çağrılacak bir geri çağırma ayarlar. |
|
void clearRemoteTaskCallback() |
Önceden ayarlanmış bir uzak görev geri çağırmasını temizler. |
void notifyApStateChange(in ApState state)
Uygulama işlemcisinin uzaktan görevleri almaya hazır olup olmadığını algılar. |
Geri çağırma arayüzü,
IRemoteTaskCallback.aid
Sınıf | Açıklama |
---|---|
oneway void onRemoteTaskRequested(String clientId, in byte[] data)
Uzak bir görev istendiğinde çağrılan bir geri çağırma. |
Bkz.
referans uygulama
bunu da kullanabilirsiniz. Uygulamada, uzun canlı okuma akışı şu amaçlarla kullanılır:
uzak görevleri al ve aşağıdaki debug
komutunu destekler:
dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default
Araç HAL'si
VHAL, uzaktan erişim özelliğini desteklemek için şu özellikleri desteklemelidir:
Sınıf | Açıklama |
---|---|
SHUTDOWN_REQUEST |
Ana birimin kapatılmasını ister. |
VEHICLE_IN_USE |
|
Daha fazla bilgi edinmek için bkz. Desteklenen Sistem Özellikleri.
Sessiz mod
Aracın uzaktan erişim özelliğinin kullanıcı yokken uzaktan görevler gerçekleştirmek için sessiz modda başlatılabilir. Entegre AAOS cihaz, ekran ve ses kapalıyken açılır.
Sessiz mod, iki Linux çekirdeği sysfs
dosyasıyla kontrol edilir.
Sınıf | Açıklama |
---|---|
/sys/kernel/silent_boot/pm_silentmode_kernel_state
Mevcut sessiz modu temsil eder. |
|
/sys/kernel/silent_boot/pm_silentmode_hw_state
Yeni bir sessiz mod ayarlamak için donanım sinyalini gösterir. |
Araç işlemcisi, Sessiz özelliğini açmak/kapatmak için Android SoC'ye bir donanım yazılımı sinyali gönderir.
yatırım yapmanız önemlidir. Sinyal (0 veya 1)
/sys/kernel/silent_boot/pm_silentmode_hw_state
Ardından AAOS çerçevesi güncellemeleri
Buna göre /sys/kernel/silent_boot/pm_silentmode_kernel_state
geçerli Sessiz modu temsil eder. AAOS modülü kontrolleri
Sistemin mevcut olup olmadığını öğrenmek için /sys/kernel/silent_boot/pm_silentmode_kernel_state
sessiz modda olup olmadığını kontrol edin.
Uzak görev alındığında ve AAOS başlatıldığında araç işlemcisi Sessiz mod ve AAOS'yi başlatır. Böylece sistem, ekran/ses kapalı olarak başlatılır.
Araç üzerinde Android dışı bileşenler
Araç işlemcisi
Araç işlemcisi, araçtaki gücü kontrol edebilen bir işlemcidir. Android çalıştıran uygulama işlemcisi olarak kullanabilirsiniz. Örnek mimaride TCU Araca sinyal göndererek uygulama işlemcisini uyandırır. işlemci.
Araç üzerinde Android dışı bileşenler
Araç TCU'su her zaman uzaktan mesaj alabilir.
Uyandırma istemcisi, uzaktan uyandırma sunucusu kullanılır.
AP üzerinde çalışan AAOS, uzaktan erişim HAL'si üzerinden TCU'yu kullanabilirsiniz.
4.Şekil TCU (uyandırma istemcisi).
Buluttaki bileşenler
Uyandırma sunucusu
Uyandırma sunucusu, TCU'daki uyandırma istemcisiyle iletişim kurarak aşağıdaki işlemleri gerçekleştirir:
- Aracın TCU'su ile uzun süreli bağlantı sürdürün.
- Araç kimliğine göre belirli bir TCU bulun.
- Bir aracın durumunu bildirme. Örneğin, çevrimiçi, çevrimdışı veya son çevrimiçi süreyi geçirebilir.
Gerçek bir uygulamada, uyandırma sunucusu uzaktan kumandayla birleştirilebilir görev sunucusu.
Uzak görev sunucusu
Bu uzak görevleri uzak görev sunucusu yönetir.
Kullanıcı, yeni uzaktan görevler başlatmak ve bunları izlemek için sunucuyla etkileşimde bulunur görevlerden biridir.
Uygulama işlemcisini uyandırmak için uzaktan uyandırma sunucusunu kullanır araçları geliştirir.
Araçta çalışan uzaktan görev istemcisiyle etkileşimde bulunur.
Müşteri kayıt bilgilerini depolar. Bu, belirli bir kullanıcıyı ilişkilendirir belirli bir araçtaki uzak görev istemcisine gönderilebilir.
Genellikle uzak görev sunucusu aracılığıyla uyandırmaya gönderilen görev verileri aracın TCU'suna ve son olarak uzaktan görev istemcisine bir görev kimliğidir. Uzak görev istemcisi, görev kimliğini kullanarak uzak görev sunucusundan alınan bilgileri içerir.
Gizlilik ve güvenlik şartları
Görev | Koşul | Şartlar |
---|---|---|
TCU (uyandıran istemci) | ZORUNLU |
|
Uyandırma sunucusu | ZORUNLU |
|
Uzaktan görev istemcisi | ZORUNLU |
|
Uzak görev sunucusu | ZORUNLU |
|
Fabrika ayarlarına sıfırlama ve sahiplik aktarımı
Kullanıcı fabrika ayarlarına sıfırlama işlemi gerçekleştirirse Araba Hizmeti'nde depolanan istemci kimliği temizlendi. Ancak sunucular (uzaktan görev sunucusu ve uzak uyandırma sunucusu) bilgilendirilmez. Sunucular, süresi dolan istemci kimliğinden araç. Sonuç olarak, kullanıcı araç için yeni bir uzak görev başlatırsa süresi dolmuş istemci kimliğini kullanıyor. Araç uyandı ancak uzaktaki görev Uzak görev istemcisi farklı bir istemci kimliğine sahip olduğundan eşleşmiyor.
Aşağıda, fabrika ayarlarına sıfırlama için olası bir uygulama açıklanmaktadır.
Bir kullanıcı fabrika ayarlarına sıfırlama işlemi yaptığında satıcı, kullanıcıdan uzak görev sunucusuna bağlanma ve kullanıcının, aracı daha önce bağlamış olmanız gerekir. Cihazda ağ olacağının garantisi yok erişimi vardır. Bu nedenle, bağlantı kaldırma isteğini vermek mümkün olmayabilir.
Bir aracın sahipliği her aktarıldığında bazı işlemlerin artık eski sahibinin uzaktan görevler gönderememesini sağlamak için kullanabilirsiniz. Örneğin, yeni sahipten:
Fabrika ayarlarına sıfırlayın. Bu işlem, istemci kimliğinin yeniden oluşturulmasını sağlar. Şu tarihten sonra: önceki sahibi yine de aracı uyandırabilir ancak uzaktan görevleri uzak bir şekilde yürütür.
Uzak görev istemcisi uygulamasını açın ve Aracın bağlantısını kaldırmayla ilgili müşterinin kaydını iptal etme hesap oluşturabilirsiniz. Yeni sahip, kayıt işlemini takip edebilir. müşterinin işlem yapması için aracınızın hesabına bağlantı vermesi ve hesap oluşturun.
Yeni sahip, Müşteri kaydetme işlemini kullanarak şu işlemleri gerçekleştirebilir: aracı hesabınıza bağlayıp önceden bağlanmış hesabı değiştirebilirsiniz.
Uzak görev istemcisini test etme
Referans uzaktan erişim HAL'sini sağlarız
default
test etmek için kullanabileceğiniz bir dizindir. Şunları kullanabilirsiniz: debug
HAL'ye sahte bir uzak görev eklemenizi sağlar ve bu komut,
doğru istemci kimliğini sağlarsanız uzak görev istemcisi. Müşteriyi bu sayede
Uzak görev istemcinize kayıt bilgilerini günlüğe kaydederek kimlik
bazı ipuçları vereceğim.
adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]