Uzaktan erişimi ayarlama

Android 14, iş ortaklarının belirli görevleri yürütmek için Android'i bir araçta uzaktan uyandırmasına olanak tanıyan yeni uzaktan erişim özelliğini sunuyor. Örneğin, yazılım güncellemelerini uygulamak için Garaj modunu gece boyunca çalıştırmak. Uçtan uca iş akışı için birden fazla Android olmayan bileşen gereklidir. Android, Android olmayan bileşenler için uygulama tanımlamaz veya sağlamaz (bu sorumluluk size aittir).

Daha fazla bilgi edinmek için aşağıdaki bölümlere bakın:

Mimari

Aşağıdaki içerik, varsayımsal olan ve gerçek mimariyi yansıtmayabilecek aşağıdaki örnek mimarinin kullanıldığını varsaymaktadır. OEM'ler gerçek bir uygulamayı araç ve sunucu mimarilerine uyarlamalıdır.

image

Şekil 1. Örnek mimari.

Örnek mimari şu donanım bileşenlerinden oluşur:

Donanım bileşeni Tanım
Uygulama işlemcisi Android'i çalıştıran işlemci. Android, bu işlemcideki sanal bellekte (VM) (gerçek donanımda değil) çalışabilir.
Araç işlemcisi Uygulama işlemcisinin gücünü kontrol etmekten sorumlu işlemci.
Telematik kontrol ünitesi (TCU) Araçtaki işlemci her zaman buluttan uzak mesajları alabilecek kapasitededir. TCU'nun her zaman açık veya düşük güç modunda olduğu varsayılır. TCU'yu uyandırmak için uzak mesajları kullanın.
Uyandırma sunucusu Bulutta çalışan ve uyandırma komutları vermek üzere araçtaki TCU ile iletişim kurmaktan sorumlu olan uzak bir sunucu.
Uzak görev sunucusu Uzak görev sunucusu bulutta çalışır, insanlarla etkileşime girer ve uzak görevleri yönetir.

Örnek mimari, tümü Android'de çalışan şu yazılım bileşenlerinden oluşur:

Android üzeri yazılım bileşeni Tanım
Araba servisi Uzaktan erişim API'leri sağlayan AAOS çerçeve hizmeti.
Uzak görev istemcisi Uzak görevleri yürüten, satıcı tarafından yazılan bir Service sınıfı. Bir Android sistemi birden fazla uzak görev istemcisini çalıştırabilir.
Uzaktan erişim HAL'i Uzaktan erişim için uygulanması gerekir.
AAOS ile TCU gibi Android olmayan bir bileşen arasındaki iletişim için soyutlama katmanı.

Android olmayan yazılım bileşenleri aşağıda açıklanmıştır:

Android olmayan yazılım bileşeni Tanım
Uyandırma istemcisi Uyandırma sunucusuyla uzun süreli bağlantı sağlayan, TCU üzerinde çalışan yazılım. Ayrıca Araba Servisine uzak görevleri iletmek için Uzaktan Erişim HAL ile bağlantıyı korur.
Uyandırma sunucusu uygulaması TCU üzerinde çalışan uyandırma istemcisi ile iletişim kuran sunucu. Uyandırma istemcisine uyandırma istekleri gönderebilir.
Uzak görev sunucusu uygulaması Uzak görevleri yöneten sunucu. Kullanıcılar uzak görevleri düzenlemek ve izlemek için bu sunucuyla etkileşime girer.

İş akışı

Bu bölümde örnek bir iş akışındaki adımlar listelenmektedir.

Örnek iş akışı

Ayrıntılı bir iş akışı aşağıdakine benzeyebilir:

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

  2. İş ortağı, araçla etkileşim olasılığının düşük olduğu durumlarda aracı bir gecede güncellemeye çalışır.

  3. İş ortağı bulut sunucusu, araca bir güncelleme sistemi uzaktan görevi gönderir. Özellikle telematik kontrol ünitesi (TCU).

  4. Aracın TCU'su Android elektronik kontrol ünitesini (ECU) uyandırır ve bir OEM hizmeti Garaj modunu tetikler.

  5. Android, güncellemeleri Google Play aracılığıyla 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 bağlantıyı keser veya belirli bir zaman aşımına ulaşır.

Ayrıntılı iş akışı

