本部分介绍如何在 。这样,您就能熟悉 SDK 以其为基础构建的实现。我们推荐您积极关注 开发应用
使用工作资料设置测试设备
Google 构建了 Test DPC 应用,以帮助您模拟和测试受管理设备 运行环境它会设置工作资料并向您提供 其中包含用于启用或停用设备上某些功能的控件。
- 安装 Test DPC 应用 - 打开 Google Play 商店并下载 Test DPC 应用。 
- 设置工作资料 - 应用安装完成后,您应该会在设备上看到两个图标, 设置图标和 Test DPC 应用图标。点按设置图标,然后按照 步骤。 
现在,您有两份单独的资料,一份用于个人应用,一份用于工作应用。 您可以通过应用列表顶部的标签页在它们之间切换。

安装您的应用时,它通常会在
个人资料。如果您需要将其明确安装到工作资料中
可以将 --user 参数与 adb install 结合使用。
$ adb install --user [id number of profile] [path of apk file]
有关设置测试设备的详细信息,请访问此 链接。
确保您的应用配置正确
启用 java 8 支持 并确保您的 minSdk 至少为 19。
添加 Gradle 依赖项
dependencies {
  annotationProcessor
'com.google.android.enterprise.connectedapps:connectedapps-processor:1.1.2'
  implementation
'com.google.android.enterprise.connectedapps:connectedapps:1.1.2'
  implementation
'com.google.android.enterprise.connectedapps:connectedapps-annotations:1.1.2'
}
在本示例中,我们使用 Guava。这不是使用 SDK 的必要条件,
以及 Hello World
api("com.google.guava:guava:29.0-android")。
创建一个将包含测试跨资料调用的新类
为了让它在以后变得更加实用,应该将其放入 希望拨入您真正的跨资料通话。
public class HelloWorld {
  @CrossProfile
  public ListenableFuture<String> helloWorld() {
    return Futures.immediateFuture("Hello world");
  }
}
如果您无法依赖 Guava for Futures 支持服务,请暂时按照我们的说明操作 然后查看最后一步,也就是要做出哪些更改
进行跨资料调用
您可以在需要进行真实跨资料调用的类中执行此操作 。
// TODO: inject/pass these into the class later instead.
CrossProfileConnector crossProfileConnector =
  CrossProfileConnector.builder(this).build();
ProfileHelloWorld profileHelloWorld =
  ProfileHelloWorld.create(crossProfileConnector);
ListenableFuture<Map<Profile, String>> resultsFuture =
  profileHelloWorld.both().helloWorld();
FluentFuture.from(resultsFuture)
  .addCallback(new FutureCallback<Map<Profile, String>>() {
    @Override
    public void onSuccess(Map<Profile, String> results) {
      for (Profile profile : results.keySet()) {
        Log.w("tag", "CROSS_PROFILE profile: " + profile.asInt()
          +   "; result: " + results.get(profile));
      }
    }
    @Override
    public void onFailure(Throwable t) {
      Log.e(TAG, "Failed to say hello world on both profiles", t);
    }
  }, directExecutor());
向 SDK 提供实例
当然,前面提到的 helloWorld 方法调用针对的是生成的
而不是实际的类别。通常,您的真实类是单例或依赖于依赖项注入框架(例如 Dagger)的其他复杂类。接收者
允许在另一个配置文件上对实际类调用逻辑,每个自定义
@CrossProfile 类的
@CrossProfileProvider 类。创建此类。
public class HelloWorldProvider {
  @CrossProfileProvider
  public HelloWorld getHelloWorld() {
    return new HelloWorld();
  }
}
其他布线
支持自定义类和方法所需的代码生成要求 只需少量额外布线即可。这是为了处理 大量构建目标和可见性要求。
首先,为现有的或新的高级类添加注解
@CrossProfileConfiguration,指向您的提供程序类。
@CrossProfileConfiguration(providers = HelloWorldProvider.class)
abstract class HelloWorldConfiguration {}
接着,将自动生成的服务添加到清单中
<application> tag。在您构建项目之前,此问题可能无法解决。
<service
android:name="com.google.android.enterprise.connectedapps.CrossProfileConnector_Service"
android:exported="false"/>
最后,出于开发目的,请为自己提供 INTERACT_ACROSS_USERS
权限。如果您还没有此 ID,则无法将其保留
但它是最简单的入门方法。首先,将其添加到
如下所示:
<uses-permission
      android:name="android.permission.INTERACT_ACROSS_USERS"
      tools:ignore="ProtectedPermissions"/>
然后,您可以从命令行使用 adb 向自己授予该权限,如下所示 (如果您的应用尚未安装该模块):
adb shell pm grant <your package> android.permission.INTERACT_ACROSS_USERS
如果您无法依赖 Guava 使用 Future,则需要进行一些更改。首先,返回“Hello World”并输出结果 进行跨资料调用其次,由于这些调用现在是同步的 您应该将跨配置文件调用和输出结果放入 连接监听器。
当您运行“make a cross-profile cal”下列出的代码时您应该会看到 “Hello World”的两个日志,每个配置文件各一个。如果只有一个日志 请确保您已在这两个资料中安装了您的应用,并且已授予 权限。