অ্যান্ড্রয়েড ড্রাইভার SDK 5.0 মাইগ্রেশন গাইড

এই নির্দেশিকাটি ৫.০ সংস্করণে স্থানান্তরের জন্য প্রয়োজনীয় পরিবর্তনগুলি বর্ণনা করে।

গ্র্যাডেল এবং অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন আপডেট

গ্রেডল এবং অ্যান্ড্রয়েড গ্রেডল প্লাগইন সংস্করণ আপগ্রেড করুন

প্রথমে, আপনার Gradle এবং Android Gradle Plugin সংস্করণগুলি আপগ্রেড করুন। এই আপগ্রেডে নির্দিষ্ট SDK নির্ভরতার সাথে আরও ভাল সামঞ্জস্যতা অন্তর্ভুক্ত রয়েছে (Kotlin 1.9 সহ), পাশাপাশি কিছু গুরুত্বপূর্ণ বাগ সংশোধন করা হয়েছে।

এই SDK প্রধান রিলিজের জন্য আপনার Android অ্যাপ্লিকেশন প্রকল্পের জন্য নিম্নলিখিত সংস্করণ নির্ভরতা প্রয়োজন:

  • একটি গ্রেডল সংস্করণ কমপক্ষে v7.5.0 কিন্তু v7.6.0 এর চেয়ে বেশি নয়।
  • v7.4.x এর মধ্যে একটি অ্যান্ড্রয়েড গ্রেডল প্লাগইন (AGP) সংস্করণ।

আপনি প্লাগইনগুলির একটি উচ্চতর সংস্করণ লক্ষ্য করতে পারেন; তবে, আপনি অবচয় সংক্রান্ত সতর্কতার সম্মুখীন হতে পারেন, অথবা কিছু নতুন বৈশিষ্ট্য কাজ নাও করতে পারে।

Gradle সংস্করণটি পরিবর্তন করতে, আপনার প্রকল্পের /gradle/wrapper/gradle-wrapper.properties ফাইলের লাইনটি পরিবর্তন করুন।

distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip

অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন সংস্করণটি পরিবর্তন করতে, build.gradle ফাইলটি পরিবর্তন করুন যাতে buildscript ব্লক রয়েছে। উদাহরণস্বরূপ:

buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.1'
    }
}

জাভা ৭ থেকে জাভা ৮ লাইব্রেরি সাপোর্ট মাইগ্রেশন

ধাপ ১ - জাভা ৮ লাইব্রেরি সাপোর্ট সক্ষম করুন

উৎস

যেহেতু SDK-এর ন্যূনতম API স্তর 23 এবং প্রয়োজনীয় AGP সংস্করণ 7.4+, তাই কনফিগারেশনটি উল্লেখিত উৎস ডকুমেন্টেশন থেকে কিছুটা আলাদা।

buildscript {

    repositories {
        google()
        mavenCentral()
        jcenter()
        maven {
            url = uri("https://storage.googleapis.com/r8-releases/raw")
        }
    }
    dependencies {
        classpath 'com.android.tools:r8:8.0.46'
        classpath 'com.android.tools.build:gradle:7.4.1'
    }
}

android {
    compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.0.3'
}

ধাপ ২ - প্রোগার্ড বা ডেক্সগার্ড থেকে R8 এ স্থানান্তর করুন

R8, উৎস

AGP v7.4+ বাইনারির জন্য ডিফল্ট সঙ্কোচন, অস্পষ্টতা এবং অপ্টিমাইজেশন টুল হিসেবে R8 ব্যবহার করে, তাই এই মুহুর্তে কোনও বিশেষ পদক্ষেপের প্রয়োজন নেই।

যদি প্রকল্পটি AGP 4.0+ থেকে স্থানান্তরিত হয়, তাহলে AGP ফাইল অপসারণ সম্পর্কে নিম্নলিখিত সতর্কতা জারি করতে পারে:

  • build.gradle ফাইলে useProguard true ব্যবহার
  • gradle.properties ফাইলে android.enableR8=false ব্যবহার

এই লাইনগুলি অপসারণ করলে সাধারণত এই সমস্যাগুলি সমাধান হয়ে যায়।

কোটলিন ১.৬ থেকে ১.৯ মাইগ্রেশন

ধাপ ১ - কোটলিন গ্র্যাডেল প্লাগইন ১.৯.০ এ মাইগ্রেট করুন

