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 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 uygulama tanımlamaz veya uygulamaz (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 her zaman buluttan uzaktan mesaj alabiliyor. 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, kişilerle etkileşime geçer ve uzak görevleri yönetir.

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

Android üzerinde 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'si 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 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 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 eder.

  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 birimini (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. Birincisi, istemciyi kaydetmek, yani belirli bir kullanıcıyı, belirli bir araç üzerinde çalışan belirli bir uzaktan görev istemcisine bağlamak. 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ç Hizmeti, önyükleme sırasında uzak erişim HAL'den araç bilgilerini alır.

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

  3. Uzak görev istemcisi başlatıldıktan sonra, uzak görev istemcisi kendisini Araba Hizmeti'ne 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ıyla olan bağlantısını kaldırırsa uzak görev sunucusunun ilgili kullanıcı için depolanan eşlemeyi kaldırması gerekir.

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. Araba Hizmeti, görevleri ilgili uzaktan görev istemcisine dağıtır.

  5. Uzaktan 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 Servisi'ni bilgilendirir.

  8. Gerekirse araç servisi 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'yi sağlar. Daha fazla bilgi 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>

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

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 edinmek 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'le ilgili gereksinimler

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 zorunludur. Uzaktan erişim özelliği uygulanmamışsa bu özelliğin uygulanması gerekmez.

Arayüz, IRemoteAccess.aidl adresinde tanımlanmıştır ve aşağıdaki yöntemleri içerir:

Sınıf Açıklama
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ı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 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örevler 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 bir görev istendiğinde çağrılan bir geri çağırma.

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 uzaktan 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 edinmek için Desteklenen Sistem Özellikleri bölümüne bakın.

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ıyla kontrol edilir.

Sınıf Açıklama
/sys/kernel/silent_boot/pm_silentmode_kernel_state

Mevcut sessiz modu gösterir.

/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çta bulunan ve Android çalıştıran uygulama işlemcinin gücünü kontrol edebilen bir işlemcidir. Örnek mimaride TCU, araç işlemcisine bir sinyal göndererek uygulama işlemcisini uyandırır.

Araç üzerinde 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ı kurar.
  • 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 giden son çevrimiçi süre.

Gerçek bir uygulamada, 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ö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çta çalışan uzaktan görev istemcisiyle etkileşimde bulunur.

  • Müşteri kayıt bilgilerini depolar. Bu, belirli bir kullanıcıyı belirli bir araçtaki belirli bir uzak görev istemcisiyle 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) ZORUNLU
  • 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 ZORUNLU
  • Uyandırma sunucusunun kimliğini doğrulaması gerekir.
  • 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 sunuculara (uzaktan görev sunucusu ve uzak uyandırma sunucusu) bilgi verilmez. Sunucular, geçerlilik süresi sona eren istemci kimliğinden araçta bir eşlemeyi saklar. 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 verememesi için bazı işlemler yapılmalıdır. Örneğin, yeni sahipten şunları yapması istenebilir:

  • Fabrika ayarlarına sıfırlayın. Bu işlem, istemci kimliğinin yeniden oluşturulmasını sağlar. Aracın önceki sahibi, bu adımdan sonra aracı yine uyandırabilir ancak uzaktan görevleri 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. Aracın yeni sahibi, aracı kendi hesabına bağlamak ve önceden bağlı olan hesabı değiştirmek için müşteri kaydetme sürecini izleyebilir.

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

Uzak 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 debug komutunu kullanabilirsiniz. Doğru istemci kimliğini sağlarsanız bu görev, 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]