Uzaktan erişim ayarlama

.

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:

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.

resim

Ş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:

  1. Kullanıcı aracı garaja park eder.

  2. İş ortağı, araçla etkileşimde bulunduğunda aracı bir gecede güncellemeye çalışıyor pek olası değildir.

  3. İş ortağı bulut sunucusu, araca sistem uzaktan görevi gönderir. Daha net bir ifadeyle, telematik kontrol birimi (TCU).

  4. Aracın TCU'su, Android elektronik kontrol birimini (ECU) uyandırarak Garaj modunu tetikleyen bir OEM hizmeti var.

  5. Android, Google Play aracılığıyla güncellemeleri indirip yüklemek için Garaj modunu çalıştırır.

  6. 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):

  1. Araba servisi, başlatma sırasında uzaktan erişimden araç bilgilerini alır HAL.

  2. Araba servisi, başlatma sırasında tüm uzaktan görev istemcilerini intent filtresine ve izne sahip.

  3. Uzaktan görev istemcisi başlatıldığında, uzak görev istemcisi kendini Otomobil Servisi.

  4. 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.

  5. 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.

  6. 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.

resim

Ş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:

  1. Kullanıcı, uzak görev sunucusunu kullanarak belirli bir kullanıcıya uzak görev kullanabilirsiniz.

  2. 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.

  3. 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):

  1. TCU, uzak sunucudan uzak görevler alır.

  2. AAOS çalıştıran uygulama işlemcisi (AP) kapalıysa TCU, araç işlemcisi (VP),

  3. Car Service, TCU'dan görev alır.

  4. Araba Hizmeti, görevleri ilgili uzaktan görev istemcisine dağıtır.

  5. 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.

  6. (İsteğe bağlı) Uzak görev istemcisi hizmeti, görev sonucunu görev sunucusuna bildirir.

  7. Uzak görev istemcisi, görev tamamlandığında Araba Hizmeti'ni bilgilendirir.

  8. Gerekirse Araba Hizmeti, aracın güç durumunu geri yükler.

resim

Ş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
  • Aracın kullanımda olup olmadığını algılar.
  • Kullanıcı aracın kilidini açtıktan sonra veya kullanıcı yaklaştığında araç. true olmalıdır.
  • Kullanıcı aracı kapattıktan sonra veya kullanıcı aracı kilitlediğinde. false olmalıdır.
  • AAOS, true olduğunda uzak görev tamamlandığında otomatik olarak devreye girer.

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.

resim

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 sunucusunun kimliğini doğrulayın.
  • Koda güvenin.
Uyandırma sunucusu ZORUNLU
  • Yalnızca izin verilenler listesindeki uzak görev sunucularının bağlanmasına izin ver.
  • Uyandırma istemcisinin kimliğini doğrulayın.
  • Uyandırma mesajını yalnızca hedef araca gönderin.
Uzaktan görev istemcisi ZORUNLU
  • Kayıt sırasında kullanıcının kimliğini doğrulayın.
  • Uzak görev sunucusunun kimliğini doğrulayın.
  • Android hizmetlerinin tüm güvenlik şartlarını karşılaması gerekir. Örneğin, sınırlı izinler.
Uzak görev sunucusu ZORUNLU
  • Uyandırma sunucusunun kimliğini doğrulaması gerekir.
  • Araç onayı sağlayın. Yani aracın gerçekten de aracın İstekte sağlanan kimlik, gönderenin araç kimliğiyle eşleşiyor. Araç Bu onay mümkün değilse, doğrulama için başka araçlar kullanmalıdır kullanıcı şu anda aracın sahibi.
  • Kullanıcının kimliğini doğrulayın.
  • Kullanıcı işlemlerini gerçekleştiren bir sunucunun tüm güvenlik gereksinimlerini ekleyebilirsiniz.

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]