Setiap aplikasi Android memiliki ID apllikasi unik yang terlihat seperti nama paket Java, seperti com.example.myapp. ID ini secara unik mengidentifikasi aplikasi pada perangkat dan Google Play Store. Jika Anda ingin mengunggah versi aplikasi baru, ID aplikasi (dan sertifikat yang Anda tandatangani) harus sama dengan APK asli—jika Anda mengubah ID aplikasi, Google Play Store memperlakukan APK sebagai aplikasi yang benar-benar berbeda. Jadi, setelah Anda mempublikasikan aplikasi, Anda tidak boleh mengubah ID aplikasi.
ID aplikasi Anda didefinisikan dengan properti applicationId di
file build.gradle modul, seperti yang ditunjukkan di sini:
android {
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
...
}
Saat Anda membuat proyek baru di Android Studio, applicationId sama
persis dengan nama paket gaya-Java yang Anda pilih selama persiapan. Namun, ID
aplikasi dan nama paket tidak saling memengaruhi setelah melewati titik ini.
Anda bisa mengubah nama paket kode (namespace kode) dan itu tidak
akan memengaruhi ID aplikasi, dan sebaliknya (meskipun, ingat, Anda tidak boleh mengubah
ID aplikasi setelah mempublikasikan aplikasi). Namun, mengubah nama
paket memiliki konsekuensi lain yang harus Anda waspadai, jadi silakan lihat bagian tentang
memodifikasi 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 barus berupa alfanumerik atau setrip bawah [a-zA-Z0-9_].
Catatan: Dahulu, ID aplikasi terikat langsung ke
nama paket kode; jadi, beberapa Android API menggunakan istilah "nama paket" dalam
nama metode dan nama parameternya, namun ini sebenarnya adalah ID
aplikasi Anda. Misalnya, metode Context.getPackageName() mengembalikan ID aplikasi Anda.
Tidak perlu membagikan nama paket kode sebenarnya di luar
kode aplikasi Anda.
Perhatian: Jika Anda menggunakan WebView,
pertimbangkan menggunakan nama paket sebagai awalan dalam ID aplikasi; jika tidak
Anda mungkin menghadapi masalah seperti yang dijelaskan dalam masalah
211768.
Mengubah ID aplikasi untuk varian versi
Ketika Anda membangun APK untuk aplikasi, alat pembangunan menandai APK dengan
ID aplikasi yang didefinisikan dalam blok defaultConfig dari file build.gradle
(seperti yang ditunjukkan di bawah ini). Namun, jika Anda ingin membuat versi aplikasi yang berbeda
muncul sebagai cantuman terpisah pada Google Play Store, seperti versi "gratis" dan "pro",
Anda harus membuat varian versi terpisah yang masing-masing memiliki ID aplikasi berbeda.
Dalam hal ini, setiap varian versi harus didefinisikan sebagai ragam
produk terpisah. Untuk masing-masing ragam
di dalam blok productFlavors {}, Anda bisa mendefinisikan ulang properti applicationId
, atau malah menambahkan segmen ke ID aplikasi default
menggunakan applicationIdSuffix, seperti yang ditunjukkan di sini:
android {
defaultConfig {
applicationId "com.example.myapp"
}
productFlavors {
free {
applicationIdSuffix ".free"
}
pro {
applicationIdSuffix ".pro"
}
}
}
Dengan cara ini, ID aplikasi untuk ragam produk “gratis” adalah "com.example.myapp.free".
Anda juga bisa menggunakan applicationIdSuffix untuk menambahkan segmen berdasarkan
tipe versi, seperti yang ditunjukkan di sini:
android {
...
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
Karena Gradle menerapkan konfigurasi tipe versi setelah ragam produk, ID aplikasi untuk varian versi "free debug” sekarang adalah "com.example.myapp.free.debug". Ini berguna ketika Anda ingin memiliki versi debug dan rilis pada perangkat yang sama, karena dua APK tidak bisa memiliki ID aplikasi yang sama.
Ingatlah bahwa APK dengan ID aplikasi berbeda diperlakukan sebagai
aplikasi berbeda di Google Play Store. Jadi jika Anda ingin menggunakan cantuman
aplikasi yang sama untuk mendistribusikan beberapa APK yang masing-masing menargetkan konfigurasi
perangkat berbeda (seperti level API), maka Anda harus menggunakan ID aplikasi yang sama
untuk masing-masing varian versi namun memberikan versionCode yang berbeda untuk setiap APK. Untuk
informasi selengkapnya, bacalah tentang Dukungan Multi-APK.
Perhatian: Untuk kompatibilitas dengan alat SDK sebelumnya, jika
Anda tidak mendefinisikan properti applicationId dalam file
build.gradle, alat pembangunan menggunakan nama paket dari file
AndroidManifest.xml sebagai ID aplikasi. Bila ini terjadi,
pemfaktoran ulang nama paket juga akan mengubah ID aplikasi Anda.
Tip: Jika Anda perlu mereferensikan ID aplikasi dalam
file manifes, Anda bisa menggunakan Placeholder ${applicationId} dalam
atribut manifes apa pun. Selama pembangunan, Gradle mengganti tag ini dengan ID Aplikasi
yang sebenarnya. Untuk informasi selengkapnya, lihat Menyuntikkan Variabel Versi ke dalam
Manifes.
Mengubah ID aplikasi untuk pengujian
Secara default, alat pembangunan menerapkan ID aplikasi ke APK
pengujian instrumentasi
menggunakan ID aplikasi untuk varian versi yang diberikan, yang dibubuhi dengan
.test. Misalnya, APK pengujian untuk varian versi com.example.myapp.free memiliki
ID aplikasi com.example.myapp.free.test.
Meskipun tidak diperlukan, Anda bisa mengubah ID aplikasi dengan
mendefinisikan properti testApplicationId dalam blok defaultConfig atau
productFlavor.
Catatan: Untuk menghindari bentrokan nama dengan aplikasi yang sedang diuji, alat pembangunan menghasilkan
kelas R untuk APK pengujian Anda dengan namespace berdasarkan ID aplikasi
pengujian, bukannya nama paket yang didefinisikan dalam file manifes.
Mengubah nama paket
Meskipun nama paket proyek Anda secara default cocok dengan ID aplikasi, Anda
bisa mengubahnya. Akan tetapi, jika Anda ingin mengubah nama paket, ketahuilah bahwa
nama paket (seperti yang didefinisikan oleh struktur direktori proyek) harus selalu
cocok dengan atribut package dalam file AndroidManifest.xml, seperti yang ditunjukkan
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 pembangunan Android menggunakan atribut package untuk dua hal:
- Untuk menerapkan nama sebagai namespace bagi kelas
R.javayang dihasilkan aplikasi Anda.Contoh: Dengan manifes di atas, kelas
Rakan menjadicom.example.myapp.R. - Alat pembangunan menggunakannya untuk menyelesaikan setiap nama kelas relatif yang dideklarasikan dalam
file manifes.
Contoh: Dengan manifes di atas, aktivitas yang dideklarasikan sebagai
<activity android:name=".MainActivity">diselesaikan menjadicom.example.myapp.MainActivity.
Dengan demikian, nama dalam atribut package selalu cocok dengan nama paket dasar
proyek, tempat Anda menyimpan aktivitas dan kode aplikasi lainnya. Tentu saja,
Anda bisa memiliki sub-paket dalam proyek, namun file itu harus
mengimpor kelas R.java menggunakan namespace dari atribut package, dan
setiap komponen aplikasi yang dideklarasikan dalam manifes harus menambahkan nama sub-paket
yang hilang (atau menggunakan nama paket yang memenuhi syarat).
Jika Anda ingin memfaktorkan ulang nama paket Anda seluruhnya, pastikan juga memperbarui atribut
package. Selama Anda menggunakan alat Android Studio untuk mengganti nama
dan memfaktorkan ulang paket, maka proyek ini secara otomatis akan tetap sinkron. (Jika mereka
tidak sinkron, kode aplikasi tidak bisa menyelesaikan kelas 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 proyek. Jika Anda memiliki file manifes tambahan (seperti untuk
ragam produk atau tipe versi), perhatikan bahwa nama paket yang diberikan oleh
file manifes berprioritas tertinggi akan selalu digunakan dalam manifes gabungan akhir.
Untuk informasi selengkapnya, lihat
Menggabungkan Beberapa File Manifes.
Satu hal lagi yang harus diketahui: Meskipun Anda mungkin memiliki nama
yang berbeda untuk manifes package dan Gradle
applicationId, alat pembangunan menyalin ID aplikasi ke dalam file manifes final APK
di akhir proses pembangunan. Jadi jika Anda memeriksa file
AndroidManifest.xml setelah pembangunan versi, jangan terkejut bila atribut
package telah berubah. Atribut package adalah
tempat sesungguhnya platform Android dan Google Play Store mengidentifikasi
aplikasi Anda; jadi setelah versi menggunakan nilai asli (untuk namespace kelas
R dan menyelesaikan nama kelas manifes), versi akan membuang nilai
tersebut dan menggantinya dengan ID aplikasi.