Pembuatan versi merupakan bagian penting dari proses upgrade aplikasi dan strategi pemeliharaan. Pembuatan versi penting karena:
- Pengguna harus memiliki informasi khusus tentang versi aplikasi yang terinstal di perangkat mereka dan versi upgrade yang tersedia untuk diinstal.
- Aplikasi lain—termasuk aplikasi lain yang Anda publikasikan sebagai suite—harus mengajukan kueri ke sistem terkait versi aplikasi, untuk menentukan kompatibilitas dan mengidentifikasi dependensi.
- Layanan tempat Anda memublikasikan aplikasi mungkin juga perlu mengirimkan kueri tentang versi aplikasi tersebut agar dapat menampilkan versi kepada pengguna. Layanan publikasi mungkin juga harus memeriksa versi aplikasi untuk menentukan kompatibilitas dan menetapkan hubungan upgrade/downgrade.
Sistem Android menggunakan informasi versi aplikasi Anda untuk memberikan perlindungan dari upaya downgrade. Sistem tidak menggunakan informasi versi aplikasi untuk menerapkan batasan pada upgrade atau kompatibilitas aplikasi pihak ketiga. Aplikasi harus menerapkan setiap batasan versi dan harus memberi tahu pengguna tentang batasan tersebut.
Sistem Android menerapkan kompatibilitas versi sistem, seperti yang dinyatakan
oleh setelan minSdk dalam file build. Setelan ini
memungkinkan aplikasi menentukan API sistem minimum yang kompatibel dengannya.
Untuk mengetahui informasi selengkapnya tentang persyaratan API,
lihat Menentukan persyaratan level API (versi SDK).
Persyaratan pembuatan versi bervariasi di antara project yang berbeda. Namun, banyak developer menganggap Pembuatan Versi Semantik sebagai dasar yang baik untuk strategi pembuatan versi.
Menetapkan informasi versi aplikasi
Untuk menentukan informasi versi aplikasi, tetapkan nilai untuk setelan versi dalam file build Gradle:
Groovy
android { namespace 'com.example.testapp' compileSdk 33 defaultConfig { applicationId "com.example.testapp" minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" ... } ... } ...
Kotlin
android { namespace = "com.example.testapp" compileSdk = 33 defaultConfig { applicationId = "com.example.testapp" minSdk = 24 targetSdk = 33 versionCode = 1 versionName = "1.0" ... } ... } ...
Setelan versi
Tentukan nilai untuk kedua setelan versi yang tersedia: versionCode dan
versionName.
versionCode- Bilangan bulat positif yang digunakan sebagai nomor versi internal.
Nomor ini membantu menentukan apakah suatu versi lebih baru
daripada versi lainnya, dengan nomor yang lebih tinggi menunjukkan versi yang lebih baru. Nomor ini
bukan nomor versi yang ditunjukkan kepada pengguna; nomor tersebut ditetapkan oleh
setelan
versionName. Sistem Android menggunakan nilaiversionCodeagar tidak terjadi downgrade dengan mencegah pengguna menginstal APK menggunakanversionCodeyang lebih rendah daripada versi yang saat ini terinstal di perangkat.Nilainya adalah bilangan bulat positif sehingga aplikasi lain dapat mengevaluasinya secara terprogram—untuk memeriksa hubungan upgrade atau downgrade. Anda dapat menetapkan nilai ke bilangan bulat positif. Namun, pastikan setiap rilis aplikasi Anda menggunakan nilai yang lebih besar.
Catatan: Nilai terbesar yang diizinkan Google Play untuk
versionCodeadalah 2100000000.Anda tidak dapat mengupload APK ke Play Store dengan
versionCodeyang telah digunakan untuk versi sebelumnya.Catatan: Dalam beberapa situasi, Anda mungkin ingin mengupload versi aplikasi dengan
versionCodeyang lebih rendah daripada versi terbaru. Misalnya, jika memublikasikan beberapa APK, Anda mungkin memiliki rentangversionCodeyang telah ditetapkan untuk APK tertentu. Untuk mengetahui informasi selengkapnya tentang menetapkan nilaiversionCodeuntuk beberapa APK, lihat Menetapkan kode versi.Umumnya, Anda akan merilis versi pertama aplikasi dengan
versionCodeyang ditetapkan ke 1, lalu meningkatkan nilainya secara monoton pada setiap rilis, terlepas dari apakah rilis tersebut merupakan rilis utama atau rilis minor. Ini berarti nilaiversionCodetidak selalu menyerupai versi rilis aplikasi yang terlihat oleh pengguna. Aplikasi dan layanan publikasi tidak boleh menampilkan nilai versi ini kepada pengguna. versionNameString yang digunakan sebagai nomor versi yang ditampilkan kepada pengguna. Setelan ini dapat ditentukan sebagai string mentah atau sebagai referensi resource string.
Nilai ini berupa string sehingga Anda dapat menjelaskan versi aplikasi sebagai string <major>.<minor>.<point>, atau sebagai jenis ID versi absolut atau relatif lainnya.
versionNameadalah satu-satunya nilai yang ditampilkan kepada pengguna.
Menentukan nilai versi
Anda dapat menentukan nilai default setelan ini dengan menyertakannya dalam
blok defaultConfig {}, yang disarangkan dalam blok android {}
file build.gradle atau build.gradle.kts modul. Anda kemudian dapat
mengganti nilai default ini untuk versi aplikasi lainnya dengan menentukan nilai
tersendiri untuk masing-masing jenis build atau ragam produk. File berikut menunjukkan
setelan versionCode dan versionName dalam
blok defaultConfig {}, serta blok productFlavors {}.
Nilai-nilai ini kemudian digabungkan ke dalam file manifes aplikasi pada proses build.
Groovy
android { ... defaultConfig { ... versionCode 2 versionName "1.1" } productFlavors { demo { ... versionName "1.1-demo" } full { ... } } }
Kotlin
android { ... defaultConfig { ... versionCode = 2 versionName = "1.1" } productFlavors { create("demo") { ... versionName = "1.1-demo" } create("full") { ... } } }
Dalam blok defaultConfig {} pada contoh ini, nilai versionCode menunjukkan bahwa APK saat ini berisi rilis kedua aplikasi, dan string versionName menentukan bahwa versi 1.1 akan ditampilkan kepada pengguna. File ini juga menentukan dua ragam produk, yaitu
"demo" dan "lengkap". Karena ragam produk "demo" menentukan versionName sebagai
"1.1-demo", build "demo" akan menggunakan versionName, bukan nilai default.
Blok ragam produk "lengkap" tidak menentukan versionName, sehingga
nilai default "1.1" akan digunakan.
Catatan: Jika aplikasi Anda menentukan versi aplikasi secara langsung dalam
elemen <manifest>, nilai-nilai versi dalam file build Gradle
akan menggantikan setelan dalam manifes. Selain itu, menentukan
setelan ini dalam file build Gradle memungkinkan Anda menetapkan nilai berbeda untuk
berbagai versi aplikasi. Agar lebih fleksibel dan untuk menghindari
potensi penimpaan saat manifes digabungkan, hapus
atribut ini dari elemen <manifest> dan tentukan
setelan versi dalam file build Gradle.
Framework Android menyediakan API yang memungkinkan Anda mengajukan kueri ke sistem
terkait informasi versi aplikasi. Untuk mendapatkan informasi versi,
gunakan
metode
PackageManager.getPackageInfo(java.lang.String, int).
Menentukan persyaratan level API (versi SDK)
Jika aplikasi memerlukan versi minimum spesifik platform
Android, Anda dapat menetapkan persyaratan versi tersebut sebagai setelan API level
dalam file build.gradle atau build.gradle.kts aplikasi. Saat proses
build berlangsung, setelan ini digabungkan ke dalam file manifes aplikasi Anda. Penetapan persyaratan API level
akan memastikan bahwa aplikasi Anda hanya dapat diinstal di perangkat yang
menjalankan versi platform Android yang kompatibel.
Catatan: Jika Anda menetapkan persyaratan API level secara langsung dalam
file manifes aplikasi, setelan terkait dalam file build akan
menggantikan setelan dalam file manifes. Selain itu, menentukan setelan
ini dalam file build Gradle memungkinkan Anda menetapkan nilai berbeda untuk
berbagai versi aplikasi. Agar lebih fleksibel dan untuk menghindari
potensi penimpaan saat manifes digabungkan, hapus atribut
ini dari elemen <uses-sdk> dan tentukan setelan API
level dalam file build Gradle.
Tersedia dua setelan API level:
minSdk— Versi minimum platform Android yang akan menjalankan aplikasi, yang ditetapkan oleh ID API level platform.targetSdk— Level API, terkait dengan konstanta<SDK_INT>, tempat aplikasi dirancang untuk dijalankan. Dalam situasi tertentu, setelan ini memungkinkan aplikasi menggunakan elemen atau perilaku manifes yang ditentukan dalam API level target, bukan dibatasi agar hanya menggunakan setelan yang ditentukan untuk API level minimum.
Tidak mungkin menentukan bahwa aplikasi menargetkan atau memerlukan versi SDK minor. Untuk memanggil API baru dengan aman yang memerlukan versi SDK utama atau minor yang lebih tinggi daripada minSdkVersion, Anda dapat melindungi blok kode dengan pemeriksaan untuk rilis minor atau utama menggunakan konstanta SDK_INT_FULL.
if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) { // Use APIs introduced in a major or minor SDK version }
Untuk menetapkan persyaratan API level default dalam file build.gradle atau
build.gradle.kts, tambahkan satu atau beberapa setelan API level ke
blok defaultConfig{}, yang disarangkan dalam blok android {}. Anda juga
dapat mengganti nilai default ini untuk berbagai
versi aplikasi dengan menambahkan setelan ke jenis build atau ragam produk.
File berikut menetapkan setelan
minSdk dan targetSdk dalam blok
defaultConfig {} dan mengganti minSdk
untuk satu ragam produk:
Groovy
android { ... defaultConfig { ... minSdk 21 targetSdk 33 } productFlavors { main { ... } afterNougat { ... minSdk 24 } } }
Kotlin
android { ... defaultConfig { ... minSdk = 21 targetSdk = 33 } productFlavors { create("main") { ... } create("afterNougat") { ... minSdk = 24 } } }
Saat bersiap menginstal aplikasi, sistem akan memeriksa nilai
setelan ini dan membandingkannya dengan versi sistem. Jika
nilai minSdk lebih besar dari versi sistem,
sistem akan mencegah penginstalan aplikasi.
Jika Anda tidak menetapkan setelan ini, sistem akan menganggap bahwa aplikasi Anda
kompatibel dengan semua versi platform. Ini sama dengan menetapkan minSdk ke
1.
Untuk mengetahui informasi selengkapnya, lihat Apa yang dimaksud dengan API Level?. Untuk mengetahui setelan build Gradle, lihat Mengonfigurasi varian build.