Temel örnek

Bu bölümde, en iyi şekilde yararlanabilirsiniz. Böylece, SDK ve başlangıçtaki kullanım hakkında bilgi sahibi olmanızı üzerine konuşacağız. Sürekli olarak takip etmeniz önerilir sağlamak için daha fazla bilgi edindiniz.

İş profiliyle test cihazı kurma

Google, yönetilen bir sistemi simüle etmenize ve test etmenize yardımcı olmak için Test DPC uygulamasını derledi ortama aktarmanızı sağlar. Bir iş profili oluşturur ve , cihazdaki belirli özellikleri etkinleştirmek veya devre dışı bırakmak için kullanılan kontroller içerir.

  • Test DPC uygulamasını yükleyin

    Google Play Store'u açıp Test DPC uygulamasını indirin.

  • İş profili oluşturma

    Uygulama yüklendikten sonra cihazda iki simge görünür: kurulum simgesi ve Test DPC uygulama simgesi. Kurulum simgesine dokunun ve adımları.

Artık biri kişisel uygulamalar, diğeri iş uygulamaları için olmak üzere iki ayrı profiliniz var. Uygulama listesinin üst kısmındaki sekmeler aracılığıyla bunlar arasında geçiş yapabilirsiniz.

kişisel/iş
profil

Uygulamanız yüklenirken, normalde her ikisinde de otomatik olarak profil. Bunu açıkça iş profilinize yüklemeniz gerekirse: --user bağımsız değişkenini adb yüklemesi ile kullanabilir.

$ adb install --user [id number of profile] [path of apk file]

Test cihazının kurulumuyla ilgili daha fazla ayrıntı için şurayı ziyaret edin: bağlantısı.

Uygulamanızın uygun şekilde yapılandırıldığından emin olun

Java 8'i etkinleştir destek ve minSdk değerinizin en az 19 olduğundan emin olun.

Gradle bağımlılıkları ekleme

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'
}

Bu örnekte Guava'yı kullanıyoruz. Bu, SDK'yı kullanma şartı değildir ancak Merhaba Dünya örneğini takip etmek için api("com.google.guava:guava:29.0-android") değerini de eklemeniz gerekir.

Profiller arası test çağrınızı içerecek yeni bir sınıf oluşturun

Bunu daha sonra daha kullanışlı hale getirmek için, gerçek profiller arası çağrılarınızın gelmesini istersiniz.

public class HelloWorld {

  @CrossProfile
  public ListenableFuture<String> helloWorld() {
    return Futures.immediateFuture("Hello world");
  }
}

Vadeli İşlemler için Guava desteğine güvenemiyorsanız şimdilik takipte kal hangi değişiklikleri yapmanız gerektiğini gösteren son adıma bakın.

Profiller arası arama yapma

Bunu gerçekten profiller arası aramalar yapmanız gereken bir sınıfta yapabilirsiniz. daha sonra.

// 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());

Örneği SDK'ya sağlayın

Daha önce bahsedilen helloWorld yöntem çağrısı elbette oluşturulmuş kastettiğim gibi. Çoğunlukla gerçek sınıflarınız single veya diğer ve Dagger gibi bağımlılık yerleştirme çerçevelerine bağlı karmaşık sınıflar bulunuyor. Alıcı: mantığın diğer profildeki gerçek sınıfta çağrılmasına izin verir. @CrossProfile sınıfının @CrossProfileProvider sınıf. Bu sınıfı oluştur.

public class HelloWorldProvider {

  @CrossProfileProvider
  public HelloWorld getHelloWorld() {
    return new HelloWorld();
  }
}

Ek kablo bağlantısı

Özel sınıfları ve yöntemleri desteklemek için gereken kod oluşturma işlemi, ek kablo kurulumu gerekmez. Bu, bir proje yöneticisinin sahip olduğu karmaşık birçok derleme hedefi ve görünürlük gereksinimini geniş ölçekte ele aldık.

Öncelikle, mevcut veya yeni üst düzey sınıflarınıza @CrossProfileConfiguration, sağlayıcı sınıflarınızı işaret ediyor.

@CrossProfileConfiguration(providers = HelloWorldProvider.class)
abstract class HelloWorldConfiguration {}

İkinci olarak, otomatik olarak oluşturulan hizmeti <application> tag Bu durum siz projenizi oluşturana kadar çözümlenmeyebilir.

<service
android:name="com.google.android.enterprise.connectedapps.CrossProfileConnector_Service"
android:exported="false"/>

Son olarak, geliştirme amacıyla kendinize INTERACT_ACROSS_USERS izni gerekir. Henüz yapmadıysanız bunu hesabınızda saklayamazsınız. ama en kolay başlangıç yöntemi de budur. Öncelikle, bunu aşağıdaki gibi düzenleyin:

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

Ardından, adb komutunu kullanarak komut satırından kendinize Aşağıdaki gibi (uygulamanızda zaten yoksa):

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

Vadeli İşlemler için Guava'ya bağımlı hale gelmediyseniz, bunun için anlamına gelir. İlk olarak "Hello World" ifadesini döndürün dizeyi doğrudan girin ve sonuçları tam olarak anlayabilmelidir. İkinci olarak, bu çağrılar artık eşzamanlı olduğundan Profiller arası çağrınızı ve sonuçları yazdırmanızı bağlantı dinleyicisidir.

''Cross-profile cal'' (profiller arası cal) altında listelenen kodu çalıştırdığınızda farklı bir yerde "Hello World" için her profilden birer tane olmak üzere iki günlük. Yalnızca bir günlük alırsanız uygulamanızı her iki profile de yüklediğinizden ve izni verdiğinizden emin olun.