উৎস

আপনার অ্যাপ্লিকেশন টপ লেভেল মডিউল build.gradle ফাইলে Kotlin Gradle Plugin সংস্করণটি আপডেট করুন। যদি এটি অনুপস্থিত থাকে, তাহলে buildscript ব্লক থেকে নির্ভরতাগুলিতে org.jetbrains.kotlin:kotlin-gradle-plugin যোগ করতে ভুলবেন না।

buildscript {
  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
  }
}

যদি আপনি Kotlin Gradle Plugin 1.6.X অথবা 1.7.X থেকে আসেন, তাহলে আপনাকে Kotlin-synthetics থেকে আপনার অ্যাপ্লিকেশনটি মাইগ্রেট করতে হবে। আরও তথ্যের জন্য অফিসিয়াল মাইগ্রেশন গাইডটি দেখুন।

ধাপ ২ - kotlin-stdlib 1.9.0 তে আপগ্রেড করুন

উৎস

আপনার অ্যাপ্লিকেশন build.gradle ফাইলে kotlin-stblib 1.9.0 এ আপগ্রেড করুন।

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}

kotlin-stdlib-jdk7 অথবা kotlin-stdlib-jdk8 এর যেকোনো রেফারেন্স মুছে ফেলতে ভুলবেন না। Kotlin 1.8.0 থেকে শুরু করে উভয় নির্ভরতাই kotlin-stdlib এ একত্রিত করা হয়েছে।

StatusListener-এর অবচয়

StatusListener ইন্টারফেসটি এখন DriverStatusListener এর পক্ষে অবচিত (v6 এ সরানো হবে)।

প্রধানত ৩টি পরিবর্তন রয়েছে:

  1. implements ইন্টারফেসটি StatusListener থেকে DriverStatusListener এ পরিবর্তন করুন।
  2. updateStatus এ একটি Nullable cause প্যারামিটার যোগ করুন।
  3. setStatusListener এর পরিবর্তে DriverContextBuilder.setDriverStatusListener কল করুন।

DriverStatusListener StatusListener এর মতো একই কাঠামো ব্যবহার করে। তাদের মধ্যে প্রধান পার্থক্য হল DriverStatusListener.updateStatus() cause নামে একটি অতিরিক্ত প্যারামিটার নেয়। এটি ব্যবহারকারীদের ত্রুটির অবস্থা স্তর সহ আপডেটের কারণ সম্পর্কে অন্তর্দৃষ্টি প্রদান করে।

সাধারণত, ব্যর্থ অবস্থান আপডেটের জন্য Fleet Engine দ্বারা ফেরত আসা ত্রুটি কোডটি পুনরুদ্ধার করতে আপনি cause ব্যবহার করবেন।

নিম্নলিখিত নমুনাটি StatusListener কীভাবে বাস্তবায়ন করতে হয় তা ব্যাখ্যা করে:

class MyStatusListener implements StatusListener {
  /** Called when background status is updated during actions such as location reporting. */
  @Override
  public void updateStatus(
      StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
    // Implementation
  }
}

// Inject StatusListener into DriverContext.
DriverContextBuilder.setStatusListener(new MyStatusListener());

নিম্নলিখিতটি DriverStatusListener বাস্তবায়নের একটি নমুনা দেখায়:

class MyStatusListener implements DriverStatusListener {
  /** Called when background status is updated during actions such as location reporting. */
  @Override
  public void updateStatus(
      StatusLevel statusLevel, StatusCode statusCode, String statusMsg, @Nullable Throwable cause) {
    // Existing implementation

    if (cause != null && cause instanceof StatusRuntimeException) {
      if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
        // NOT_FOUND gRPC exception thrown by Fleet Engine.
      }
    }
  }
}

DriverContextBuilder.setStatusListener(new MyStatusListener());

একটি কার্যকরী ইন্টারফেস হিসেবে DriverStatusListener প্রয়োগ করুন

DriverStatusListener তার পূর্বসূরীর মতোই জাভা ফাংশনাল ইন্টারফেস সমর্থন করে। এখানে এর একটি উদাহরণ দেওয়া হল:

DriverContextBuilder.setDriverStatusListener((statusLevel, statusCode, statusMsg, cause) -> {
  if (cause != null && cause instanceof StatusRuntimeException) {
    if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
      // NOT_FOUND gRPC exception thrown by Fleet Engine.
    }
  }
});