The Android Developer Challenge is back! Submit your idea before December 2.

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 pada perangkat dan Google Play Store. Jika Anda ingin mengupload versi aplikasi baru, ID aplikasi (dan sertifikat yang Anda tanda tangani) harus sama dengan APK asli. Jika Anda mengubah ID aplikasi, Google Play Store akan memperlakukan APK sebagai aplikasi yang sepenuhnya berbeda. Jadi, setelah Anda mempublikasikan aplikasi, Anda tidak boleh mengubah ID aplikasi.

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

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

Ketika Anda membuat project baru di Android Studio, applicationId sama persis dengan nama paket gaya Java yang Anda pilih selama penyiapan. Akan tetapi, 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, begitupun sebaliknya (tapi ingat, Anda tidak boleh mengubah ID aplikasi setelah mempublikasikannya). Akan tetapi, mengubah nama paket memiliki konsekuensi lain yang harus Anda ketahui, jadi lihat bagian 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 barus berupa alfanumerik atau garis bawah [a-zA-Z0-9_].

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

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

Mengubah ID aplikasi untuk varian build

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

Dalam hal ini, setiap varian build harus didefinisikan sebagai ragam produk terpisah. Untuk setiap ragam dalam blok productFlavors, Anda dapat mendefiniskan ulang properti applicationId atau menambahkan segmen ke ID aplikasi default menggunakan applicationIdSuffix, seperti yang ditampilkan 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 dapat menggunakan applicationIdSuffix untuk menambahkan segmen berdasarkan jenis build, seperti yang ditampilkan di sini:

android {
        ...
        buildTypes {
            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 saat Anda ingin memiliki versi debug dan rilis di perangkat yang sama, karena dua APK tidak dapat memiliki ID aplikasi yang sama.

Ingat bahwa APK dengan ID aplikasi berbeda diperlakukan sebagai aplikasi berbeda di Google Play Store. Jadi, jika Anda ingin menggunakan listingan aplikasi yang sama untuk mendistribusikan beberapa APK yang masing-masing menargetkan konfigurasi perangkat berbeda (seperti level API), Anda harus menggunakan ID aplikasi yang sama untuk setiap varian build, tetapi memberikan versionCode yang berbeda untuk setiap APK. Untuk informasi selengkapnya, bacal Dukungan Beberapa APK.

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

Tips: Jika perlu mereferensikan ID aplikasi dalam file manifes, Anda dapat menggunakan placeholder ${applicationId} dalam atribut manifes apa pun. Saat membuat, Gradle mengganti tag ini dengan ID aplikasi yang sebenarnya. Untuk informasi selengkapnya, lihat Menyuntikkan Variabel Build ke Dalam Manifes.

Mengubah ID aplikasi untuk pengujian

Secara default, fitur build menerapkan ID aplikasi ke APK uji instrumentasi menggunakan ID aplikasi untuk varian build yang diberikan, ditambah dengan .test. Misalnya, APK uji untuk varian build com.example.myapp.free memiliki ID aplikasi com.example.myapp.free.test.

Meskipun tidak diperlukan, Anda dapat mengubah ID aplikasi dengan menentukan properti testApplicationId di 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, perhatikan bahwa nama paket (seperti yang ditetapkan oleh struktur direktori project) harus selalu cocok dengan atribut package di 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" >
    

Fitur build Android menggunakan atribut package untuk dua hal:

  • Untuk menerapkan nama 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 menetapkan setiap nama class relatif yang dinyatakan dalam file manifes.

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

Dengan demikian, nama dalam atribut package selalu cocok dengan nama paket dasar project tempat Anda menyimpan aktivitas dan kode aplikasi lainnya. Tentu saja, Anda dapat memiliki subpaket dalam project, tetapi file itu harus mengimpor class R.java menggunakan namespace dari atribut package dan setiap komponen aplikasi yang dinyatakan dalam manifes harus menambahkan nama subpaket yang hilang (atau menggunakan nama paket yang memenuhi syarat).

Jika Anda ingin memfaktorkan ulang nama paket Anda seluruhnya, pastikan juga untuk memperbarui atribut package. Selama Anda menggunakan fitur Android Studio untuk mengganti nama dan memfaktorkan ulang paket, project ini secara otomatis akan tetap sinkron. (Jika tidak tetap sinkron, kode aplikasi Anda 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 menentukan atribut package dalam file AndroidManifest.xml utama project Anda. Jika Anda memiliki file manifes tambahan (seperti untuk jenis ragam atau jenis produk), perlu diketahui bahwa nama paket yang disediakan oleh file manifes prioritas tertinggi selalu digunakan dalam manifes gabungan terakhir. Untuk informasi lebih lanjut, lihat Menggabungkan beberapa file manifes.

Satu hal lagi yang perlu diketahui: Meskipun Anda mungkin memiliki nama yang berbeda untuk package manifes dan applicationId Gradle, fitur build akan menyalin ID aplikasi ke dalam file manifes akhir APK di akhir proses build. Jadi, jika Anda memeriksa file AndroidManifest.xml Anda setelah build, jangan terkejut apabila atribut package telah berubah. Atribut package adalah lokasi sebenarnya bagi platform Android dan Google Play Store untuk mengidentifikasi aplikasi Anda; jadi setelah versi menggunakan nilai asli (untuk namespace class R dan me-resolve nama class manifes), versi akan menghapus nilai tersebut dan menggantinya dengan ID aplikasi.