Uzaktan erişim ayarlama

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

resim

1. şekil. Ö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 bellek (VM) üzerinde (gerçek donanımda değil) çalışıyor olabilir.
Araç işlemcisi Uygulama işlemcisinin gücünü kontrol etmekten sorumlu işlemci.
Telematik kontrol birimi (TCU) Araçtaki işlemci, buluttan gelen uzaktan mesajları her zaman 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 uyandırma komutları vermek için araçtaki TCU ile iletişim kurmaktan sorumlu bir uzak 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, Android'de çalışan şu yazılım bileşenlerinden oluşur:

Android'deki yazılım bileşeni Açıklama
Araba Hizmeti Uzaktan erişim API'leri sağlayan AAOS çerçeve hizmeti.
Uzak görev istemcisi Bir satıcı tarafından yazılmış Service uzak görevleri yürüten 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 olmayan 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 dışı yazılım bileşeni Açıklama
İstemciyi uyandırma TCU'da çalışan ve uyandırma sunucusuyla uzun süreli bağlantı sağlayan yazılım. Ayrıca, uzaktan görevleri Car Service'e iletmek için Uzaktan Erişim HAL'ı ile bağlantıyı sürdürür.
Wake-up server uygulaması TCU'da çalışan uyandırma istemcisiyle iletişim kuran sunucu. Uyandırma istemcisine uyandırma istekleri gönderebilir.
Uzak görev sunucusu uygulama Uzak görevleri yöneten sunucu. Kullanıcılar, uzaktan görevleri yayınlamak ve izlemek için bu sunucuyla etkileşimde bulunur.

İş akışı

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

Ö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üncellemek istiyor.

  3. İş ortağı bulut sunucusu, araca uzaktan güncelleme sistemi 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 Modu'nu tetikler.

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

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

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

Uzak erişim için iki önemli adım gerekir. İlk olarak istemciyi kaydetmeniz gerekir. Bu işlem, belirli bir kullanıcıyı belirli bir araçta çalışan belirli bir uzak görev istemcisine bağlamak anlamına gelir. Diğeri ise belirli bir kullanıcı için uzaktan görevi belirli bir araçta çalışan belirli bir uzaktan görev istemcisine teslim etmek olan bir görevi yerine getirmektir.

İstemci kaydetme

Uzaktan erişim özelliğini kullanmak için kullanıcının uzaktan görev istemcisi 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 gösterir):

  1. Car Service, başlatma sırasında uzaktan erişim HAL'inden araç bilgilerini alır.

  2. Araç Servisi, başlatma sırasında intent-filter ve izne göre tüm uzak görev istemcilerini başlatır.

  3. Uzak görev istemcisi başlatıldığında, uzak görev istemcisi kendini Car Service'e kaydeder.

  4. Araç Servisi, araç kimliği ve müşteri kimliği dahil olmak üzere kayıt bilgileri hakkında uzaktan görev istemcisini bilgilendirir. İstemci kimliği benzersizdir ve bu istemciye Araç Servisi tarafından atanır. Aynı araçtaki tüm uzaktan görev istemcileri arasında benzersiz olduğu garanti edilir.

  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ği ve istemci kimliği ile birlikte uzak görev sunucusuna yükler ve kullanıcının bu istemciye ve bu araca bağlanmasını ister.

    Bu adımda, kullanıcıdan isteğe bağlı olarak ek iki faktörlü kimlik doğrulama 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 işlem, araç onayı aracılığıyla yapılabilir.

Fabrika ayarlarına sıfırlama işlemi yapılmadığı sürece istemci kaydı işlemi, kullanıcı başına araç başına bir kez gereklidir. Client-ID, Car Service'te yerel olarak depolanır ve aynı istemci için aynı kalır.

resim

Şekil 2. Bir istemci kaydedin.

İstemcinin kaydını silme

