Di chuyển ứng dụng tức thì để hỗ trợ Android App Bundle

Nếu vẫn đang dùng trình bổ trợ Tính năng Android cho Gradle (com.android.feature) không dùng nữa cho các mô-đun Ứng dụng Android tức thì, bạn cần chuyển sang sử dụng trình bổ trợ ứng dụng cơ sở (com.android.application) và trình bổ trợ Tính năng động (com.android.dynamic-feature).

Trên trình bổ trợ Android cho Gradle 3.3.0 trở lên, trình bổ trợ ứng dụng cơ sở có tính năng hỗ trợ trải nghiệm tức thì. Tức là nếu mô-đun ứng dụng cơ sở đáp ứng các yêu cầu để trở thành trải nghiệm tức thì, thì bạn sẽ tự động được hưởng lợi ích. Sau đó, bạn có thể đưa vào các tính năng bổ sung mà người dùng có thể tải xuống theo yêu cầu dưới dạng trải nghiệm tức thì bằng cách sử dụng trình bổ trợ Tính năng động. Cách thiết lập này giúp bạn dễ dàng hỗ trợ cả trải nghiệm ứng dụng cần cài đặt và ứng dụng tức thì trong một dự án duy nhất, đồng thời cho phép bạn hưởng lợi từ việc phát hành bằng Android App Bundle.

Bảng sau đây mô tả rõ hơn những trình bổ trợ mà bạn sẽ di chuyển sang:

Mô tả mô-đun Trình bổ trợ cũ Trình bổ trợ hiện tại
Mô-đun bao gồm mã, tài nguyên và chức năng cơ bản cho trải nghiệm ứng dụng tức thì hoặc đã cài đặt. com.android.feature (với baseFeature = true) com.android.application

Lưu ý: Mô-đun này bao gồm tất cả tệp kê khai và thông tin ký cần thiết để tạo và đóng gói ứng dụng dưới dạng Android App Bundle hoặc APK.

Các tính năng bổ sung, theo mô-đun mà người dùng có thể tải xuống theo yêu cầu com.android.feature com.android.dynamic-feature (với dist:instant="true"dist:onDemand="false" trong tệp kê khai của mô-đun)
Mã và tài nguyên cho một tính năng chỉ có sẵn cho phiên bản đã cài đặt của ứng dụng. com.android.application com.android.dynamic-feature (với dist:instant="false"dist:onDemand="false" trong tệp kê khai của mô-đun)

Trang này cho bạn biết cách di chuyển dự án ứng dụng tức thì hiện có để tạo Android App Bundle hỗ trợ phiên bản tức thì. Bài viết này cũng mô tả cách tạo, thử nghiệm và phát hành Android App Bundle có hỗ trợ phiên bản tức thì.

Nếu bạn đang tạo trải nghiệm tức thì mới cho ứng dụng, hãy đọc bài viết Tạo mô-đun tính năng hỗ trợ phiên bản tức thì.

Tìm hiểu các thay đổi

Khi bạn di chuyển dự án để sử dụng trình bổ trợ Tính năng động, Android App Bundle cung cấp một cách thức mới để tạo và phát hành ứng dụng, giúp đơn giản hoá việc phân phối các tệp APK đã tối ưu hoá cho người dùng.

Gói ứng dụng đơn giản hoá việc phân phối bằng cách đóng gói tất cả tài nguyên và mã đã biên dịch của ứng dụng để tải lên, nhưng trì hoãn việc tạo tệp APK và đăng nhập vào Google Play. Sau đó, mô hình phân phát ứng dụng mới của Google Play sẽ sử dụng gói ứng dụng của bạn để tạo và phân phát các tệp APK được tối ưu hoá cho cấu hình thiết bị của từng người dùng. Nhờ vậy, họ chỉ cần tải mã và tài nguyên cần thiết để chạy ứng dụng của bạn. Bạn không còn phải tạo, ký và quản lý nhiều tệp APK để hỗ trợ nhiều loại thiết bị, đồng thời người dùng sẽ có được các tệp tải xuống nhỏ hơn và tối ưu hơn.

Khi sử dụng trình bổ trợ tính năng hiện không được dùng nữa, việc tạo ứng dụng tức thì đòi hỏi bạn phải tạo mô-đun tính năng cơ sở. Mô-đun này chứa mã và tài nguyên dùng chung cho tất cả các mô-đun, bao gồm cả mô-đun ứng dụng tức thì. Phần còn lại của mã được đưa vào nhiều mô-đun tính năng không phải cơ sở, trong đó có các điểm truy cập cho trải nghiệm tức thì. Đối với phiên bản đã cài đặt của ứng dụng, dự án có thể bao gồm một mô-đun ứng dụng riêng biệt, trong đó chứa mã và các hoạt động chỉ bắt buộc đối với ứng dụng đã cài đặt.

