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

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

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

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

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

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

  • Gradle ভার্সন কমপক্ষে v7.5.0 কিন্তু v7.6.0-এর বেশি নয়।
  • অ্যান্ড্রয়েড গ্রেডল প্লাগইন (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'
    }
}

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

ধাপ ১ - জাভা ৮ লাইব্রেরি সমর্থন সক্রিয় করুন

উৎস

যেহেতু 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-এ স্থানান্তরিত হন

আর৮, উৎস

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

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

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

এই লাইনগুলো মুছে দিলে সাধারণত সমস্যাগুলো সমাধান হয়ে যায়।

কোটলিন ১.৬ থেকে ১.৯ এ স্থানান্তর

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

উৎস

আপনার অ্যাপ্লিকেশনের শীর্ষ স্তরের মডিউলের build.gradle ফাইলে Kotlin Gradle Plugin-এর সংস্করণ আপডেট করুন। যদি এটি অনুপস্থিত থাকে, তবে buildscript ব্লকের dependencies-এ 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 অপ্রচলিত

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

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

  1. implements ইন্টারফেসটি StatusListener থেকে DriverStatusListener এ পরিবর্তন করুন।
  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.
    }
  }
});