Uzaktan erişim ayarlama

Android 14, iş ortaklarının belirli görevleri gerçekleştirmek için bir araçtaki Android'i uzaktan uyandırmasına olanak tanıyan yeni uzaktan erişim özelliğini kullanıma sunar. Örneğin, yazılım güncellemelerini uygulamak için gece boyunca Garaj modunu çalıştırmak. Uçtan uca iş akışı için Android dışında birden fazla bileşen gerekir. Android, Android dışı bileşenler için uygulamayı 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çerikte, aşağıdaki örnek mimarinin kullanıldığı varsayılmaktadır. Bu mimari varsayıma dayalı olup gerçek mimariyi yansıtmayabilir. OEM'ler, gerçek bir uygulamayı araç ve sunucu mimarilerine uyarlamalıdır.

resim

Şekil 1. Örnek mimari.

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

Donanım bileşeni Açıklama
Uygulama işlemcisi Android'i çalıştıran işlemci. Android bu işlemcide 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 birimi (TCU) Araçtaki işlemci, buluttan her zaman uzak mesaj alabilir. TCU'nun her zaman açık veya düşük güç modunda olduğu varsayılır. TCU'yu uyandırmak için uzaktan mesajları kullanın.
Uyandırma sunucusu Bulutta çalışan ve uyanma komutları vermek için araçtaki TCU ile iletişim kurmaktan sorumlu olan uzak bir sunucu.
Uzak görev sunucusu Uzak görev sunucusu bulutta çalışır, kullanıcılarla etkileşim kurar ve uzak görevleri yönetir.

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

Android'de yazılım bileşeni Açıklama
Araba Hizmeti Uzak erişim API'leri sağlayan AAOS çerçeve hizmeti.
Uzaktan görev istemcisi Uzaktan görevleri yürüten, tedarikçi firma tarafından yazılmış bir Service sınıfı. Bir Android sistemi birden fazla uzak görev istemcisi çalıştırabilir.
Uzaktan erişim HAL Uzaktan erişim için uygulanmalıdır.
AAOS ile TCU gibi Android dışı bir bileşen arasındaki iletişim için soyutlama katmanı.

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

Android olmayan yazılım bileşeni Açıklama
İstemciyi uyandır TCU'da çalışan ve uyanma sunucusuyla uzun süreli bağlantı kuran yazılım. Ayrıca, uzak görevleri Araba Servisi'ne iletmek için Uzaktan Erişim HAL ile bağlantı kurar.
Uyandırma sunucusu uygulama TCU'da çalışan uyanma istemciyle iletişim kuran sunucu. Uyandırma istemcisini uyandırabilir.
Uzak görev sunucusu uygulaması Uzak görevleri yöneten sunucu. Kullanıcılar, uzak görevler yayınlamak ve izlemek için bu sunucuda etkileşimde bulunur.

İş Akışı

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

Örnek iş akışı

Ayrıntılı bir iş akışı aşağıdaki gibi olabilir:

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

  2. İş ortağı, araç etkileşimlerinin olası olmadığı gece saatlerinde aracı güncellemeye çalışır.

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

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

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

  6. Android, güncellemeyi uyguladıktan sonra görevi tamamlandı olarak işaretler ve bağlantıyı sonlandırır ya da belirtilen zaman aşımına ulaşır.

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

Uzaktan erişim için iki önemli adım gerekir. İlki, istemciyi kaydetmektir. Bu işlem, belirli bir kullanıcıyı belirli bir araçta çalışan belirli bir uzak görev istemcisini bağlamaktır. Diğeri ise görev yayınlamaktır. Bu işlem, belirli bir kullanıcının uzak görevini belirli bir araçta çalışan belirli uzak görev istemciye yayınlamaktır.