Khi bạn di chuyển ứng dụng để hỗ trợ Android App Bundle, mô-đun ứng dụng của bạn sẽ lấy lại vai trò của mô-đun cơ sở, đồng thời bạn sắp xếp thêm trải nghiệm cài đặt hoặc trải nghiệm tức thì dưới dạng mô-đun tính năng. Điều này nghĩa là dự án của bạn giờ đây đã gần giống với một dự án ứng dụng tiêu chuẩn hơn, với một mô-đun cơ sở có hỗ trợ phiên bản tức thì và khả năng bao gồm thêm các trải nghiệm tức thì theo mô-đun.

Để di chuyển dự án ứng dụng tức thì hiện có và áp dụng mô hình phân phối được tối ưu hoá hơn của Android App Bundle, hãy làm theo các bước được mô tả trong các phần dưới đây.

Chuyển đổi mô-đun tính năng cơ sở thành mô-đun ứng dụng

Trước tiên, bạn cần chỉnh sửa tệp build.gradle của mô-đun tính năng cơ sở trước khi chuyển đổi tệp đó thành mô-đun ứng dụng chính, như sau:

  1. Xoá dòng baseFeature true.
  2. Xoá mọi phần phụ thuộc sử dụng cấu hình phần phụ thuộc feature hoặc application.

    Groovy

    dependencies {
        ...
        // delete any lines that look like
        // feature project(":foo")
        // feature project(":bar")
        // application project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // delete any lines that look like
        // feature(project(":foo"))
        // feature(project(":bar"))
        // application(project(":app"))
    }
    
  3. Di chuyển applicationId cùng với mọi cấu hình tập lệnh bản dựng khác mà bạn muốn nằm trong mô-đun ứng dụng cơ sở, từ mô-đun com.android.application hiện tại sang mô-đun com.android.feature. Bạn có thể xem một số ví dụ dưới đây. Đối với bước này, tuỳ thuộc vào cách thiết lập build.gradle cụ thể, bạn có thể dễ dàng sao chép và dán khối android của build.gradle từ mô-đun ứng dụng trước vào tệp build.gradle của mô-đun ứng dụng mới. Tuy nhiên, bạn nên thận trọng khi làm như vậy.

    Groovy

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile(
                  'proguard-android-optimize.txt'),
                  'proguard-rules.pro'
            }
        }
    }
    

    Kotlin

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId = "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            getByName("release") {
                minifyEnabled = true
                proguardFiles(
                    getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro"
                )
            }
        }
    }
    
  4. Đánh dấu mô-đun tính năng là được kích hoạt tức thì bằng cách thêm các thẻ phân phối gói thích hợp vào tệp kê khai, như minh hoạ dưới đây.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  5. Chuyển đổi mô-đun tính năng thành mô-đun ứng dụng cơ sở bằng cách thay đổi loại trình bổ trợ thành com.android.application:

    Groovy

    // Replace  "plugins { id 'com.android.feature' }"
    // with the following
    plugins {
      id 'com.android.application'
    }
    

    Kotlin

    // Replace  "plugins { id("com.android.feature") }"
    // with the following
    plugins {
        id("com.android.application")
    }
    

Chuyển đổi mô-đun ứng dụng cũ thành mô-đun tính năng tại thời điểm cài đặt

Nếu không có mã hoặc tài nguyên trong mô-đun ứng dụng cũ, bạn chỉ cần xoá mô-đun đó vì các bước bạn đã thực hiện trong phần trước đã chuyển đổi mô-đun tính năng thành mô-đun ứng dụng cơ sở của ứng dụng.

Tuy nhiên, nếu có mã và tài nguyên trong mô-đun ứng dụng cũ thể hiện chức năng mà bạn muốn người dùng cung cấp khi họ cài đặt ứng dụng, hãy làm theo các bước trong phần này để chuyển đổi mô-đun ứng dụng thành mô-đun tính năng.