Uzaktan erişim için gerekli olan iki önemli adım vardır. Bunlardan ilki, belirli bir kullanıcıyı belirli bir araçta çalışan belirli bir uzaktan görev istemcisine bağlamak olan istemciyi kaydetmektir. Diğeri ise, belirli bir kullanıcı için uzaktan görevi belirli bir araç üzerinde çalışan belirli bir uzaktan görev istemcisine iletmek olan bir görevi teslim etmektir.

Bir müşteri kaydedin

Uzaktan erişim özelliğini kullanmak için kullanıcının uzak görev istemci uygulamasını en az bir kez açması ve istemci kayıt işlemini tamamlaması gerekir ( kalın metin, AAOS tarafından uygulanan görevleri belirtir):

  1. Başlatma sırasında, Araba Servisi araç bilgilerini uzaktan erişim HAL'den alır.

  2. Başlatma sırasında Araba Hizmeti, amaç filtresine ve izne dayalı olarak tüm uzak görev istemcilerini başlatır.

  3. Uzak görev istemcisi başlatıldığında, uzak görev istemcisi kendisini Araç Hizmetine kaydeder.

  4. Araç Hizmeti, uzak görev istemcisine araç kimliği ve müşteri kimliği de dahil olmak üzere kayıt bilgileri hakkında bilgi verir. Müşteri kimliği benzersizdir ve Araba Servisi tarafından bu müşteriye atanır. Aynı araçtaki tüm uzaktan görev istemcileri arasında benzersiz olması garanti edilir.

  5. Kullanıcı, uzak görev istemcisi aracılığıyla uzak görev sunucusunda oturum açar ve bu araç için uzaktan erişim özelliğini etkinleştirir. Bu adım genellikle uzak görev sunucusu aracılığıyla kimlik doğrulamayı içerir.

  6. Uzak görev istemcisi, araç kimliği ve istemci kimliğiyle birlikte kullanıcının bilgilerini uzak görev sunucusuna yükler ve kullanıcıyı bu belirli istemciye ve bu belirli araca bağlamasını ister.

    İsteğe bağlı olarak bu adım, kullanıcının ek iki faktörlü kimlik doğrulamasını içerebilir.

    Uzak görev sunucusunun, istekte sağlanan araç kimliğinin gönderenin araç kimliğiyle eşleştiğini doğrulaması gerekir; bu, araç onayı yoluyla yapılabilir.

Fabrika ayarlarına sıfırlama yapılmadığı sürece müşteri kayıt işleminin kullanıcı ve araç başına bir kez yapılması gerekir. Müşteri kimliği, Araç Hizmetinde yerel olarak saklanır ve aynı müşteri için aynı kalır.

image

Şekil 2. Bir istemciyi kaydedin.

Bir müşterinin kaydını silme

Bir kullanıcı, aracın bağlantısını kendi hesabından araçtan veya uzak görev sunucusundan kaldırabilir:

  • Kullanıcılar, araçta uzaktan görev istemcisi uygulamasını açabilir ve bu aracın daha önce bağlanmış kullanıcı hesaplarıyla bağlantısını kaldırmak için bir bağlantı kaldırma isteğinde bulunabilir.

  • Uzak görev sunucusunda , kullanıcılar kendi hesaplarında oturum açabilir ve önceden bağlanmış bir aracın bu hesapla olan bağlantısını kaldırabilir.

Kullanıcı aracın kendi hesabıyla olan bağlantısını kaldırırsa uzak görev sunucusunun belirli bir kullanıcı için saklanan haritalamayı kaldırması gerekir.

Görevleri teslim edin

Bulutta:

  1. Bir kullanıcı uzak görev sunucusunu belirli bir araca uzak görev göndermek için kullanır.

  2. Uzak görev sunucusu kullanıcı kimliğini araç kimliği ve istemci kimliğiyle eşleştirir. Görev verilerini, araç kimliğini ve istemci kimliğini uyandırma sunucusuna gönderir.

  3. Uyandırma sunucusu, araç kimliği için özel TCU'yu bulur (TCU kaydının zaten yapılmış olduğu varsayılarak) ve görev verilerini ve istemci kimliğini TCU'ya gönderir.

Araçta ( kalın metin AAOS tarafından gerçekleştirilen görevleri gösterir):

  1. TCU uzak görevleri uzak sunucudan alır.

  2. AAOS çalıştıran uygulama işlemcisi (AP) kapalıysa TCU, AP'yi uyandırmak için araç işlemcisini (VP) kullanır.

  3. Araba Servisi, görevleri TCU'dan alır.

  4. Araç Hizmeti, görevleri ilgili uzak 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 bağlantı kurar ve görevi yürütür.

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

  7. Uzak görev istemcisi, görev tamamlandığında Araç Servisi'ne bildirimde bulunur.

  8. Gerekirse Araç Servisi, aracın güç durumunu geri yükler.

