Menyetel ID aplikasi

Setiap aplikasi Android memiliki ID aplikasi unik yang terlihat seperti nama paket Java, misalnya com.example.myapp. ID ini secara unik mengidentifikasi aplikasi Anda di perangkat dan Google Play Store. Jika ingin mengupload versi baru aplikasi, ID aplikasi (dan sertifikat yang Anda tanda tangani ) harus sama dengan artefak aslinya; jika ID aplikasi diubah, Google Play Store akan memperlakukan upload tersebut sebagai aplikasi yang benar-benar berbeda. Jadi, setelah memublikasikan aplikasi, Anda tidak boleh mengubah ID aplikasi.

ID aplikasi ditentukan dengan properti applicationId dalam file build.gradle modul Anda, seperti yang ditampilkan di sini:

Groovy

android {
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    ...
}

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdkVersion(15)
        targetSdkVersion(24)
        versionCode = 1
        versionName = "1.0"
    }
    ...
}

Saat Anda membuat project baru di Android Studio, applicationId akan sama persis dengan nama paket gaya Java yang Anda pilih saat penyiapan. Namun, ID aplikasi dan nama paket tidak saling memengaruhi setelah melewati titik ini. Anda dapat mengubah nama paket kode (namespace kode) dan itu tidak akan memengaruhi ID aplikasi, begitu pun sebaliknya (tapi ingat, Anda tidak boleh mengubah ID aplikasi setelah memublikasikannya). Namun, mengubah nama paket memiliki konsekuensi lain yang harus Anda ketahui, jadi lihat bagian tentang cara mengubah nama paket.

Dan meskipun ID aplikasi terlihat seperti nama paket Java tradisional, aturan pemberian nama untuk ID aplikasi sedikit lebih ketat:

  • Nama harus memiliki setidaknya dua bagian (satu atau beberapa titik).
  • Setiap bagian harus diawali dengan huruf.
  • Semua karakter hanya boleh berupa alfanumerik atau garis bawah [a-zA-Z0-9_].

Catatan: Sebelumnya, ID aplikasi terikat langsung dengan nama paket kode Anda sehingga beberapa API Android menggunakan istilah "nama paket" dalam nama metode dan nama parameternya, tetapi nama ini sebenarnya adalah ID aplikasi Anda. Misalnya, metode Context.getPackageName() akan menampilkan ID aplikasi Anda. Anda tidak perlu lagi menggunakan nama yang sama untuk paket aktual kode Anda di luar kode aplikasi.

Perhatian: Jika Anda menggunakan WebView, pertimbangkan untuk menggunakan nama paket sebagai awalan dalam ID aplikasi; jika tidak, Anda mungkin akan mengalami masalah seperti yang dijelaskan dalam masalah 211768.

Mengubah ID aplikasi untuk varian build

Ketika Anda membuat APK atau AAB untuk aplikasi, alat build akan menandai aplikasi dengan ID aplikasi yang ditentukan dalam blok defaultConfig dari file build.gradle (seperti yang ditampilkan di bawah ini). Namun, jika Anda ingin membuat versi lain aplikasi agar muncul sebagai listingan terpisah di Google Play Store, seperti versi "gratis" dan "pro", Anda harus membuat varian build terpisah yang masing-masing memiliki ID aplikasi yang berbeda.

Dalam hal ini, setiap varian build harus ditentukan sebagai ragam produk terpisah. Untuk setiap ragam dalam blok productFlavors, Anda dapat menentukan ulang properti applicationId, atau menambahkan segmen ke ID aplikasi default menggunakan applicationIdSuffix, seperti yang ditampilkan di sini:

Groovy

android {
    defaultConfig {
        applicationId "com.example.myapp"
    }
    productFlavors {
        free {
            applicationIdSuffix ".free"
        }
        pro {
            applicationIdSuffix ".pro"
        }
    }
}

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"
    }
    productFlavors {
        create("free") {
            applicationIdSuffix = ".free"
        }
        create("pro") {
            applicationIdSuffix = ".pro"
        }
    }
}

Dengan demikian, ID aplikasi untuk ragam produk "gratis" adalah "com.example.myapp.free".

Anda juga dapat menggunakan applicationIdSuffix untuk menambahkan segmen berdasarkan jenis build, seperti yang ditampilkan di sini:

Groovy

