本部分旨在让工程师在 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 代码补全功能。
SDK 必须支持带注解的 API 的每个返回值和参数类型,但除了 ListenableFuture
、Optional
和 proto 之外,它还完全支持列表、集合、数组、基元、任何 Parcelable 类型和任何可序列化类型的嵌套和泛型。你还可以将
支持 SDK 本身不支持的类型。极端情况下,它可以无缝支持 ListenableFuture<List<Map<CustomProto,
CustomParcelableType[]>>>
。
测试
该 SDK 旨在简化单元测试。对于生成的每个 Profile 类
您可以提供对应的 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.