Android Driver SDK 5.0 মাইগ্রেশন গাইড

এই নির্দেশিকা থেকে আপনি ভার্সন 5.0-তে মাইগ্রেট করার জন্য প্রয়োজনীয় পরিবর্তনগুলি সম্পর্কে জানতে পারবেন।

Gradle ও Android Gradle প্লাগ-ইন আপডেট

Gradle ও Android Gradle প্লাগ-ইন ভার্সন আপগ্রেড করা

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

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

  • Gradle ভার্সন কমপক্ষে v7.5.0 হতে হবে, তবে v7.6.0-এর বেশি নয়।
  • v7.4.x রেঞ্জের মধ্যে Android Gradle Plugin (AGP) ভার্সন।

আপনি প্লাগ-ইনের আরও উন্নত ভার্সন টার্গেট করতে পারেন; তবে, আপনি বন্ধ হয়ে যাওয়া সংক্রান্ত সতর্কতা পেতে পারেন অথবা কিছু নতুন ফিচার কাজ নাও করতে পারে।

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

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

Android Gradle প্লাগ-ইন ভার্সন পরিবর্তন করতে, build.gradle ফাইল পরিবর্তন করুন যাতে buildscript ব্লক আছে। যেমন:

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

Java 7 থেকে Java 8 লাইব্রেরি সাপোর্ট মাইগ্রেশন

ধাপ ১ - Java 8 লাইব্রেরি সাপোর্ট চালু করা

সোর্স

SDK-এর ন্যূনতম API লেভেল ২৩ এবং প্রয়োজনীয় AGP ভার্সন ৭.৪+ হওয়ার কারণে, কনফিগারেশন উল্লেখ করা সোর্স ডকুমেন্টেশনের থেকে সামান্য আলাদা।

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

ধাপ ২ - Proguard বা Dexguard থেকে R8-এ মাইগ্রেট করা

R8, সোর্স

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

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

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

এইসব লাইন সরিয়ে দিলে সাধারণত সেইসব সমস্যার সমাধান হয়ে যায়।

Kotlin 1.6 থেকে 1.9-এ মাইগ্রেশন

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

সোর্স

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

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-stdlib Kotlin 1.8.0 থেকে শুরু করে কনসোলিডেট করা হয়েছে।

StatusListener বাতিল করা

StatusListener ইন্টারফেস এখন বন্ধ করা হয়েছে (v6 থেকে সরিয়ে দেওয়া হবে), এর পরিবর্তে DriverStatusListener ব্যবহার করুন।

মূলত ৩টি পরিবর্তন করা হয়েছে:

  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-এ Java ফাংশনাল ইন্টারফেস কাজ করে, ঠিক যেমনটি এর পূর্বসূরিতে কাজ করত। এখানে এর একটি উদাহরণ দেওয়া হল:

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.
    }
  }
});