本章節旨在提供工程師 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 的每個傳回和參數類型都必須由
但完整支援清單、組合、陣列、
原始、任何可包裝類型,以及任何可序列化的型別
ListenableFuture
、Optional
和 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.