Kullanıcılar, aracı hesaplarının bağlantısını araçtan veya uzaktaki görev sunucusundan kaldırabilir:

  • Araçta kullanıcılar, uzaktan 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ğinde bulunabilir.

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

Kullanıcı, aracı hesabından ayırırsa uzak görev sunucusu, söz konusu kullanıcı için depolanan eşlemeyi kaldırmalıdır.

Görevleri teslim etme

Bulutta:

  1. Bir kullanıcı, belirli bir araca uzaktan görev göndermek için uzaktan 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 uyandırma sunucusuna gönderir.

  3. Uyandırma sunucusu, araç kimliği için belirli TCU'yu bulur (TCU kaydının zaten yapıldığını varsayarak) ve görev verileri ile 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 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örevler alır.

  4. Araç Servisi, 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 iletişim kurar 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 Araç Servisi'ni bilgilendirir.

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

resim

3.Şekil Görevleri teslim etme

Uzaktan görev istemcisi yazma

CarRemoteAccessManager, uzaktan erişim özellikleri için API sağlar. Daha fazla bilgi edinmek için CarRemoteAccessManager başlıklı makaleyi inceleyin. Uzaktan görev istemcisi, uzaktan görevleri yürüten ve CarRemoteAccessManager kullanan bir Android hizmetidir. Bu, PERMISSION_USE_REMOTE_ACCESS ve PERMISSION_CONTROL_REMOTE_ACCESS gerektirir ve RemoteTaskClientService için bir amaç filtresi beyan etmelidir. Ö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>

Uzak görev istemcisi, oluşturma sırasında kendini Car Service'e 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ılmalıdır.

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

Car Service, yaşam döngüsünü yönetir. Car Service, başlatma sırasında ve uzaktan bir görev geldiğinde bu hizmete bağlanır. Görev tamamlandığında Araç Servisi bu hizmetin bağlantısını kaldırır. Daha fazla bilgi edinmek için Hizmet 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ılara özel verilere erişemez.

Aşağıdaki örnekte, kayıtlı geri çağırma işlevlerinin 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. Özelliği etkinleştirmek için aşağıdakiler 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

Cihaz üzerinde Android ile ilgili şartlar

Uzaktan erişim HAL'si

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. Uzak erişim özelliğini desteklemek için zorunludur. Uzaktan erişim özelliği uygulanmıyorsa bu özelliğin uygulanması gerekmez.

Arayüz, IRemoteAccess.aidl içinde tanımlanır ve şu 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() İstemci uyandırılarak tanınabilen benzersiz bir işlemci kimliği alır.
void setRemoteTaskCallback(IRemoteTaskCallback callback)

Uzaktan görev istendiğinde çağrılacak bir geri çağırma ayarlar.

void clearRemoteTaskCallback() Daha önce ayarlanan bir uzaktan görev geri aramasını temizler.
void notifyApStateChange(in ApState state)

Uygulama işlemcisinin uzaktan 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.

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

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

Araç HAL'si

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

Sınıf Açıklama
SHUTDOWN_REQUEST Baş ünitesinin 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

Uzak erişim özelliğinin kullanılabilmesi için sessiz mod desteklenmelidir. Böylece araç, kullanıcı yokken uzaktan görevleri yürütmek için sessiz modda başlatılabilir. Sessiz modda AAOS cihazı, ekran ve ses kapalıyken başlatılır.

Sessiz mod, iki Linux çekirdeği sysfs dosyası üzerinden kontrol edilir.

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

Geçerli 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 konumuna yazılır. Ardından, AAOS çerçevesi buna göre güncellenir./sys/kernel/silent_boot/pm_silentmode_kernel_state Bu, mevcut sessiz modu temsil eder. AAOS modülleri, sistemin sessiz modda olup olmadığını /sys/kernel/silent_boot/pm_silentmode_kernel_state kontrol eder.

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

Araçtaki Android olmayan bileşenler

Araç işlemcisi

