আপনার Android Studio প্রোজেক্ট সেট-আপ করা

এই পৃষ্ঠা থেকে জানা যায় যে কীভাবে আপনার ডেভেলপমেন্ট প্রোজেক্টে Navigation SDK ইন্টিগ্রেট করতে হয়।

আপনার প্রোজেক্টে Navigation SDK যোগ করা

Google Maven Repository-এর মাধ্যমে নেভিগেশন SDK উপলভ্য। আপনার Gradle build.gradle অথবা Maven pom.xml কনফিগারেশন ব্যবহার করে আপনার প্রোজেক্টে SDK যোগ করতে পারবেন।

  1. আপনার Gradle বা Maven কনফিগারেশনে নিম্নলিখিত ডিপেন্ডেন্সি যোগ করুন, Android-এর জন্য Navigation SDK-এর কাঙ্খিত ভার্সনের জন্য VERSION_NUMBER প্লেসহোল্ডার প্রতিস্থাপন করুন।

    Gradle

    আপনার মডিউল-লেভেল build.gradle-এ নিম্নলিখিতগুলি যোগ করুন:

    dependencies {
            ...
            implementation 'com.google.android.libraries.navigation:navigation:VERSION_NUMBER'
    }
    

    Maven

    আপনার pom.xml-এ নিম্নলিখিতগুলি যোগ করুন:

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.navigation</groupId>
        <artifactId>navigation</artifactId>
        <version>VERSION_NUMBER</version>
      </dependency>
    </dependencies>
    
  2. Maps SDK ব্যবহার করে এমন কোনও ডিপেন্ডেন্সি থাকলে, Maps SDK-এর উপর নির্ভর করে এমন প্রতিটি ঘোষিত ডিপেন্ডেন্সি থেকে ডিপেন্ডেন্সি বাদ দিতে হবে।

    Gradle

    আপনার টপ-লেভেল build.gradle-এ নিম্নলিখিতগুলি যোগ করুন:

    allprojects {
            ...
            // Required: you must exclude the Google Play service Maps SDK from
            // your transitive dependencies to make sure there won't be
            // multiple copies of Google Maps SDK in your binary, as the Navigation
            // SDK already bundles the Google Maps SDK.
            configurations {
                implementation {
                    exclude group: 'com.google.android.gms', module: 'play-services-maps'
                }
            }
    }
    

    Maven

    আপনার pom.xml-এ নিম্নলিখিতগুলি যোগ করুন:

    <dependencies>
      <dependency>
      <groupId>project.that.brings.in.maps</groupId>
      <artifactId>MapsConsumer</artifactId>
      <version>1.0</version>
        <exclusions>
          <!-- Navigation SDK already bundles Maps SDK. You must exclude it to prevent duplication-->
          <exclusion>  <!-- declare the exclusion here -->
            <groupId>com.google.android.gms</groupId>
            <artifactId>play-services-maps</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    </dependencies>
    

বিল্ড কনফিগার করুন

প্রোজেক্ট তৈরি করার পরে, আপনি Navigation SDK-এর সফল বিল্ড ও ব্যবহারের জন্য সেটিংস কনফিগার করতে পারবেন।

স্থানীয় প্রপার্টি আপডেট করুন

  • Gradle স্ক্রিপ্ট ফোল্ডারে, local.properties ফাইলটি খুলুন এবং android.useDeprecatedNdk=true যোগ করুন।