image

Şekil 3. Görevleri teslim edin.

Uzak görev istemcisi yazın

CarRemoteAccessManager uzaktan erişim özellikleri için API sağlar. Daha fazla bilgi edinmek için CarRemoteAccessManager'a bakın. Uzak görev istemcisi, uzak görevleri yürüten ve CarRemoteAccessManager kullanan bir Android hizmetidir. Bunun için PERMISSION_USE_REMOTE_ACCESS ve PERMISSION_CONTROL_REMOTE_ACCESS gerekir ve RemoteTaskClientService için aşağıdaki gibi bir amaç filtresi bildirilmelidir:

<service android:name=".remoteaccess.RemoteTaskClientService"
         android:directBootAware="true"
         android:exported="true">
    <intent-filter>
       <action android:name="android.car.remoteaccess.RemoteTaskClientService" />
    </intent-filter>
</service>

Uzak görev istemcisi, oluşturma sırasında kendisini Araç Hizmetine 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ğerini döndürmek için onBind işlevini geçersiz kılması gerekir.

@Override
public IBinder onBind(Intent intent) {
    return null;
}

Araba Servisi yaşam döngüsünü yönetir. Araç Hizmeti, başlatma sırasında ve uzak bir görev geldiğinde bu hizmete bağlanır. Görev tamamlandığında Araç Hizmetinin bu hizmetle olan bağlantısı kesilir. 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ığından kullanıcıya özel verilere erişimi yoktur.

Aşağıdaki örnek, kayıtlı geri aramaların nasıl işleneceğini gösterir:

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();
    }
}

Satıcı uygulaması

Uzaktan erişim özelliği isteğe bağlıdır ve varsayılan olarak devre dışıdır. Özelliği etkinleştirmek için 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
}

Veya bir userdebug/eng derlemesinde aşağıdaki adb komutunu kullanın:

adb shell cmd car_service enable-feature car_remote_access_service

Android gereksinimleri

Uzaktan erişim HAL'i

Uzaktan erişim donanımı soyutlama katmanı (HAL), AAOS ile başka bir ECU (örneğin bir TCU) arasındaki iletişim için satıcı tarafından uygulanan bir soyutlama katmanıdır. Uzaktan erişim özelliğinin desteklenmesi zorunludur. Uzaktan erişim özelliği uygulanmadıysa uygulanmasına gerek yoktur.

Arayüz IRemoteAccess.aidl'de tanımlanmıştır ve şu yöntemleri içerir:

Sınıf Tanım
String getVehicleId() Uyandırma sunucusu tarafından tanınabilecek benzersiz bir araç kimliği alır.
String getWakeupServiceName() Uzak uyandırma sunucusunun adını alır.
String getProcessorId() İstemciyi uyandırarak tanınabilecek benzersiz bir işlemci kimliği alır.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Uzak bir görev istendiğinde çağrılacak bir geri aramayı ayarlar.

void clearRemoteTaskCallback() Önceden ayarlanmış bir uzak görev geri aramasını temizler.
void notifyApStateChange(in ApState state)

Uygulama işlemcisinin uzak görevleri almaya hazır olup olmadığını algılar.

Geri arama arayüzü IRemoteTaskCallback.aid adresinde tanımlanır.

Sınıf Tanım
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

Uzak bir görev istendiğinde çağrılan geri arama.

Harici bir TCU ile referans uygulamaya bakın. Uygulama, uzak görevleri almak için uzun süreli bir okuma akışı kullanır ve aşağıdaki debug komutunu destekler:

dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default

Araç HAL'i

Uzaktan erişim özelliğini desteklemek için VHAL'in şu özellikleri desteklemesi gerekir:

Sınıf Tanım
SHUTDOWN_REQUEST Ana ünitenin kapatılmasını talep eder.
VEHICLE_IN_USE
  • Aracın kullanımda olup olmadığını tespit eder.
  • Kullanıcı aracın kilidini açtıktan sonra veya kullanıcı araca yaklaştığında. true olmalı .
  • Kullanıcı aracı kapattıktan veya kullanıcı aracı kilitledikten sonraki belirli bir süre. false olmalıdır.
  • true olduğunda, AAOS uzak görev tamamlandığında aracı kapatmaya çalışmaz.

