Thiết lập dự án Android Studio

Trang này mô tả cách định cấu hình dự án Android Studio để sử dụng Maps SDK cho Android mà không cần dùng mẫu Google Maps được trình bày chi tiết trong phần Bắt đầu nhanh.

Mẫu Google Maps tự động định cấu hình và thêm bản đồ cơ bản vào một dự án Android Studio mới. Tuy nhiên, bạn cũng có thể thêm bản đồ vào một dự án Android sử dụng mẫu Android Studio khác. Để làm vậy, bạn cần định cấu hình dự án theo cách thủ công, sau đó thêm bản đồ.

Bước 1: Thiết lập Android Studio

Tài liệu này mô tả một môi trường phát triển sử dụng Android Studio Hedgehog và Trình bổ trợ Android cho Gradle phiên bản 8.2.

Bước 2. Thiết lập SDK

Thư viện Maps SDK cho Android có sẵn thông qua kho lưu trữ Maven của Google. Để thêm SDK vào ứng dụng, hãy làm như sau:

  1. Trong tệp settings.gradle.kts cấp cao nhất, hãy thêm Cổng trình bổ trợ Gradle, Kho lưu trữ Maven của Google và Kho lưu trữ trung tâm Maven vào khối pluginManagement. Khối pluginManagement phải xuất hiện trước mọi câu lệnh khác trong tập lệnh.
    pluginManagement {
        repositories {
            google()
            mavenCentral()
            gradlePluginPortal()
        }
    } 
  2. Trong tệp settings.gradle.kts cấp cao nhất, hãy thêm kho lưu trữ Maven của Google và kho lưu trữ trung tâm Maven vào khối dependencyResolutionManagement:
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
        repositories {
            google()
            mavenCentral()
        }
    } 
  3. Trong tệp build.gradle.kts hoặc build.gradle ở cấp mô-đun, hãy thêm phần phụ thuộc Dịch vụ Google Play cho Maps SDK cho Android.

    Kotlin

    dependencies {
    
        // Maps SDK for Android
        implementation(libs.play.services.maps)
    }

    Groovy

    dependencies {
    
        // Maps SDK for Android
        implementation "com.google.android.gms:play-services-maps:20.1.0"
    }
  4. Trong tệp build.gradle.kts hoặc build.gradle ở cấp mô-đun, hãy đặt compileSdk và minSdk thành các giá trị sau:

    Kotlin

    android {
        compileSdk = 34
    
        defaultConfig {
            minSdk = 23
            // ...
        }
    }

    Groovy

    android {
        compileSdk 34
    
        defaultConfig {
            minSdk 23
            // ...
        }
    }
  5. Trong phần buildFeatures của tệp build.gradle.kts hoặc build.gradle ở cấp mô-đun, hãy thêm lớp BuildConfig mà bạn có thể dùng để truy cập vào các giá trị siêu dữ liệu được xác định sau trong quy trình này:

    Kotlin

    android {
      // ...
      buildFeatures {
        buildConfig = true
        // ...
      }
    }

    Groovy

    android {
      // ...
      buildFeatures {
        buildConfig true
        // ...
      }
    }
  6. Trong tệp libs.versions.toml, hãy thêm đoạn mã sau:
    [versions]
    play-services-maps = "20.1.0"
    
    [libraries]
    play-services-maps = { module = "com.google.android.gms:play-services-maps", version.ref = "play-services-maps" }
        

Bước 3: Thêm khoá API vào dự án

Phần này mô tả cách lưu trữ khoá API để ứng dụng của bạn có thể tham chiếu một cách an toàn. Bạn không nên kiểm tra khoá API trong hệ thống quản lý phiên bản, vì vậy, bạn nên lưu trữ khoá này trong tệp secrets.properties trong thư mục gốc của dự án và loại trừ tệp đó khỏi hệ thống quản lý phiên bản. Để biết thêm thông tin về tệp thuộc tính Gradle, hãy xem phần Tệp thuộc tính Gradle.

Để đơn giản hoá việc này, bạn nên sử dụng Trình bổ trợ Secrets Gradle cho Android.