İstemci kaydetme

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 sürecini tamamlaması gerekir (kalın metin, AAOS tarafından uygulanan görevleri gösterir):

  1. Araç Servisi, önyükleme sırasında uzak erişim HAL'den araç bilgilerini alır.

  2. Car Service, önyükleme sırasında intent filtresine ve izne göre tüm uzak görev istemcilerini başlatır.

  3. Uzak görev istemcisi başlatıldıktan sonra, uzak görev istemcisi kendisini Car Service'e kaydeder.

  4. Araç Servisi, uzak görev istemcisini araç kimliği ve istemci kimliği dahil olmak üzere kayıt bilgileri hakkında bilgilendirir. İstemci kimliği benzersizdir ve Car Service tarafından bu müşteriye atanır. Aynı araçtaki tüm uzak görev istemcileri arasında benzersiz olması garanti edilir.

  5. Kullanıcı, uzak görev istemcisi aracılığıyla uzak görev sunucusuna giriş yapar ve bu araç için uzak 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ği ve istemci kimliğiyle birlikte uzak görev sunucusuna yükler ve kullanıcıyı bu istemciye ve bu araca bağlamasını ister.

    İsteğe bağlı olarak bu adımda kullanıcıdan ek iki faktörlü kimlik doğrulaması istenebilir.

    Uzak görev sunucusu, istekte sağlanan araç kimliğinin gönderenin araç kimliğiyle eşleştiğini doğrulamalıdır. Bu doğrulama, araç tasdiki aracılığıyla yapılabilir.

Fabrika ayarlarına sıfırlama işlemi yapılmadığı sürece, müşteri kaydı işlemi araç başına kullanıcı başına bir kez yapılmalıdır. Müşteri kimliği, araç hizmetinde yerel olarak depolanır ve aynı müşteri için aynı kalır.

resim

Şekil 2. İstemci kaydedin.

İstemcinin kaydını iptal etme

Kullanıcı, aracın hesabındaki bağlantısını araçtan veya uzak görev sunucusundan kaldırabilir:

  • Kullanıcılar, araç üzerinde uzak görev istemcisi uygulamasını açabilir ve bu aracın daha önce bağlı olduğu kullanıcı hesaplarının bağlantısını kaldırmak için bağlantı kaldırma isteği gönderebilir.

  • Kullanıcılar uzak görev sunucusunda hesaplarına giriş yapabilir ve daha önce bağlanmış bir aracın bu hesapla bağlantısını kaldırabilir.

Kullanıcı, aracın hesabındaki bağlantısını kaldırırsa uzak görev sunucusu, ilgili kullanıcı için depolanan eşlemeyi kaldırmalıdır.

Görevleri teslim etme

Bulutta:

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

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

  3. Uyandırma sunucusu, araç kimliği için belirli TCU'yu bulur (TCU kaydının zaten yapıldığı varsayılır) ve görev verilerini ve istemci kimliğini TCU'ya gönderir.

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

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

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

  3. Araç Servisi, TCU'dan görev alır.

  4. Araç Servisi, görevleri ilgili uzak görev istemciye dağıtır.

  5. Uzaktan görev istemcisi görevi alır ve yürütür.

    (İsteğe bağlı) Uzaktan görev istemcisi, daha fazla görev ayrıntısı için görev sunucusuyla iletişim 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 Araba Servisi'ni bilgilendirir.

  8. Gerekirse araç servisi aracın güç durumunu geri yükler.

resim

Şekil 3. Görevleri teslim etme

Uzaktan görev istemcisi yazma

CarRemoteAccessManager, uzaktan erişim özellikleri için API'yi sağlar. Daha fazla bilgi edinmek için CarRemoteAccessManager başlıklı makaleyi inceleyin. Uzaktan 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 gereklidir ve RemoteTaskClientService için aşağıdaki gibi bir intent filtresi beyan edilmelidir:

<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 Car Service'e kaydettirmelidir:

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

Boş değer döndürmek için onBind işlevini geçersiz kılmalıdır.

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

Araç Servisi, yaşam döngüsünü yönetir. Car Service, başlangıç sırasında ve uzak bir görev geldiğinde bu hizmete bağlanır. Car Service, görev tamamlandığında bu hizmetin bağlamasını kaldırır. Daha fazla bilgi için Bir hizmetin yaşam döngüsünü yönetme başlıklı makaleyi inceleyin.

Uzak görev istemcisi sistem kullanıcısı olarak çalıştığından kullanıcıya özel verilere erişemez.

Aşağıdaki örnekte, kayıtlı geri çağırma işlevlerinin nasıl ele alınacağı 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 firma 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
}

