Android ड्राइवर 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 के बाद का नहीं होना चाहिए.
  • एक Android Gradle प्लग इन (AGP) वर्शन, v7.4.x की रेंज में आता है.

आप प्लग इन के उच्च वर्शन को लक्षित कर सकते हैं; हालांकि, आपको यह पता चल सकता है कि इस्तेमाल न करने की चेतावनियां मिल सकती हैं या कुछ नई सुविधाएं शायद काम न करें.

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 लाइब्रेरी वर्शन को माइग्रेट करने की सुविधा

चरण 1 - Java 8 लाइब्रेरी समर्थन सक्षम करें

सोर्स

SDK टूल का कम से कम एपीआई लेवल 23 है और ज़रूरी एजीपी वर्शन 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'
}

दूसरा चरण - ProGuard या DexGuard से R8 में माइग्रेट करना

R8, सोर्स

AGP v7.4+ के वर्शन में R8 को डिफ़ॉल्ट रूप से छोटा करने, अस्पष्ट बनाने, और ऑप्टिमाइज़ करने वाले टूल के तौर पर इस्तेमाल किया जाता है बाइनरी के लिए है, इसलिए इस समय किसी विशेष कार्रवाई की ज़रूरत नहीं है.

अगर प्रोजेक्ट को AGP 4.0 और इसके बाद के वर्शन से माइग्रेट किया गया है, तो एजीपी ये चेतावनियां जारी कर सकता है फ़ाइल हटाने के बारे में जानकारी:

  • build.gradle फ़ाइल में useProguard true का इस्तेमाल
  • gradle.properties फ़ाइल में android.enableR8=false का इस्तेमाल

इन लाइनों को हटाने से आम तौर पर ये समस्याएं हल हो जाती हैं.

Kotlin 1.6 से 1.9 माइग्रेशन

पहला चरण - Kotlin Gradle प्लग इन 1.9.0 पर माइग्रेट करें

सोर्स

अपने ऐप्लिकेशन के टॉप लेवल मॉड्यूल में, Kotlin Gradle प्लग इन वर्शन को अपडेट करें Build.gradle फ़ाइल में. org.jetbrains.kotlin:kotlin-gradle-plugin जोड़ना न भूलें बिल्डस्क्रिप्ट ब्लॉक पर निर्भर करता है.

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

आने वाले समय में, आपको अपने ऐप्लिकेशन को Kotlin-सिंथेटिक से माइग्रेट करना होगा Kotlin Gradle प्लगिन 1.6.X या 1.7.X से. आधिकारिक माइग्रेशन देखें गाइड देखें ज़्यादा जानकारी देखें.

दूसरा चरण - kotlin-stdlib को 1.9.0 पर अपग्रेड करें

सोर्स

अपनी ऐप्लिकेशन create.gradle फ़ाइल में kotlin-stblib को 1.9.0 पर अपग्रेड करें.

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

kotlin-stdlib-jdk7 के सभी रेफ़रंस हटाना न भूलें या kotlin-stdlib-jdk8. दोनों डिपेंडेंसी को Kotlin में शुरू होने वाली kotlin-stdlib 1.8.0.

StatusListener के काम करना बंद कर दिया गया है

StatusListener इंटरफ़ेस अब काम नहीं करता है (v6 से हटाए जाने के लिए) कुल DriverStatusListener.

मुख्य रूप से तीन बदलाव होते हैं:

  1. implements इंटरफ़ेस को StatusListener से बदलकर यह करें DriverStatusListener.
  2. updateStatus में Nullable cause पैरामीटर जोड़ें.
  3. इसके बजाय DriverContextBuilder.setDriverStatusListener को कॉल करें: setStatusListener.

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