기본 샘플

이 섹션에서는 있습니다. 이를 통해 SDK에 익숙해지고 Google의 구현입니다. 당신이 하는 일과 더 많은 수익을 창출할 수 있습니다.

직장 프로필로 테스트 기기 설정

Google은 테스트 DPC 앱을 빌드하여 관리형 API를 시뮬레이션하고 자체 개발 환경을 구축해야 합니다. 직장 프로필을 설정하고 기기의 특정 기능을 사용 또는 사용 중지할 수 있는 컨트롤이 제공됩니다.

  • Test DPC 앱 설치

    Google Play 스토어를 열고 Test DPC 앱을 다운로드합니다.

  • 직장 프로필 설정

    앱이 설치되면 기기에 두 개의 아이콘이 표시됩니다. 설정 아이콘 및 Test DPC 앱 아이콘. 설정 아이콘을 누르고 학습합니다.

이제 두 개의 별개 프로필 즉, 개인 앱용 프로필과 직장 앱용 프로필이 생겼습니다. 앱 목록 상단의 탭을 통해 두 프로필 간에 전환할 수 있습니다.

개인/직장
프로필

앱을 설치하면 일반적으로 두 앱 모두에서 자동으로 프로필을 만들 수 있습니다. 직장 프로필에 명시적으로 설치해야 하는 경우 adb install과 함께 --user 인수를 사용할 수 있습니다.

$ 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의 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를 제공합니다. 권한을 부여했는지 확인합니다. 계정이 없는 경우 이 계정을 시작하는 가장 쉬운 방법입니다. 먼저 매니페스트로 정의됩니다.

<uses-permission
      android:name="android.permission.INTERACT_ACROSS_USERS"
      tools:ignore="ProtectedPermissions"/>

이제 다음과 같이 adb를 사용하여 명령줄에서 자신에게 권한을 부여할 수 있습니다. 앱에 아직 없는 경우 다음을 실행합니다.

adb shell pm grant <your package> android.permission.INTERACT_ACROSS_USERS

Futures를 위해 Guava에 의존할 수 없는 경우 몇 가지 있습니다. 먼저 'Hello World' 직접 문자열을 만들고 결과를 인쇄합니다. 두 가지 옵션이 있습니다. 둘째, 이러한 호출은 이제 동기식이므로 교차 프로필 호출 및 결과 인쇄를 연결 리스너입니다.

'교차 프로필 캘린더 만들기' 아래에 나열된 코드를 실행하는 경우 다음과 같이 표시됩니다. 'Hello World'에 대한 두 개의 로그가 있습니다. 로그를 하나만 받으면 두 프로필에 앱을 모두 설치하고 권한을 부여했는지 확인합니다.