Daha fazla bilgi edinmek için bkz. Desteklenen Sistem Özellikleri .

Sessiz mod

Hiçbir kullanıcı olmadığında aracın uzak görevleri yürütmek üzere sessiz modda başlatılabilmesi için uzaktan erişim özelliği açısından sessiz modun desteklenmesi gerekir. Sessiz modda, AAOS cihazı ekran ve ses kapalıyken başlatılır.

Sessiz mod, iki Linux çekirdeği sysfs dosyası aracılığıyla kontrol edilir.

Sınıf Tanım
/sys/kernel/silent_boot/pm_silentmode_kernel_state

Geçerli sessiz modunu temsil eder.

/sys/kernel/silent_boot/pm_silentmode_hw_state

Yeni bir sessiz modu ayarlamak için donanım sinyalini temsil eder.

Araç işlemcisi, Sessiz modu açmak/kapatmak için Android SoC'ye bir Donanım sinyali gönderir. Sinyal (0 veya 1) /sys/kernel/silent_boot/pm_silentmode_hw_state dosyasına yazılır. Daha sonra AAOS çerçevesi, mevcut Sessiz modunu temsil eden /sys/kernel/silent_boot/pm_silentmode_kernel_state dosyasını buna göre günceller. AAOS modülleri, sistemin Sessiz modda olup olmadığını öğrenmek için /sys/kernel/silent_boot/pm_silentmode_kernel_state kontrol eder.

Uzak bir görev alındığında ve AAOS başlatıldığında, araç işlemcisi Sessiz modu ayarlar ve AAOS'u başlatarak sistemin ekran/ses kapalı olarak önyüklenmesini sağlar.

Araç içi Android olmayan bileşenler

Araç işlemcisi

Araç işlemcisi, Android çalıştıran uygulama işlemcisinin gücünü kontrol edebilen, araçta bulunan bir işlemcidir. Örnek mimaride TCU, araç işlemcisine bir sinyal göndererek uygulama işlemcisini uyandırır.

Araç içi Android olmayan bileşenler

Araç TCU'su her zaman uzak mesajları alabilir.

Uyandırma istemcisi, uzak uyandırma sunucusuyla uzun ömürlü bir bağlantı sağlamak için TCU üzerinde çalışır.

AP'de çalışan AAOS, uzaktan erişim HAL aracılığıyla TCU'da çalışan uyandırma istemcisiyle iletişim kurabilir.

image

Şekil 4. TCU (uyandırma istemcisi).

Bulut üzerindeki bileşenler

Uyandırma sunucusu

Uyandırma sunucusu, TCU'daki uyandırma istemcisi ile aşağıdaki amaçlarla iletişim kurar:

  • Aracın TCU'su ile uzun ömürlü bir bağlantı sağlayın.
  • Araç kimliğine göre belirli bir TCU bulun.
  • Bir aracın durumunu bildirin. Örneğin, çevrimiçi veya çevrimdışı veya uzak görev sunucusunun son çevrimiçi zamanı.

Gerçek bir uygulamada, bir uyandırma sunucusu uzak görev sunucusuyla birleştirilebilir.

Uzak görev sunucusu

Uzak görev sunucusu bu uzak görevleri yönetir.

  • Kullanıcı, yeni uzak görevleri başlatmak ve uzak görevleri izlemek için sunucuyla etkileşime girer.

  • Araçlardaki uygulama işlemcisini uyandırmak için uzaktan uyandırma sunucusunu kullanır.

  • Araçta çalışan uzaktan görev istemcisiyle etkileşime girer.

  • Müşteri kayıt bilgilerini saklar. Bu, belirli bir kullanıcıyı belirli bir araçtaki belirli bir uzaktan görev istemcisiyle ilişkilendirir.

Tipik olarak uzak görev sunucusu aracılığıyla uyandırma sunucusuna, aracın TCU'suna ve son olarak uzak görev istemcisine gönderilen görev verileri yalnızca bir görev kimliğidir. Uzak görev istemcisi, uzak görev sunucusundan ayrıntılı bilgileri almak için görev kimliğini kullanır.

Gizlilik ve güvenlik gereksinimleri

Görev Durum Gereklilik
TCU (uyandırma istemcisi) MUTLAK
  • Uyandırma sunucusunun kimliğini doğrulayın.
  • Koda güvenin.