Gradle বিল্ড স্ক্রিপ্ট আপডেট করুন

  • build.gradle (Module:app) ফাইলটি খুলুন এবং Navigation SDK-এর জন্য প্রয়োজনীয়তা পূরণ করতে সেটিংস আপডেট করার জন্য নিম্নলিখিত নির্দেশিকা ব্যবহার করুন এবং অপ্টিমাইজেশন বিকল্প সেট করার কথাও বিবেচনা করুন।

    Navigation SDK-এর জন্য প্রয়োজনীয় সেটিংস

    1. minSdkVersion-এর মান ২৪ বা তার বেশি সেট করুন।
    2. targetSdkVersion ৩৬ বা তার বেশি সেট করুন।
    3. এমন একটি dexOptions সেটিং যোগ করুন যা javaMaxHeapSize বাড়ায়।
    4. অতিরিক্ত লাইব্রেরির জন্য লোকেশন সেট করুন।
    5. Navigation SDK-এর জন্য repositories এবং dependencies যোগ করুন।
    6. ডিপেন্ডেন্সিতে ভার্সন নম্বর লেটেস্ট উপলভ্য ভার্সন দিয়ে পরিবর্তন করুন।

    বিল্ড টাইম কমানোর জন্য ঐচ্ছিক সেটিংস

    • ডিপেন্ডেন্সি থেকে অব্যবহৃত কোড ও রিসোর্স সরিয়ে দিতে R8/ProGuard ব্যবহার করে কোড ও রিসোর্স সরিয়ে দেওয়ার সুবিধা চালু করুন। R8/ProGuard ধাপটি রান করতে অনেক বেশি সময় লাগলে, ডেভেলপমেন্টের কাজের জন্য মাল্টিডেক্স চালু করার কথা বিবেচনা করুন।
    • বিল্ডে অন্তর্ভুক্ত ভাষা অনুবাদের সংখ্যা কমান: ডেভেলপমেন্টের সময় একটি ভাষার জন্য resConfigs সেট করুন। চূড়ান্ত বিল্ডের জন্য, আপনি আসলে যে ভাষা ব্যবহার করেন তার জন্য resConfigs সেট করুন। ডিফল্ট হিসেবে, Gradle-এ Navigation SDK-এর মাধ্যমে কাজ করে এমন সব ভাষার জন্য রিসোর্স স্ট্রিং অন্তর্ভুক্ত থাকে।

    Java8-এর জন্য ডিসুগারিং যোগ করুন

    • আপনি যদি Android Gradle প্লাগ-ইন 4.0.0 বা তার পরবর্তী ভার্সন ব্যবহার করে আপনার অ্যাপ তৈরি করেন, তাহলে প্লাগ-ইনটি বেশ কয়েকটি Java 8 ল্যাঙ্গুয়েজ API ব্যবহার করার জন্য সহায়তা প্রদান করে। আরও তথ্যের জন্য Java 8 ডিসুগারিং সহায়তা দেখুন। কম্পাইল ও ডিপেন্ডেন্সি বিকল্প কীভাবে ব্যবহার করবেন তা জানতে নিচে দেওয়া বিল্ড স্ক্রিপ্ট স্নিপেটের উদাহরণ দেখুন।
    • আপনার Navigation SDK ভার্সনের সাথে ম্যাচ করে এমন Gradle, Android Gradle প্লাগ-ইন (AGP) এবং Desugar লাইব্রেরি ভার্সন ব্যবহার করুন। নিচের টেবিলটি দেখুন।
    • app মডিউল এবং Navigation SDK-এর উপর সরাসরি নির্ভর করে এমন যেকোনও মডিউলের জন্য Desugar লাইব্রেরি চালু করতে হবে।

নিচের সারণীতে প্রতিটি Navigation SDK ভার্সনের জন্য প্রয়োজনীয় Gradle, AGP ও Desugar লাইব্রেরি ভার্সনের তালিকা দেওয়া হল।

Navigation SDK ভার্সন Gradle ভার্সন AGP ভার্সন Desugar লাইব্রেরি
8.0.0 এবং তার পরবর্তী যেকোনও ভার্সন 9.1.0 9.0.1 com.android.tools:desugar_jdk_libs_nio:2.1.5
7.7.0 থেকে 7.9.0 ৮.১৩ 8.13.2 com.android.tools:desugar_jdk_libs_nio:2.1.5
7.3.0 থেকে 7.6.0 8.11.1 8.10.0 com.android.tools:desugar_jdk_libs_nio:2.0.3

অ্যাপ্লিকেশনের জন্য Gradle বিল্ড স্ক্রিপ্টের উদাহরণ নিচে দেওয়া হল। আপডেট করা ডিপেন্ডেন্সি সেটের জন্য স্যাম্পেল অ্যাপ চেক করুন, কারণ আপনি যে Navigation SDK-এর ভার্সন ব্যবহার করছেন তা এই ডকুমেন্টেশনের থেকে কিছুটা এগিয়ে বা পিছিয়ে থাকতে পারে।