Alternatif olarak, userdebug/eng derlemesinde aşağıdaki adb komutunu kullanın:

adb shell cmd car_service enable-feature car_remote_access_service

Android'de gerekli şartlar

Uzaktan erişim HAL

Uzak erişim donanım soyutlama katmanı (HAL), AAOS ile başka bir ECU (ör. TCU) arasındaki iletişim için tedarikçi tarafından uygulanan bir soyutlama katmanıdır. Uzaktan erişim özelliğinin desteklenmesi için zorunludur. Uzaktan erişim özelliği uygulanmamışsa bu özelliğin uygulanması gerekmez.

Arayüz, IRemoteAccess.aidl dosyasında tanımlanır ve aşağıdaki yöntemleri içerir:

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

Uzak bir görev istendiğinde çağrılacak bir geri çağırma işlevi ayarlar.

void clearRemoteTaskCallback() Daha önce ayarlanmış uzak görev geri çağırma işlevini temizler.
void notifyApStateChange(in ApState state)

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

Geri çağırma arayüzü IRemoteTaskCallback.aid adresinde tanımlanır.

Sınıf Açıklama
oneway void onRemoteTaskRequested(String clientId, in byte[] data)

Uzak görev istendiğinde çağrılan geri çağırma işlevi.

Harici 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'si

VHAL'ın uzak erişim özelliğini desteklemesi için aşağıdaki özellikleri desteklemesi gerekir:

Sınıf Açıklama
SHUTDOWN_REQUEST Ana birimin kapatılmasını ister.
VEHICLE_IN_USE
  • Aracın kullanılıp kullanılmadığını algılar.
  • Kullanıcı aracın kilidini açtıktan sonra veya araca yaklaştığında true olmalıdır.
  • Kullanıcı aracı kapattıktan veya kilitledikten sonra belirli bir süre. false olmalıdır.
  • true olduğunda AAOS, uzaktan görev tamamlandığında aracı kapatmaya çalışmaz.

Daha fazla bilgi için Desteklenen Sistem Özellikleri başlıklı makaleyi inceleyin.

Sessiz mod

Araç, kullanıcı olmadığında uzaktan görevleri yürütmek için sessiz modda başlatılabilmesi amacıyla uzaktan erişim özelliği için sessiz mod desteklenmelidir. Sessiz modda AAOS cihaz, ekran ve ses kapalıyken açılır.

Sessiz mod, iki Linux çekirdeği sysfs dosyası aracılığı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 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 adresine yazılır. Ardından AAOS çerçevesi, mevcut Sessiz modu temsil eden /sys/kernel/silent_boot/pm_silentmode_kernel_state değerini 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 değerini kontrol eder.

Uzaktan bir görev alındığında ve AAOS başlatıldığında araç işlemcisi sessiz modu ayarlar ve sistemin ekran/ses kapalı olarak başlatılması için AAOS'u başlatır.

Araçtaki Android dışı bileşenler

Araç işlemcisi

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

Araçtaki Android dışı bileşenler

Araç TCU'su her zaman uzaktan mesaj alabilir.

Uyandırma istemcisi, uzak uyandırma sunucusuyla uzun süreli bir bağlantı sağlamak için TCU'da çalışır.

AP'de çalışan AAOS, uzak erişim HAL'i aracılığıyla TCU'da çalışan uyanma istemciyle iletişim kurabilir.

resim

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

Buluttaki bileşenler

Uyandırma sunucusu

Uyandırma sunucusu, TCU'daki uyandırma istemciyle iletişim kurarak şunları yapar:

  • Aracın TCU'su ile uzun süreli bağlantı kurun.
  • Araç kimliğine göre belirli bir TCU'yu bulma
  • Bir aracın durumunu bildirme. Örneğin, çevrimiçi veya çevrimdışı ya da uzak görev sunucusuna son çevrimiçi olma zamanı.

Gerçek bir uygulamada, bir uyanma 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örevler başlatmak ve uzak görevleri izlemek için sunucuyla etkileşimde bulunur.

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

  • Araç üzerinde çalışan uzak görev istemciyle etkileşim kurar.

  • Müşteri kayıt bilgilerini depolar. Bu işlem, belirli bir kullanıcıyı belirli bir araçtaki belirli bir uzak görev istemciyle ilişkilendirir.