Araç işlemcisi, araçta bulunan ve Android'i ç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 olmayan bileşenler

Araç TCU'su her zaman uzaktan mesaj alabilir.

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

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

resim

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

Bulut bileşenleri

Uyandırma sunucusu

Uyandırma sunucusu, TCU'daki uyandırma istemcisiyle şu amaçlarla iletişim kurar:

  • Aracın TCU'su ile uzun süreli bir 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 son çevrimiçi zaman.

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

Uzak görev sunucusu

Bu uzak görevler, uzak görev sunucusu tarafından yönetilir.

  • Kullanıcı, yeni uzaktan görevler başlatmak ve uzaktan 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 uzak görev istemcisiyle etkileşim kurar.

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

Genellikle uzak görev sunucusu üzerinden uyandırma sunucusuna, aracın TCU'suna ve nihayetinde uzak görev istemcisine gönderilen görev verileri yalnızca bir görev kimliğidir. Uzak görev istemcisi, ayrıntılı bilgileri uzak görev sunucusundan getirmek için görev kimliğini kullanır.

Gizlilik ve güvenlik şartları

Task Koşul Şartlar
TCU (istemciyi uyandırma) 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 verin.
  • Uyandırma istemcisinin kimliğini doğrulayın.
  • Uyandırma mesajını yalnızca hedef araca gönderin.
Uzak 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.
  • Bir Android hizmeti için tüm güvenlik şartlarını karşılamalıdır. Örneğin, sınırlı izinler.
Uzak görev sunucusu ZORUNLU
  • Uyandırma sunucusunun kimliği doğrulanmalıdır.
  • Araç tasdik belgesi 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ı ş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şılamalıdır.

Fabrika ayarlarına sıfırlama ve sahiplik devri

Kullanıcı fabrika ayarlarına sıfırlama işlemi gerçekleştirirse 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ğinden araca eşleme yapmaya devam eder. Sonuç olarak, kullanıcı araç için yeni bir uzaktan görev başlatırsa süresi dolmuş istemci kimliği kullanılır. Araç uyandırılır ancak uzaktan görev istemcisinin farklı bir istemci kimliği olduğundan uzaktan 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, satıcı kullanıcıdan uzaktan görev sunucusuna giriş yapmasını ve aracı daha önce bağladıysa hesabından kaldırmasını ister. Fabrika ayarlarına sıfırlama sırasında cihazın ağ erişimine sahip olacağı garanti edilmez. Bu nedenle, cihazdan fabrika ayarlarına sıfırlama sırasında bağlantı kaldırma isteği göndermek mümkün olmayabilir.

Bir aracın sahipliği her devredildiğinde, önceki sahibin araca artık uzaktan görev verememesi için bazı işlemlerin yapılması gerekir. Örneğin, yeni sahibin şunları yapması istenebilir:

  • Fabrika ayarlarına sıfırlayın. Bu işlem, istemci kimliğinin yeniden oluşturulmasını sağlar. 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ı önceki sahibinin hesabından kaldırmak için İstemcinin kaydını silme sürecini uygulayın. Yeni sahip, aracı hesabına bağlamak ve daha önce bağlı olan hesabı değiştirmek için müşteri kaydı sürecini uygulayabilir.

  • Yeni sahip, aracı hesabına bağlamak ve daha önce bağlı olan hesabın yerine geçirmek için Müşteri kaydetme sürecini kullanabilir.

Uzaktan görev istemcisini test etme

Uzaktan görev istemcilerini test etmek için referans uzaktan erişim HAL default dizini sağlıyoruz. Doğru istemci kimliğini sağlarsanız HAL'ye sahte bir uzak görev yerleştirmek için aşağıdaki debug komutunu kullanabilirsiniz. Bu görev, uzak görev istemcinize yönlendirilir. Kayıt bilgilerini uzak görev istemcisi uygulamanıza kaydederek istemci kimliğini alabilirsiniz.

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