Memigrasi aplikasi instan Anda untuk mendukung Android App Bundle

Jika Anda masih menggunakan Fitur plugin Android Gradle yang tidak digunakan lagi (com.android.feature) untuk modul Aplikasi Instan Android, Anda harus bermigrasi untuk menggunakan plugin aplikasi dasar (com.android.application) dan plugin Fitur Dinamis (com.android.dynamic-feature).

Pada plugin Android Gradle 3.3.0 dan versi yang lebih baru, plugin aplikasi dasar mencakup dukungan untuk pengalaman instan. Artinya, jika modul aplikasi dasar memenuhi persyaratan untuk menjadi pengalaman instan, Anda akan mendapatkan manfaatnya secara otomatis. Kemudian, Anda dapat menyertakan fitur tambahan yang dapat didownload sesuai kebutuhan pengguna sebagai pengalaman instan menggunakan plugin Fitur Dinamis. Penyiapan ini mempermudah dukungan untuk pengalaman aplikasi instan maupun terinstal dari satu project, dan memungkinkan Anda memperoleh manfaat dari memublikasikan aplikasi dengan Android App Bundle.

Tabel berikut akan lebih menjelaskan plugin yang digunakan setelah migrasi:

Deskripsi modul Plugin lama Plugin saat ini
Modul yang menyertakan kode, resource, dan fungsi dasar untuk pengalaman aplikasi terinstal atau instan. com.android.feature (dengan baseFeature = true) com.android.application

Catatan: Modul ini mencakup semua informasi manifes dan informasi penandatanganan yang diperlukan untuk mem-build dan memaketkan aplikasi sebagai Android App Bundle atau APK.

Fitur modular tambahan yang dapat didownload pengguna sesuai kebutuhan com.android.feature com.android.dynamic-feature (dengan dist:instant="true" dan dist:onDemand="false" dalam manifes modul)
Kode dan resource untuk fitur yang hanya tersedia untuk versi aplikasi terinstal. com.android.application com.android.dynamic-feature (dengan dist:instant="false" dan dist:onDemand="false" dalam manifes modul)

Halaman ini menunjukkan cara memigrasikan project aplikasi instan yang sudah ada untuk membuat Android App Bundle yang mendukung pengalaman instan. Artikel ini juga menjelaskan cara membuat, menguji, dan memublikasikan Android App Bundle yang mendukung pengalaman instan.

Jika Anda membuat pengalaman instan baru untuk aplikasi, baca Membuat modul fitur yang mendukung pengalaman instan.

Memahami perubahan

Saat Anda memigrasikan project untuk menggunakan plugin Fitur Dinamis, Android App Bundle menyediakan cara baru untuk membuat dan memublikasikan aplikasi Anda yang secara nyata mempermudah distribusi APK yang dioptimalkan kepada pengguna.

App bundle menyederhanakan distribusi dengan mengemas semua kode dan resource yang dikompilasi aplikasi Anda untuk diupload, tetapi menangguhkan pembuatan dan penandatanganan APK ke Google Play. Model penyajian aplikasi baru Google Play kemudian menggunakan app bundle Anda untuk membuat dan menayangkan APK yang dioptimalkan untuk setiap konfigurasi perangkat pengguna, sehingga mereka hanya mendownload kode dan resource yang diperlukan untuk menjalankan aplikasi Anda. Anda tidak perlu lagi membuat, menandatangani, dan mengelola beberapa APK untuk mendukung perangkat yang berbeda, dan pengguna mendapatkan hasil download yang lebih kecil dan lebih dioptimalkan.

Saat menggunakan plugin fitur yang kini sudah tidak digunakan lagi, proses build aplikasi instan memerlukan pembuatan modul fitur dasar yang berisi kode dan resource bersama untuk semua modul Anda, termasuk modul aplikasi instan. Sisa kode Anda disertakan dalam beberapa modul fitur non-dasar yang berisi titik masuk untuk pengalaman instan Anda. Untuk versi aplikasi terinstal, project Anda mungkin telah menyertakan modul aplikasi terpisah yang berisi kode dan aktivitas yang diperlukan hanya untuk aplikasi terinstal.

Saat memigrasikan aplikasi untuk mendukung Android App Bundle, modul aplikasi Anda mengklaim kembali peran modul dasar, dan Anda mengatur pengalaman tambahan yang diinstal atau instan sebagai modul fitur. Artinya, project Anda sekarang lebih mirip dengan project aplikasi standar, dengan modul dasar yang mendukung pengalaman instan dan kemampuan untuk menyertakan pengalaman instan modular tambahan.

Untuk memigrasikan project aplikasi instan yang ada dan mengadopsi model distribusi Android App Bundle yang lebih optimal, ikuti langkah-langkah yang dijelaskan dalam bagian di bawah ini.

Mengonversi modul fitur dasar menjadi modul aplikasi