android {
    ...
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

Kotlin

android {
    ...
    buildTypes {
        getByName("debug") {
            applicationIdSuffix = ".debug"
        }
    }
}

Karena Gradle menerapkan konfigurasi jenis build setelah ragam produk, ID aplikasi untuk varian build "debug gratis" sekarang menjadi "com.example.myapp.free.debug". Ini berguna jika Anda ingin memiliki build debug dan rilis di perangkat yang sama, karena dua aplikasi tidak dapat memiliki ID aplikasi yang sama.

Untuk aplikasi lama yang didistribusikan menggunakan APK di Google Play (dibuat sebelum Agustus 2021), jika ingin menggunakan listingan aplikasi yang sama untuk mendistribusikan beberapa APK yang masing-masing menargetkan konfigurasi perangkat berbeda (seperti API level), Anda harus menggunakan ID aplikasi yang sama untuk setiap varian build, tetapi memberikan versionCode yang berbeda untuk setiap APK. Untuk mengetahui informasi selengkapnya, baca Dukungan multi-APK. Publikasi yang menggunakan AAB tidak akan terpengaruh karena menggunakan satu artefak yang menggunakan satu kode versi dan ID aplikasi secara default.

Perhatian: Untuk kompatibilitas dengan SDK Tools sebelumnya, jika Anda tidak menentukan properti applicationId dalam file build.gradle, alat build akan menggunakan nama paket dari file AndroidManifest.xml sebagai ID aplikasi. Dalam hal ini, pemfaktoran ulang nama paket juga akan mengubah ID aplikasi Anda.

Tips: Jika perlu mereferensikan ID aplikasi dalam file manifes, Anda dapat menggunakan placeholder ${applicationId} dalam atribut manifes apa pun. Pada proses build, Gradle akan mengganti tag ini dengan ID aplikasi yang sebenarnya. Untuk mengetahui informasi selengkapnya, lihat Menambahkan Variabel Build ke dalam Manifes.

Mengubah ID aplikasi untuk pengujian

Secara default, alat build akan menerapkan ID aplikasi ke APK uji instrumentasi Anda menggunakan ID aplikasi untuk varian build yang ditentukan, ditambah dengan .test. Misalnya, APK pengujian untuk varian build com.example.myapp.free memiliki ID aplikasi com.example.myapp.free.test.

Meskipun tidak wajib, Anda dapat mengubah ID aplikasi dengan menentukan properti testApplicationId dalam blok defaultConfig atau productFlavor.

Mengubah nama paket

Meskipun nama paket project Anda secara default cocok dengan ID aplikasi, Anda dapat mengubahnya. Namun, jika Anda ingin mengubah nama paket, perlu diperhatikan bahwa nama paket (seperti yang ditentukan oleh struktur direktori project) harus selalu sama dengan atribut package dalam file AndroidManifest.xml, seperti yang ditampilkan di sini:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp"
    android:versionCode="1"
    android:versionName="1.0" >

Alat build Android menggunakan atribut package untuk dua hal:

  • Untuk menerapkan nama ini sebagai namespace bagi class R.java yang dihasilkan aplikasi Anda.

    Contoh: Dengan manifes di atas, class R akan menjadi com.example.myapp.R.

  • Ini digunakan untuk menentukan setiap nama class relatif yang dideklarasikan dalam file manifes.

    Contoh: Dengan manifes di atas, aktivitas yang dideklarasikan sebagai <activity android:name=".MainActivity"> ditentukan menjadi com.example.myapp.MainActivity.

Dengan demikian, nama dalam atribut package selalu sama dengan nama paket dasar project, tempat Anda menyimpan aktivitas dan kode aplikasi lainnya. Tentu saja, Anda dapat memiliki sub-paket dalam project, tetapi file tersebut harus mengimpor class R.java menggunakan namespace dari atribut package, dan setiap komponen aplikasi yang dideklarasikan dalam manifes harus menambahkan nama sub-paket yang tidak ada (atau menggunakan nama paket yang sepenuhnya memenuhi syarat).

Jika Anda ingin memfaktorkan ulang nama paket sepenuhnya, pastikan juga untuk memperbarui atribut package. Selama Anda menggunakan alat Android Studio untuk mengganti nama dan memfaktorkan ulang paket, semuanya akan tetap tersinkron secara otomatis. (Jika paket tidak disinkronkan, kode aplikasi tidak dapat menyelesaikan class R karena tidak lagi berada dalam paket yang sama, dan manifes tidak akan mengidentifikasi aktivitas Anda atau komponen lainnya.)

Anda harus selalu menetapkan atribut package dalam file AndroidManifest.xml utama project. Jika Anda memiliki file manifes tambahan (seperti untuk ragam produk atau jenis build), perlu diperhatikan bahwa nama paket yang diberikan oleh file manifes dengan prioritas tertinggi akan selalu digunakan dalam manifes gabungan akhir. Untuk mengetahui informasi selengkapnya, lihat Menggabungkan beberapa file manifes.

Satu lagi yang perlu diketahui: Meskipun Anda mungkin memiliki nama yang berbeda untuk manifes package dan applicationId Gradle, alat build akan menyalin ID aplikasi ke file manifes akhir aplikasi Anda di akhir proses build. Jadi, saat memeriksa file AndroidManifest.xml setelah proses build, Anda jangan terkejut dengan atribut package yang telah berubah. Atribut package adalah area sebenarnya yang ditelusuri platform Android dan Google Play Store untuk mengidentifikasi aplikasi Anda; jadi, setelah build menggunakan nilai asli (untuk memberikan namespace pada class R dan menentukan nama class manifes), build akan membuang nilai tersebut dan menggantinya dengan ID aplikasi.