開始使用

本章節旨在提供工程師 5 分鐘的概略瞭解 跨設定檔呼叫使用 SDK 及測試方式。不要試圖 建構任何工具 - 這些內容並非做為參考資料或指引 這只是簡介而已

自訂設定檔感知類別和方法

連結應用程式 SDK 可讓您將自有類別和方法註解為跨設定檔。這項操作會產生可讓您執行 註解方法。

舉例來說,假設下列類別已新增 SDK 註解:

public class CalendarDatabase {

  @CrossProfile // SDK annotation
  public void deleteEvent(Event event, Account account) {
    // complex logic with database calls
  }
}

這樣做會產生前置字串為「Profile」的類別,讓您能在 建立設定檔例如:java profileCalendarDatabase.work().deleteEvent(event, account);

更複雜的範例

具體來說,類別和方法會變得更加複雜。例如: 現有的 API 可以使用 ListenableFuture 傳回類型,您可能需要 ,合併兩個剖析資料的結果。以這段程式碼為例:

public class CalendarDatabase {

  @CrossProfile // SDK annotation
  public ListenableFuture<Collection<Event>> getEvents() {
    // complex logic with database calls
  }
}
// Merge results from both profiles into a set
profileCalendarDatabase.both()
  .getEvents()
  .transform((Map<Profile, Collection<Event>> events) -> {
    return events.values()
        .stream()
        .flatMap(Collection::stream)
        .collect(Collectors.toSet());
  }, directExecutor());

這些產生的類別和方法可正常運作,並具備完整的類型安全性 IDE 程式碼完成功能。

已加註 API 的每個傳回和參數類型都必須由 但完整支援清單、組合、陣列、 原始、任何可包裝類型,以及任何可序列化的型別 ListenableFutureOptional 和 proto。您也可以將 支援 SDK 未原生支援的類型。這個極端例子 會順暢支援 ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>>

測試

SDK 旨在簡化單元測試,針對每個產生的設定檔類別 有一個對應的 FakeProfile 類別可用來提供作業 個人執行個體例如:

// Create an instance of the SDK-generated fake connector class. This
// class lets you control the availability of the profiles, which
// profile you are now running on.
private final FakeCrossProfileConnector connector =
  new FakeCrossProfileConnector();

// Create an instance of your real/fake/mock class for both profiles.
private final CalendarDatabase personalCalendarDatabase =
  new FakeCalendarDatabase();
private final CalendarDatabase workCalendarDatabase =
  new FakeCalendarDatabase();

// Create an instance of the SDK-generated fake profile-aware class.
private final FakeProfileCalendarDatabase profileCalendarDatabase =
  FakeProfileCalendarDatabase.builder()
    .personal(personalCalendarDatabase)
    .work(workCalendarDatabase)
    .connector(connector)
    .build();

// Pass profileCalendarDatabase into your classes under test, or set
// Dagger up to inject the fake automatically.