Uyandırma sunucusu MUTLAK
  • Yalnızca izin verilenler listesindeki uzak görev sunucularının bağlanmasına izin verin.
  • Uyandırma istemcisinin kimliğini doğrulayın.
  • Uyandırma mesajını yalnızca hedef araca gönderin.
Uzak görev istemcisi MUTLAK
  • Kayıt sırasında kullanıcının kimliğini doğrulayın.
  • Uzak görev sunucusunun kimliğini doğrulayın.
  • Bir Android hizmetinin tüm güvenlik gereksinimlerini karşılayın. Örneğin, sınırlı izinler.
Uzak görev sunucusu MUTLAK
  • Uyandırma sunucusunun kimliğini doğrulamanız gerekir.
  • Araç onayı sağlayın. Yani, talepte sağlanan araç kimliğinin gönderenin araç kimliğiyle eşleştiğini doğrulayın. Araç tasdiki mümkün değilse, kullanıcının aracın halihazırda sahibi olduğunu doğrulamak için başka yöntemler kullanmalıdır.
  • Kullanıcının kimliğini doğrulayın.
  • Kullanıcı bilgilerini işleyen bir sunucunun tüm güvenlik gereksinimlerini karşılayın.

Fabrika ayarlarına sıfırlama ve sahiplik aktarımı

Kullanıcı fabrika ayarlarına sıfırlama yaparsa Araç Hizmetinde saklanan müşteri kimliği silinir. Ancak sunuculara (uzak görev sunucusu ve uzak uyandırma sunucusu) bilgi verilmez. Sunucular, artık süresi dolmuş müşteri kimliğinden araca bir eşleme tutar. Sonuç olarak, kullanıcı araç için yeni bir uzaktan görev başlatırsa araç, süresi dolmuş istemci kimliğini kullanır. Araç uyandırıldı ancak uzak görev istemcisinin eşleşmeyen farklı bir istemci kimliği olduğundan uzak görev yürütülemiyor.

Aşağıda fabrika ayarlarına sıfırlamanın olası bir uygulaması açıklanmaktadır.

Bir kullanıcı fabrika ayarlarına sıfırlama işlemi gerçekleştirdiğinde satıcı, kullanıcıdan uzak görev sunucusunda oturum açmasını ve kullanıcı aracı daha önce bağlamışsa aracın kendi hesabıyla bağlantısını kaldırmasını ister. Fabrika ayarlarına sıfırlama sırasında cihazın ağ erişimine sahip olacağı garanti edilmez. Bu nedenle, fabrika ayarlarına sıfırlama sırasında cihazdan bağlantı kesme isteğinin gönderilmesi mümkün olmayabilir.

Bir aracın mülkiyeti devredildiğinde, önceki sahibinin artık araca uzaktan görevler veremeyeceğinden emin olmak için bazı işlemlerin yapılması gerekir. Örneğin, yeni sahipten şunları yapması istenebilir:

  • Fabrika ayarlarına sıfırlama yapın. Bu, müşteri kimliğinin yeniden oluşturulmasını sağlar. Bu adımdan sonra önceki sahibi yine de aracı uyandırabilir ancak artık uzaktan görevleri gerçekleştiremez.

  • Uzak görev istemcisi uygulamasını açın ve aracın önceki sahibinin hesabıyla bağlantısını kaldırmak için İstemci kaydını silme işlemini izleyin. Yeni sahip, aracı kendi hesabına bağlamak ve daha önce bağlanan hesabı değiştirmek için müşteri kaydı sürecini takip edebilir.

  • Yeni sahip, aracı kendi hesabına bağlamak ve önceden bağlanan hesabı değiştirmek için Müşteri kaydetme işlemini kullanabilir.

Uzak görev istemcisini test edin

Uzak görev istemcilerini test etmek için referans uzaktan erişim HAL default dizinini sağlıyoruz. Doğru istemci kimliğini sağlarsanız uzak görev istemcinize iletilecek olan HAL'ye sahte bir uzak görev eklemek için aşağıdaki debug komutunu kullanabilirsiniz. Uzak görev istemci uygulamanızdaki kayıt bilgilerini günlüğe kaydederek istemci kimliğini alabilirsiniz.

adb root && adb shell dumpsys android.hardware.automotive.remoteaccess.IRemoteAccess/default --inject-task [clientID] [taskData]