Pertama, Anda harus mengedit file build.gradle modul fitur dasar sebelum mengonversinya menjadi modul aplikasi utama, seperti berikut:

  1. Hapus baris baseFeature true.
  2. Hapus semua dependensi yang menggunakan konfigurasi dependensi feature atau 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. Pindahkan applicationId, bersama dengan konfigurasi skrip build lain yang Anda harapkan berada di modul aplikasi dasar, dari modul com.android.application saat ini ke modul com.android.feature. Beberapa contoh ditampilkan di bawah ini. Untuk langkah ini, bergantung pada penyiapan build.gradle khusus Anda, akan lebih mudah untuk menyalin dan menempelkan blok android build.gradle dari modul aplikasi sebelumnya ke file build.gradle modul aplikasi baru. Akan tetapi, Anda harus berhati-hati saat melakukannya.

    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. Tandai modul fitur sebagai mendukung pengalaman instan dengan menambahkan tag distribusi paket yang sesuai ke manifes, seperti yang ditampilkan di bawah ini.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  5. Konversikan modul fitur ke modul aplikasi dasar Anda dengan mengubah jenis pluginnya menjadi 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")
    }
    

Mengonversi modul aplikasi lama menjadi modul fitur waktu penginstalan

Jika tidak memiliki kode atau resource dalam modul aplikasi lama, Anda dapat menghapusnya—karena langkah yang Anda ikuti di bagian sebelumnya telah mengonversi modul fitur ke modul aplikasi dasar aplikasi.

Akan tetapi, jika Anda memiliki kode dan resource di modul aplikasi lama yang mewakili fungsi yang ingin disediakan bagi pengguna saat mereka menginstal aplikasi Anda, ikuti langkah-langkah di bagian ini untuk mengonversi modul aplikasi menjadi modul fitur.

Membuat modul fitur melibatkan perubahan jenis plugin dari com.android.application ke com.android.dynamic-feature, bersama dengan beberapa perubahan build.gradle lainnya, sebagai berikut:

  1. Ubah jenis plugin dari com.android.application ke 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. Seperti yang dijelaskan di bagian sebelumnya, pastikan Anda telah memindahkan konfigurasi build yang diperlukan oleh plugin com.android.application ke modul aplikasi dasar, seperti aturan applicationId atau proguardFiles.

  3. Ganti nama modul menjadi sesuatu seperti "installed_feature" seperti berikut:

    1. Buka panel Project dengan memilih View > Tool Windows > Project dari panel menu.
    2. Klik kanan modul fitur dan pilih Refactor > Rename.
    3. Pada dialog yang muncul, pilih Rename module, lalu klik OK.
    4. Masukkan nama baru untuk modul, lalu klik OK.
  4. Sama seperti langkah 3, ganti nama modul aplikasi baru yang Anda buat di bagian sebelumnya menjadi sesuatu seperti “app”.

  5. Tambahkan dependensi penerapan pada modul “app” di file build.gradle modul fitur, seperti yang ditunjukkan di bawah ini.

    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. Tambahkan fitur ke file build.gradle modul aplikasi baru.

    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. Dalam manifes modul fitur, tandai modul fitur sebagai modul yang dapat diinstal dengan menambahkan tag distribusi paket yang sesuai ke manifes.

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

Mengonversi modul fitur lainnya menjadi modul fitur yang mendukung pengalaman instan

Jika Anda telah memodularisasi fungsi tambahan aplikasi menjadi beberapa modul Fitur, Anda harus mengikuti langkah-langkah di bagian ini untuk mengonversi modul tersebut menjadi modul fitur yang mendukung pengalaman instan.

Untuk setiap modul fitur yang tersisa dalam project Anda, lakukan langkah-langkah berikut untuk mengonversinya menjadi fitur yang mendukung pengalaman instan:

  1. Ubah jenis plugin di file build.gradle menjadi com.android.dynamic-feature, seperti yang ditampilkan di bawah:

    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. Tandai setiap modul fitur sebagai mendukung pengalaman instan dengan menambahkan kode berikut ini ke manifes.

    <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. Tambahkan modul fitur ke file build.gradle modul aplikasi baru, tempat Anda menambahkan installed_feature ke daftar modul fitur.

    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
    }
    

Membuat, menguji, dan memublikasikan app bundle yang mendukung pengalaman instan

Setelah menyelesaikan langkah-langkah di halaman ini, project Anda mampu menghasilkan satu artefak, Android App Bundle, yang dapat digunakan untuk memublikasikan versi aplikasi terinstal dan instan ke Konsol Google Play, dan diluncurkan secara terpisah untuk track instan dan terinstal. Selain itu, dengan app bundle, Anda mendapatkan manfaat menyajikan APK yang dioptimalkan untuk setiap konfigurasi perangkat pengguna, sehingga mereka hanya mendownload kode dan resource yang diperlukan untuk menjalankan aplikasi Anda. Artinya, Anda tidak perlu lagi membuat, menandatangani, dan mengelola beberapa APK untuk mendukung perangkat yang berbeda, dan pengguna mendapatkan hasil download yang lebih kecil dan lebih dioptimalkan.

Untuk mulai membuat dan menguji app bundle yang mendukung pengalaman instan, buka Membuat app bundle.