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

এই গাইড সংস্করণ 5.0 এ স্থানান্তরিত করার জন্য প্রয়োজনীয় পরিবর্তনগুলি বর্ণনা করে।

Gradle এবং Android Gradle প্লাগইন আপডেট

Gradle এবং Android Gradle প্লাগইন সংস্করণ আপগ্রেড করুন

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

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

  • একটি Gradle সংস্করণ কমপক্ষে v7.5.0 কিন্তু v7.6.0 এর চেয়ে বেশি নয়।
  • একটি Android Gradle Plugin (AGP) সংস্করণ v7.4.x পরিসরে।

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

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

জাভা 7 থেকে জাভা 8 লাইব্রেরি সমর্থন মাইগ্রেশন

ধাপ 1 - Java 8 লাইব্রেরি সমর্থন সক্ষম করুন

উৎস

যেহেতু SDK min 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'
}

ধাপ 2 - প্রোগার্ড বা ডেক্সগার্ড থেকে R8 এ মাইগ্রেট করুন

R8, উৎস

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

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

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

এই লাইনগুলি সরানো সাধারণত সেই সমস্যাগুলি সমাধান করে।

কোটলিন 1.6 থেকে 1.9 মাইগ্রেশন

ধাপ 1 - Kotlin Gradle Plugin 1.9.0-এ মাইগ্রেট করুন

উৎস

আপনার অ্যাপ্লিকেশন টপ লেভেল মডিউল build.gradle ফাইলে Kotlin Gradle Plugin সংস্করণ আপডেট করুন। বিল্ডস্ক্রিপ্ট ব্লক থেকে 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 থেকে আপনার আবেদন স্থানান্তর করতে হবে। আরও তথ্যের জন্য অফিসিয়াল মাইগ্রেশন গাইড পড়ুন।

ধাপ 2 - 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 এর যেকোনো রেফারেন্স মুছে ফেলার বিষয়টি নিশ্চিত করুন। উভয় নির্ভরতা কোটলিন 1.8.0 থেকে শুরু করে kotlin-stdlib এ একীভূত করা হয়েছে।

স্ট্যাটাস লিসনার অবচয়

StatusListener ইন্টারফেসটি এখন DriverStatusListener এর অনুকূলে (v6-এ সরানো হবে) অবহেলিত।

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

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

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

সাধারণত, ব্যর্থ অবস্থান আপডেটের জন্য ফ্লিট ইঞ্জিন দ্বারা প্রত্যাবর্তিত ত্রুটি কোডটি পুনরুদ্ধার করতে আপনি 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.
    }
  }
});