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