apply plugin: 'com.android.application'

ext {
    navSdk = "__NAVSDK_VERSION__"
}

android {
    compileSdk 33
    buildToolsVersion='28.0.3'

    defaultConfig {
        applicationId "<your id>"
        // Navigation SDK supports SDK 23 and later.
        minSdkVersion 23
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"
        // Set this to the languages you actually use, otherwise you'll include resource strings
        // for all languages supported by the Navigation SDK.
        resConfigs "en"
        multiDexEnabled true
    }

    dexOptions {
        // This increases the amount of memory available to the dexer. This is required to build
        // apps using the Navigation SDK.
        javaMaxHeapSize "4g"
    }
    buildTypes {
        // Run ProGuard. Note that the Navigation SDK includes its own ProGuard configuration.
        // The configuration is included transitively by depending on the Navigation SDK.
        // If the ProGuard step takes too long, consider enabling multidex for development work
        // instead.
        all {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    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
    }
}

repositories {
    // Navigation SDK for Android and other libraries are hosted on Google's Maven repository.
    google()
}

dependencies {
    // Include the Google Navigation SDK.
    // Note: remember to exclude Google Play service Maps SDK from your transitive
    // dependencies to avoid duplicate copies of the Google Maps SDK.
    api "com.google.android.libraries.navigation:navigation:${navSdk}"

    // Declare other dependencies for your app here.

    annotationProcessor "androidx.annotation:annotation:1.7.0"
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.5'
}

আপনার অ্যাপে API key যোগ করুন

এই বিভাগে আপনার API কী কীভাবে স্টোর করবেন তা বর্ণনা করা হয়েছে যাতে আপনার অ্যাপ নিরাপদে রেফারেন্স করতে পারে। আপনার ভার্সন কন্ট্রোল সিস্টেমে API কী চেক করা উচিত নয়, তাই আমরা আপনার প্রোজেক্টের রুট ডিরেক্টরিতে secrets.properties ফাইলে এটি স্টোর করার এবং ভার্সন কন্ট্রোল থেকে সেই ফাইলটি বাদ দেওয়ার সাজেশন দিই। Gradle প্রপার্টি ফাইল সম্পর্কে আরও জানতে, Gradle প্রপার্টি ফাইল দেখুন।

এই টাস্ক আরও সহজ করতে, আমরা আপনাকে Android-এর জন্য Secrets Gradle প্লাগ-ইন ব্যবহার করার সাজেশন দিই।

Android-এর জন্য Secrets Gradle প্লাগ-ইন ইনস্টল করতে এবং আপনার API key স্টোর করতে:

  1. Android Studio-তে, আপনার টপ-লেভেল build.gradle.kts বা build.gradle ফাইল খুলুন এবং plugins ব্লকে নিম্নলিখিত কোড যোগ করুন।

    Kotlin

    plugins {
        // ...
        id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") version "2.0.1" apply false
    }

    Groovy

    plugins {
        // ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
    }
  2. আপনার মডিউল-লেভেল build.gradle.kts বা build.gradle ফাইল খুলুন এবং নিম্নলিখিত কোডটি plugins এলিমেন্টে যোগ করুন।

    Kotlin

    plugins {
        id("com.android.application")
        // ...
        id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
    }

    Groovy

    plugins {
        id 'com.android.application'
        // ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    }
  3. আপনি Android Studio ব্যবহার করলে, Gradle-এর সাথে আপনার প্রোজেক্ট সিঙ্ক করুন।
  4. আপনার টপ-লেভেল ডিরেক্টরিতে secrets.properties ফাইলটি খুলুন, এবং তারপরে নিম্নলিখিত কোডটি যোগ করুন। YOUR_API_KEY-এর জায়গায় আপনার API key লিখুন। আপনার .gitignore ফাইলে secrets.properties যোগ করতে ভুলবেন না (অথবা আপনার ভার্সন কন্ট্রোল সিস্টেম থেকে এটি বাদ দিন) যাতে আপনি ভার্সন কন্ট্রোলে আপনার API কী চেক না করেন।
    MAPS_API_KEY=YOUR_API_KEY
  5. আপনার টপ-লেভেল ডিরেক্টরিতে local.defaults.properties ফাইল তৈরি করুন, secrets.properties ফাইলের মতো একই ফোল্ডার এবং তারপর নিম্নলিখিত কোড যোগ করুন।

    MAPS_API_KEY=DEFAULT_API_KEY

    এই ফাইলের উদ্দেশ্য হল API কী-এর জন্য একটি ব্যাক-আপ লোকেশন প্রদান করা যদি secrets.properties ফাইলটি খুঁজে না পাওয়া যায় যাতে বিল্ড ব্যর্থ না হয়। আপনি যদি এমন কোনও ভার্সন কন্ট্রোল সিস্টেম থেকে অ্যাপ ক্লোন করেন যা secrets.properties বাদ দেয় এবং আপনি এখনও API কী প্রদান করার জন্য স্থানীয়ভাবে secrets.properties ফাইল তৈরি না করে থাকেন, তাহলে এটি হতে পারে।

  6. আপনি হয় AndroidManifest.xml ফাইলে API key যোগ করতে পারেন অথবা প্রোগ্রাম্যাটিক্যালি API key দিতে পারেন।
    • AndroidManifest.xml-এ আপনার API key যোগ করুন:
      <meta-data
          android:name="com.google.android.geo.API_KEY"
          android:value="${MAPS_API_KEY}" />
              

      মনে রাখবেন: API key-এর জন্য সাজেস্ট করা মেটাডেটার নাম হল com.google.android.geo.API_KEY। এই নামের একটি 'কী' Android প্ল্যাটফর্মে একাধিক Google Maps-ভিত্তিক API-তে যাচাইকরণের জন্য ব্যবহার করা যেতে পারে, যার মধ্যে Android-এর জন্য Navigation SDK অন্তর্ভুক্ত। পুরনো ভার্সনের সাথে মানানসই হওয়ার জন্য, API-তে com.google.android.maps.v2.API_KEY নামও কাজ করে। এই লিগ্যাসি নাম শুধুমাত্র Android Maps API v2-তে যাচাইকরণের অনুমতি দেয়। কোনও অ্যাপ্লিকেশন শুধুমাত্র একটি API কী মেটাডেটার নাম উল্লেখ করতে পারে। দুটিই নির্দিষ্ট করা থাকলে, API ব্যতিক্রম দেখায়।

    • প্রোগ্র্যামাটিক উপায়ে API key প্রদান করুন:

      Secrets Gradle প্লাগ-ইন BuildConfig ক্লাসে 'কী' উপলভ্য করে। আপনার অ্যাপের ইনিশিয়ালাইজেশনে (যেমন, আপনার Application.onCreate() মেথডে), নিম্নলিখিতভাবে মেথড কল করুন:

      Kotlin

      1. নিম্নলিখিত ইমপোর্ট স্টেটমেন্ট যোগ করুন:
        import com.google.android.libraries.navigation.NavigationApi
      2. আপনার Application.onCreate() পদ্ধতিতে নিম্নলিখিত তথ্য যোগ করুন:
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY)

      Java

      1. নিম্নলিখিত ইমপোর্ট স্টেটমেন্ট যোগ করুন:
        import com.google.android.libraries.navigation.NavigationApi;
      2. আপনার Application.onCreate() পদ্ধতিতে নিম্নলিখিত তথ্য যোগ করুন:
        NavigationApi.setApiKey(BuildConfig.MAPS_API_KEY);
      মনে রাখবেন: setApiKey() ব্যবহার করার সময়, নিম্নলিখিত বিষয়গুলি মনে রাখবেন:
      • একটি নন-নাল, নন-এম্পটি API key প্রদান করুন।
      • আপনার অ্যাপ্লিকেশনের লাইফটাইমে শুধুমাত্র একবার setApiKey() কল করুন। একাধিকবার কল করা হলে, পদ্ধতিটি একটি IllegalStateException থ্রো করে।
      • Navigator-এর মতো অন্য কোনও নেভিগেশন SDK কম্পোনেন্ট শুরু করার আগে setApiKey() কল করুন।
      • এই পদ্ধতিতে আপনি যে কী প্রদান করেন তা আপনার AndroidManifest.xml-এ থাকা যেকোনও API কী ওভাররাইড করে।
      • Navigation SDK ভার্সন 7.6 বা তার পরবর্তী ভার্সন ব্যবহার করুন।
  7. Android Studio-তে, আপনার মডিউল-লেভেল build.gradle.kts বা build.gradle ফাইল খুলুন এবং secrets প্রপার্টি এডিট করুন। secrets প্রপার্টি না থাকলে, এটি যোগ করুন।

    propertiesFileName-কে "secrets.properties"-এ সেট করতে, defaultPropertiesFileName-কে "local.defaults.properties"-এ সেট করতে এবং অন্য যেকোনও প্রপার্টি সেট করতে প্লাগ-ইনের প্রপার্টি এডিট করুন।

    Kotlin

    secrets {
        // To add your Maps API key to this project:
        // 1. If the secrets.properties file does not exist, create it in the root directory (the same folder as the root local.properties file).
        // 2. Add this line, where YOUR_API_KEY is your API key:
        //        MAPS_API_KEY=YOUR_API_KEY
        propertiesFileName = "secrets.properties"
    
        // A properties file containing default secret values. This file can be
        // checked in version control.
        defaultPropertiesFileName = "local.defaults.properties"
    }

    Groovy

    secrets {
        // To add your Maps API key to this project:
        // 1. If the secrets.properties file does not exist, create it in the root directory (the same folder as the root local.properties file).
        // 2. Add this line, where YOUR_API_KEY is your API key:
        //        MAPS_API_KEY=YOUR_API_KEY
        propertiesFileName = "secrets.properties"
    
        // A properties file containing default secret values. This file can be
        // checked in version control.
        defaultPropertiesFileName = "local.defaults.properties"
    }

আপনার অ্যাপে প্রয়োজনীয় অ্যাট্রিবিউশন অন্তর্ভুক্ত করুন

আপনার অ্যাপে Android-এর জন্য Navigation SDK ব্যবহার করলে, অ্যাপের আইনি বিজ্ঞপ্তি বিভাগে অ্যাট্রিবিউশন টেক্সট ও ওপেন সোর্স লাইসেন্স অন্তর্ভুক্ত করতে হবে।

আপনি Android-এর জন্য Navigation SDK জিপ ফাইলে প্রয়োজনীয় অ্যাট্রিবিউশন টেক্সট এবং ওপেন সোর্স লাইসেন্স খুঁজে পেতে পারেন:

  • NOTICE.txt
  • LICENSES.txt

আপনি যদি মোবিলিটি বা ফ্লিট ইঞ্জিন ডেলিভারি গ্রাহক হন

আপনি যদি মোবিলিটি বা ফ্লিট ইঞ্জিন ডেলিভারি গ্রাহক হন, তাহলে মোবিলিটি ডকুমেন্টেশনে বিলিং সম্পর্কে জানুন। ট্রানজ্যাকশন রেকর্ড করা সম্পর্কে আরও তথ্যের জন্য, এগুলি দেখুন: বিলিং সেট-আপ করা, বিল করা যায় এমন ট্রানজ্যাকশন রেকর্ড করা, রিপোর্টিং এবং বিল করা যায় এমন ট্রানজ্যাকশন রেকর্ড করা (Android)।

ম্যানুয়াল ডিপেন্ডেন্সি (নন-Gradle/Maven)

আপনার বিল্ড সিস্টেম যদি ট্রানজিটিভ ডিপেন্ডেন্সি (যেমন Bazel) সমাধান না করে, অথবা আপনি যদি ম্যানুয়ালি AAR ইন্টিগ্রেট করেন, তাহলে আপনাকে অবশ্যই আপনার প্রোজেক্টে এই ডিপেন্ডেন্সি যোগ করতে হবে। Gradle ও Maven অটোমেটিক এগুলি সমাধান করে।

  • androidx.datastore:datastore-core
  • androidx.datastore:datastore-guava
  • com.google.guava:listenablefuture
  • androidx.concurrent:concurrent-futures