Việc tạo mô-đun tính năng bao gồm việc thay đổi loại trình bổ trợ từ com.android.application thành com.android.dynamic-feature, cùng với một số thay đổi khác về build.gradle như sau:

  1. Thay đổi loại trình bổ trợ từ com.android.application thành com.android.dynamic-feature.

    Groovy

    // Replace "plugins { id 'com.android.feature' }"
    // with the following:
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "plugins { id("com.android.application") }"
    // with the following:
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. Như mô tả trong phần trước, hãy đảm bảo bạn đã di chuyển các cấu hình bản dựng mà trình bổ trợ com.android.application yêu cầu sang mô-đun ứng dụng cơ sở, chẳng hạn như các quy tắc applicationId hoặc proguardFiles.

  3. Đổi tên mô-đun thành "install_feature" như sau:

    1. Mở ngăn Project (Dự án) bằng cách chọn View > Tool Windows > Project (Xem > Cửa sổ công cụ > Dự án) trên thanh trình đơn.
    2. Nhấp chuột phải vào mô-đun tính năng rồi chọn Refactor > Rename (Tái cấu trúc > Đổi tên).
    3. Trong hộp thoại xuất hiện, hãy chọn Đổi tên mô-đun rồi nhấp vào OK.
    4. Nhập tên mới cho mô-đun rồi nhấp vào OK.
  4. Tương tự như bước 3, hãy đổi tên mô-đun ứng dụng mới mà bạn đã tạo ở phần trước thành "app" (ứng dụng).

  5. Thêm phần phụ thuộc triển khai vào mô-đun "app" trong tệp build.gradle của mô-đun tính năng, như minh hoạ dưới đây.

    Groovy

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation(project(":app"))
    }
    
  6. Thêm tính năng này vào tệp build.gradle của mô-đun ứng dụng mới.

    Groovy

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures = [":installed_feature"]
    }
    

    Kotlin

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures.addAll(listOf(":installed_feature"))
    }
    
  7. Trong tệp kê khai của mô-đun tính năng, hãy đánh dấu mô-đun tính năng là mô-đun có thể cài đặt bằng cách thêm các thẻ phân phối gói thích hợp vào tệp kê khai.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="false" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    

Chuyển đổi các mô-đun tính năng khác thành mô-đun tính năng hỗ trợ phiên bản tức thì

Nếu đã mô-đun hoá chức năng bổ sung của ứng dụng thành nhiều mô-đun Tính năng, bạn cần làm theo các bước trong phần này để chuyển đổi những mô-đun đó thành mô-đun tính năng hỗ trợ phiên bản tức thì.

Đối với mỗi mô-đun tính năng còn lại trong dự án, hãy tiến hành như sau để chuyển đổi mô-đun đó thành các tính năng hỗ trợ phiên bản tức thì:

  1. Thay đổi loại trình bổ trợ trong tệp build.gradle thành com.android.dynamic-feature, như minh hoạ dưới đây:

    Groovy

    // Replace 'com.android.feature' with 'com.android.dynamic-feature'
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "com.android.feature" with "com.android.dynamic-feature"
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. Đánh dấu từng mô-đun tính năng là hỗ trợ phiên bản tức thì bằng cách thêm đoạn mã sau vào tệp kê khai.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    
  3. Thêm mô-đun tính năng vào tệp build.gradle của mô-đun ứng dụng mới. Tại đây, bạn đã thêm installed_feature vào danh sách các mô-đun tính năng.

    Groovy

    android {
       ...
       dynamicFeatures = [":installed_feature", ":feature_1", ":feature_2"]
       // or whichever name exists for the instant enabled feature module
    }
    

    Kotlin

    android {
       ...
       dynamicFeatures.addAll(listOf(":installed_feature", ":feature_1", ":feature_2"))
       // or whichever name exists for the instant enabled feature module
    }
    

Tạo, thử nghiệm và xuất bản gói ứng dụng mới có hỗ trợ phiên bản tức thì

Sau khi hoàn tất các bước trên trang này, dự án của bạn có thể tạo một cấu phần phần mềm duy nhất (Android App Bundle) mà bạn có thể sử dụng để phát hành cả phiên bản cài đặt và phiên bản tức thì của ứng dụng lên Google Play Console, đồng thời ra mắt riêng cho kênh tức thì và kênh cần cài đặt. Ngoài ra, với gói ứng dụng, bạn sẽ được hưởng lợi từ việc phân phát các tệp APK được tối ưu hoá cho cấu hình thiết bị của từng người dùng. Nhờ đó, họ chỉ cần tải mã và tài nguyên cần thiết xuống để chạy ứng dụng của bạn. Tức là bạn không còn phải tạo, ký và quản lý nhiều tệp APK để hỗ trợ nhiều loại thiết bị, đồng thời người dùng sẽ nhận được tệp tải xuống nhỏ hơn và tối ưu hoá hơn.

Để bắt đầu tạo và kiểm thử gói ứng dụng có hỗ trợ phiên bản tức thì, hãy chuyển đến phần Tạo gói ứng dụng.