Uzak görev sunucusu aracılığıyla uyandırma sunucusuna, aracın TCU'suna ve nihayetinde uzak görev istemciye gönderilen görev verileri genellikle 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 şartları

Görev Koşul Şartlar
TCU (uyandırma istemcisi) MUST
  • Uyandırma sunucusunun kimliğini doğrulayın.
  • Koda güvenin.
Uyandırma sunucusu MUST
  • 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.
Uzaktan görev istemcisi MUST
  • Kayıt sırasında kullanıcının kimliğini doğrulayın.
  • Uzaktan görev sunucusunun kimliğini doğrulayın.
  • Android hizmetiyle ilgili tüm güvenlik şartlarını karşılayın. Örneğin, sınırlı izinler.
Uzak görev sunucusu MUST
  • Uyandırma sunucusunun kimliğini doğrulamalıdır.
  • Araç onayı sağlayın. Yani, istekte sağlanan araç kimliğinin gönderenin araç kimliğiyle eşleştiğini doğrulayın. Araç onayı mümkün değilse kullanıcının aracın şu anda sahibi olduğunu doğrulamak için başka yöntemler kullanılmalıdır.
  • Kullanıcının kimliğini doğrulayın.
  • Kullanıcı bilgilerini işleyen bir sunucu için tüm güvenlik şartlarını karşılayın.

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

Kullanıcı fabrika ayarlarına sıfırlama yaparsa Car Service'te depolanan istemci kimliği silinir. Ancak sunucular (uzak görev sunucusu ve uzaktan uyandırma sunucusu) bilgilendirilmez. Sunucular, süresi dolmuş istemci kimliği ile araç arasında bir eşleme tutar. Sonuç olarak, kullanıcı araç için yeni bir uzak görev başlatırsa süresi dolmuş istemci kimliği kullanılır. Araç uyandırılır ancak uzak görev istemcisinin eşleşmeyen farklı bir istemci kimliği olduğundan uzak görev yürütülemez.

Aşağıda, fabrika ayarlarına sıfırlama için olası bir uygulama açıklanmaktadır.

Kullanıcı fabrika ayarlarına sıfırlama işlemi yaptığında tedarikçi firma, kullanıcıdan uzak görev sunucusuna giriş yapmasını ve daha önce aracı bağladıysa aracın hesabındaki bağlantısını kaldırmasını ister. Fabrika ayarlarına sıfırlama sırasında cihazın ağa erişimi olacağı garanti edilmez. Bu nedenle, fabrika ayarlarına sıfırlama sırasında cihazdan bağlantı kaldırma isteği göndermek uygun olmayabilir.

Bir aracın sahipliği devredildiğinde, önceki sahibin artık araca uzaktan görev verememesini sağlamak için bazı işlemler yapılmalıdır. Örneğin, yeni sahipten şunları yapması istenebilir:

  • Fabrika ayarlarına sıfırlayın. Bu sayede istemci kimliğinin yeniden oluşturulması sağlanır. Bu adımdan sonra önceki sahip aracı uyandırmaya devam edebilir ancak artık uzaktan görev yürütemez.

  • Uzaktan görev istemcisi uygulamasını açın ve aracın önceki sahibinin hesabından bağlantısını kaldırmak için İstemcinin kaydını silme işlemini uygulayın. Yeni sahip, aracı hesabına bağlamak ve daha önce bağlı olan hesabı değiştirmek için müşteri kaydı oluşturma sürecini uygulayabilir.

  • Yeni sahip, aracı hesabına bağlamak ve daha önce bağlanmış hesabı değiştirmek için Müşteri kaydetme sürecini kullanabilir.

Uzaktan görev istemcisini test etme

Uzaktan görev istemcilerini test etmek için referans uzak erişim HALdefault dizinini sağlarız. HAL'e sahte bir uzak görev eklemek için aşağıdaki debugkomutunu kullanabilirsiniz. Bu komut, doğru istemci kimliğini sağlarsanız uzak görev istemcinize yönlendirilir. Uzak görev istemci uygulamanıza kayıt bilgilerini kaydederek istemci kimliğini alabilirsiniz.

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