মৌলিক নমুনা

এই বিভাগটি আপনাকে দেখায় কিভাবে আপনার অ্যাপের মধ্যে একটি ক্রস-প্রোফাইল হ্যালো ওয়ার্ল্ড কল তৈরি করতে হয়। এটি আপনাকে SDK এর সাথে পরিচিতি দেবে এবং এর উপরে তৈরি করার জন্য একটি প্রাথমিক বাস্তবায়ন দেবে। আপনাকে আপনার অ্যাপে বিকাশ করে সক্রিয়ভাবে অনুসরণ করার পরামর্শ দেওয়া হচ্ছে।

একটি কাজের প্রোফাইল সহ একটি পরীক্ষা ডিভাইস সেট আপ করুন৷

আপনার নিজের ডিভাইসে একটি পরিচালিত পরিবেশকে অনুকরণ করতে এবং পরীক্ষা করতে সহায়তা করার জন্য Google টেস্ট DPC অ্যাপ তৈরি করে। এটি একটি কাজের প্রোফাইল সেট আপ করবে এবং ডিভাইসে নির্দিষ্ট বৈশিষ্ট্যগুলিকে সক্ষম বা অক্ষম করার জন্য আপনাকে নিয়ন্ত্রণ প্রদান করবে৷

  • টেস্ট ডিপিসি অ্যাপ ইনস্টল করুন

    গুগল প্লে স্টোর খুলুন এবং টেস্ট ডিপিসি অ্যাপ ডাউনলোড করুন।

  • একটি কাজের প্রোফাইল সেট আপ করুন

    একটি অ্যাপ ইনস্টল করা হলে, আপনি ডিভাইসে দুটি আইকন দেখতে পাবেন, একটি সেটআপ আইকন এবং টেস্ট ডিপিসি অ্যাপ আইকন। সেটআপ আইকনে আলতো চাপুন এবং পদক্ষেপগুলি অনুসরণ করুন৷

এখন আপনার দুটি আলাদা প্রোফাইল আছে, একটি ব্যক্তিগত অ্যাপের জন্য এবং একটি কাজের অ্যাপের জন্য। আপনি অ্যাপ তালিকার শীর্ষে থাকা ট্যাবের মাধ্যমে তাদের মধ্যে স্যুইচ করতে পারেন।

personal/work
profile

আপনার অ্যাপ ইনস্টল করার সময়, এটি সাধারণত উভয় প্রোফাইলেই স্বয়ংক্রিয়ভাবে ইনস্টল হবে। আপনার যদি কখনও কাজের প্রোফাইলে স্পষ্টভাবে এটি ইনস্টল করার প্রয়োজন হয়, আপনি adb ইনস্টলের সাথে --user আর্গুমেন্ট ব্যবহার করতে পারেন।

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

একটি পরীক্ষা ডিভাইস সেট আপ সম্পর্কে আরো বিস্তারিত জানার জন্য, এই লিঙ্ক দেখুন.

আপনার আবেদন যথাযথভাবে কনফিগার করা হয়েছে তা নিশ্চিত করুন

জাভা 8 সমর্থন সক্ষম করুন এবং নিশ্চিত করুন যে আপনার minSdk কমপক্ষে 19।

গ্রেডেল নির্ভরতা যোগ করুন

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

আমরা এই উদাহরণে পেয়ারা ব্যবহার করি। এটি SDK ব্যবহার করার প্রয়োজনীয়তা নয়, তবে হ্যালো ওয়ার্ল্ডের সাথে অনুসরণ করার জন্য আপনাকে api("com.google.guava:guava:29.0-android") যোগ করতে হবে।

একটি নতুন ক্লাস তৈরি করুন যাতে আপনার পরীক্ষার ক্রস-প্রোফাইল কল থাকবে

এটিকে পরবর্তীতে আরও উপযোগী করতে, আপনার এটিকে একই প্যাকেজে রাখা উচিত যেখানে আপনি আপনার আসল ক্রস-প্রোফাইল কলগুলি করতে চান৷

public class HelloWorld {

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

আপনি যদি ফিউচার সাপোর্টের জন্য পেয়ারার উপর নির্ভর করতে না পারেন, তবে এখনই অনুসরণ করুন এবং তারপরে চূড়ান্ত পদক্ষেপটি দেখুন যা আপনাকে কোন পরিবর্তন করতে হবে তা বলে।

একটি ক্রস-প্রোফাইল কল করুন

আপনি এমন একটি ক্লাসে এটি করতে পারেন যা পরে সত্যিকারের ক্রস-প্রোফাইল কল করতে হবে।

// 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 মেথড কলটি একটি জেনারেটেড ক্লাসে এবং আসলটি নয়। প্রায়শই, আপনার আসল ক্লাসগুলি সিঙ্গলটন বা অন্যান্য জটিল ক্লাস নির্ভরতা ইনজেকশন ফ্রেমওয়ার্ক যেমন ড্যাগারের উপর নির্ভরশীল। অন্য প্রোফাইলে আসল ক্লাসে লজিক কল করার অনুমতি দিতে, প্রতিটি কাস্টম @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

আপনি যদি ভবিষ্যতের জন্য পেয়ারার উপর নির্ভর করতে সক্ষম না হন তবে আপনাকে কিছু পরিবর্তন করতে হবে। প্রথমত, "হ্যালো ওয়ার্ল্ড" স্ট্রিংটি সরাসরি ফিরিয়ে দিন এবং ক্রস-প্রোফাইল কল আউটের ফলাফলগুলি প্রিন্ট করুন৷ দ্বিতীয়ত, যেহেতু এই কলগুলি এখন সিঙ্ক্রোনাস, তাই আপনার ক্রস-প্রোফাইল কল এবং ফলাফলের মুদ্রণ সংযোগ শ্রোতার ভিতরে রাখা উচিত।

আপনি যখন ''একটি ক্রস-প্রোফাইল ক্যাল করুন''-এর অধীনে তালিকাভুক্ত কোডটি চালান, তখন আপনি ''হ্যালো ওয়ার্ল্ড''-এর জন্য দুটি লগ দেখতে পাবেন, প্রতিটি প্রোফাইল থেকে একটি। আপনি যদি শুধুমাত্র একটি লগ পান তবে নিশ্চিত করুন যে আপনি উভয় প্রোফাইলেই আপনার অ্যাপ ইনস্টল করেছেন এবং অনুমতি দিয়েছেন।