Cách cài đặt Trình bổ trợ Secrets Gradle cho Android và lưu trữ khoá API:

  1. Trong Android Studio, hãy mở tệp build.gradle.kts hoặc build.gradle cấp cao nhất rồi thêm mã sau vào khối 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. Mở tệp build.gradle.kts hoặc build.gradle ở cấp mô-đun rồi thêm mã sau vào phần tử 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. Nếu bạn sử dụng Android Studio, hãy đồng bộ hoá dự án với Gradle.
  4. Mở tệp secrets.properties trong thư mục cấp cao nhất, rồi thêm đoạn mã sau. Thay thế YOUR_API_KEY bằng khoá API của bạn. Hãy nhớ thêm secrets.properties vào tệp .gitignore (hoặc loại trừ tệp này khỏi hệ thống quản lý phiên bản) để không đưa khoá API vào hệ thống quản lý phiên bản.
    MAPS_API_KEY=YOUR_API_KEY
  5. Tạo tệp local.defaults.properties trong thư mục cấp cao nhất, cùng thư mục với tệp secrets.properties, rồi thêm mã sau.

    MAPS_API_KEY=DEFAULT_API_KEY

    Mục đích của tệp này là cung cấp vị trí sao lưu cho khoá API nếu không tìm thấy tệp secrets.properties để các bản dựng không bị lỗi. Điều này có thể xảy ra nếu bạn sao chép ứng dụng từ một hệ thống kiểm soát phiên bản bỏ qua secrets.properties và bạn chưa tạo tệp secrets.properties cục bộ để cung cấp khoá API.

  6. Trong tệp AndroidManifest.xml, hãy chuyển đến com.google.android.geo.API_KEY rồi cập nhật thuộc tính android:value như sau:
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
        

    Lưu ý: com.google.android.geo.API_KEY là tên siêu dữ liệu được đề xuất cho khoá API. Bạn có thể dùng khoá có tên này để xác thực với nhiều API dựa trên Google Maps trên nền tảng Android, bao gồm cả Maps SDK cho Android. Để đảm bảo khả năng tương thích ngược, API này cũng hỗ trợ tên com.google.android.maps.v2.API_KEY. Tên cũ này chỉ cho phép xác thực với Android Maps API phiên bản 2. Một ứng dụng chỉ có thể chỉ định một trong các tên siêu dữ liệu khoá API. Nếu bạn chỉ định cả hai, API sẽ gửi một ngoại lệ.

  7. Trong Android Studio, hãy mở tệp build.gradle.kts hoặc build.gradle ở cấp mô-đun rồi chỉnh sửa thuộc tính secrets. Nếu thuộc tính secrets không tồn tại, hãy thêm thuộc tính đó.

    Chỉnh sửa các thuộc tính của trình bổ trợ để đặt propertiesFileName thành "secrets.properties", đặt defaultPropertiesFileName thành "local.defaults.properties" và đặt mọi thuộc tính khác.

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

Bước 4: Cập nhật tệp kê khai ứng dụng

Phần này mô tả các chế độ cài đặt cần thêm vào tệp AndroidManifest.xml.

Số phiên bản của Dịch vụ Google Play

Thêm nội dung khai báo sau đây vào phần tử application. Thao tác này sẽ nhúng phiên bản Dịch vụ Google Play mà ứng dụng được biên dịch.

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version"/>

Quyền truy cập thông tin vị trí

Nếu ứng dụng của bạn cần truy cập vào thông tin vị trí của người dùng, thì bạn cần yêu cầu quyền truy cập vị trí trong tệp AndroidManifest.xml. Các lựa chọn là ACCESS_FINE_LOCATION, cung cấp thông tin vị trí chính xác của thiết bị và ACCESS_COARSE_LOCATION, cung cấp thông tin vị trí ít chính xác hơn. Để biết thông tin chi tiết, hãy xem hướng dẫn về dữ liệu vị trí.

Để yêu cầu quyền ACCESS_FINE_LOCATION, hãy thêm mã này vào phần tử manifest:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Quyền truy cập vào bộ nhớ ngoài

Nếu đang nhắm đến phiên bản 8.3 trở lên của SDK Dịch vụ Google Play, bạn không cần có quyền WRITE_EXTERNAL_STORAGE. Nếu đang nhắm đến các phiên bản cũ hơn của SDK Dịch vụ Google Play, bạn phải yêu cầu quyền WRITE_EXTERNAL_STORAGE trong phần tử manifest.

<uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Thư viện Apache HTTP Legacy

Nếu đang dùng com.google.android.gms:play-services-maps:16.0.0 trở xuống và ứng dụng của bạn nhắm đến cấp độ API mục tiêu 28 (Android 9.0) trở lên, thì bạn phải thêm khai báo sau đây vào phần tử <application> của AndroidManifest.xml. Nếu không, hãy bỏ qua phần khai báo này.

<uses-library
    android:name="org.apache.http.legacy"
    android:required="false"/>

Bước 5: Thiết lập thiết bị Android

Để chạy một ứng dụng sử dụng Maps SDK cho Android, bạn phải triển khai ứng dụng đó trên một thiết bị Android hoặc trình mô phỏng Android dựa trên Android 6.0 trở lên và có các API của Google.

  • Để sử dụng thiết bị Android, hãy làm theo hướng dẫn tại phần Chạy ứng dụng trên thiết bị phần cứng.
  • Để sử dụng trình mô phỏng Android, bạn có thể tạo một thiết bị ảo và cài đặt trình mô phỏng bằng Trình quản lý thiết bị đi kèm với Android Studio.

Bước 6: Kiểm tra xem có hỗ trợ Dịch vụ Play hay không (không bắt buộc)

Maps SDK cho Android yêu cầu thiết bị mà bạn triển khai ứng dụng phải cài đặt Dịch vụ Google Play. Google cung cấp một phương thức mà bạn có thể gọi từ ứng dụng của mình để kiểm tra. Để biết thêm thông tin, hãy xem phần Kiểm tra xem Dịch vụ Google Play đã được cài đặt hay chưa.

Các bước tiếp theo

Sau khi định cấu hình dự án, bạn có thể thêm bản đồ.