Menetapkan Versi Aplikasi Anda

Penetapan versi merupakan komponen penting dari peningkatan versi aplikasi dan strategi pemeliharaan Anda. Penetapan versi penting karena:

  • Pengguna perlu memiliki informasi spesifik mengenai versi aplikasi yang terpasang di perangkat mereka dan versi peningkatan versi yang tersedia untuk dipasang.
  • Aplikasi lain — termasuk aplikasi lain yang Anda publikasikan sebagai paket — perlu melakukan kueri pada sistem perihal versi aplikasi Anda, untuk menentukan kompatibilitas dan mengidentifikasi dependensi.
  • Layanan yang akan Anda gunakan untuk mempublikasikan aplikasi juga mungkin perlu melakukan kueri ke aplikasi untuk mengetahui versinya, agar bisa menampilkan versi kepada pengguna. Layanan publikasi juga mungkin perlu memeriksa versi aplikasi untuk menentukan kompatibilitas dan menetapkan hubungan peningkatan versi/penurunan versi.

Sistem Android tidak menggunakan informasi versi aplikasi untuk memberlakukan batasan atas peningkatan versi, penurunan versi, atau kompatibilitas aplikasi pihak ketiga. Sebagai gantinya, Anda (developer) bertanggung jawab untuk memberlakukan batasan versi dalam aplikasi atau dengan memberi tahu pengguna mengenai batasan dan keterbatasan versi. Akan tetapi, sistem Android memberlakukan kompatibilitas versi sistem sebagaimana dinyatakan oleh setelan minSdkVersion dalam file pembangunan. Setelan ini memungkinkan aplikasi menetapkan Minimum System API yang kompatibel dengannya. Untuk informasi selengkapnya, lihat Menetapkan Versi Minimum System API.

Menyetel Informasi Versi Aplikasi

Untuk mendefinisikan informasi versi aplikasi Anda, setel nilai untuk setelan versi dalam file pembangunan Gradle. Nilai-nilai ini kemudian digabungkan ke dalam file manifes aplikasi Anda selama proses pembangunan.

Catatan: Jika aplikasi Anda mendefinisikan versi aplikasi secara langsung dalam elemen <manifest>, nilai-nilai versi dalam file pembangunan Gradle akan menggantikan setelan dalam manifes. Selain itu, mendefinisikan setelan ini di file pembangunan Gradle memungkinkan Anda menetapkan nilai-nilai yang berbeda untuk versi yang berbeda bagi aplikasi Anda. Untuk mendapatkan fleksibilitas lebih besar dan untuk menghindari kemungkinan penimpaan saat manifes digabungkan, Anda harus membuang atribut ini dari elemen <manifest> dan mendefinisikan setelan versi dalam file pembangunan Gradle sebagai gantinya.

Tersedia dua setelan, dan Anda harus selalu mendefinisikan nilai-nilai kedua setelan:

  • versionCode — Integer yang digunakan sebagai nomor versi internal. Nomor ini hanya digunakan untuk menentukan apakah suatu versi lebih baru daripada versi yang lain, nomor yang lebih tinggi menunjukkan versi yang lebih baru. Ini bukanlah nomor versi yang ditampilkan kepada pengguna; nomor ini disetel oleh setelan versionName, di bawah.

    Nilai ini merupakan integer sehingga aplikasi lain bisa mengevaluasinya lewat program, misalnya untuk memeriksa hubungan peningkatan versi atau penurunan versi. Anda bisa menyetel nilainya ke suatu integer yang diinginkan, akan tetapi Anda harus memastikan setiap rilis penerus aplikasi menggunakan nilai yang lebih besar. Sistem tidak memberlakukan perilaku ini, namun penambahan nilai pada rilis penerusnya adalah hal yang normatif.

    Biasanya, Anda merilis versi pertama aplikasi dengan versionCode disetel ke 1, kemudian secara monotonik menambah nilai ini di setiap rilis, baik berupa rilis besar maupun kecil. Ini berarti nilai versionCode tidak harus memiliki kemiripan yang kuat dengan versi rilis aplikasi yang dilihat pengguna (lihat versionName, di bawah). Aplikasi dan layanan publikasi tidak boleh menampilkan nilai versi ini kepada pengguna.

    Peringatan: Nilai terbesar yang diizinkan oleh Google Play untuk versionCode adalah 2100000000.

  • versionName — String yang digunakan sebagai nomor versi yang ditampilkan kepada pengguna. Setelan ini bisa ditetapkan sebagai string mentah atau referensi ke sumber daya string.

    Nilai ini adalah string sehingga Anda bisa menjelaskan versi aplikasi berupa string <major>.<minor>.<point>, atau berupa tipe identifier versi absolut atau relatif lainnya. versionName tidak memiliki kegunaan selain untuk ditampilkan kepada pengguna.

Anda bisa mendefinisikan nilai default untuk setelan ini dengan menyertakannya dalam blok defaultConfig {}, yang disarangkan di dalam blok android {} file build.gradle modul Anda. Anda nanti bisa mengganti nilai-nilai default ini untuk versi aplikasi yang berbeda dengan mendefinisikan nilai terpisah untuk masing-masing tipe pembangunan atau ragam produk. File build.gradle berikut menampilkan setelan versionCode dan versionName dalam blok defaultConfig {}, serta blok productFlavors {}.

android {
  ...
  defaultConfig {
    ...
    versionCode 2
    versionName "1.1"
  }
  productFlavors {
    demo {
      ...
      versionName "1.1-demo"
    }
    full {
      ...
    }
  }
}

Dalam blok defaultConfig {} contoh ini, nilai versionCode menunjukkan bahwa APK saat ini berisi rilis kedua dari aplikasi, dan string versionName menetapkan bahwa nilai ini akan muncul pada pengguna sebagai versi 1.1. File build.gradle ini juga mendefinisikan dua ragam produk, "demo" dan "full". Karena ragam produk "demo" mendefinisikan versionName sebagai "1.1-demo", versi "demo" menggunakan versionName ini sebagai ganti nilai default. Blok ragam produk "full" tidak mendefinisikan versionName, sehingga ia menggunakan nilai default "1.1".

Kerangka kerja Android menyediakan API agar aplikasi bisa melakukan kueri pada sistem untuk mengetahui informasi versi aplikasi Anda. Untuk memperoleh informasi versi, gunakan metode getPackageInfo(java.lang.String, int) dari PackageManager.

Catatan: Bila Anda menggunakan Instant Run, Android Studio secara otomatis menyetel versionCode ke MAXINT dan versionName ke "INSTANTRUN".

Menetapkan Persyaratan API Level

Jika aplikasi Anda memerlukan versi minimum spesifik dari platform Android, Anda bisa menetapkan persyaratan versi itu sebagai setelan API level dalam file build.gradle aplikasi. Selama proses pembangunan, setelan ini akan digabungkan ke dalam file manifes aplikasi Anda. Penetapan persyaratan API level akan memastikan aplikasi Anda hanya bisa dipasang pada perangkat yang menjalankan versi platform Android yang kompatibel.

Catatan: Jika Anda menetapkan persyaratan API level secara langsung dalam file manifes aplikasi, setelan yang bersangkutan dalam file pembangunan akan menggantikan setelan dalam file manifes. Selain itu, mendefinisikan setelan ini di file pembangunan Gradle memungkinkan Anda menetapkan nilai-nilai yang berbeda untuk versi yang berbeda bagi aplikasi Anda. Untuk mendapatkan fleksibilitas lebih besar dan untuk menghindari kemungkinan penimpaan saat manifes digabungkan, Anda harus membuang atribut ini dari elemen <uses-sdk> dan mendefinisikan setelan API level dalam file pembangunan Gradle sebagai gantinya.

Ada dua setelan API level yang tersedia:

  • minSdkVersion — Versi minimum dari platform Android yang akan digunakan untuk menjalankan aplikasi, ditetapkan oleh identifier API level platform.
  • targetSdkVersion — Menetapkan API level yang akan digunakan untuk menjalankan aplikasi yang didesain. Dalam beberapa kasus, hal ini memungkinkan aplikasi menggunakan elemen atau perilaku manifes yang didefinisikan dalam API level target, bukan dibatasi pada penggunaan elemen atau perilaku manifes yang didefinisikan untuk API level minimum.

Untuk menetapkan persyaratan API level default dalam file build.gradle, tambahkan satu atau beberapa setelan di atas ke blok defaultConfig {}, yang disarangkan dalam blok android {}. Anda juga bisa mengganti nilai-nilai default ini untuk versi berbeda dari aplikasi dengan menambahkan setelan ke tipe pembangunan atau ragam produk. File build.gradle berikut menetapkan setelan default minSdkVersion dan targetSdkVersion dalam blok defaultConfig {} dan menggantikan minSdkVersion untuk satu ragam produk.

android {
  ...
  defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 24
  }
  productFlavors {
    main {
      ...
    }
    afterLollipop {
      ...
      minSdkVersion 21
    }
  }
}

Saat mempersiapkan untuk memasang aplikasi Anda, sistem akan memeriksa nilai setelan ini dan membandingkannya dengan versi sistem. Jika nilai minSdkVersion lebih besar daripada versi sistem, sistem akan mencegah pemasangan aplikasi.

Jika Anda tidak menetapkan setelan ini, sistem akan beranggapan bahwa aplikasi Anda kompatibel dengan semua versi platform.

Untuk informasi selengkapnya, lihat dokumentasi elemen manifes <uses-sdk> dan dokumen API Level. Untuk setelan pembangunan Gradle, lihat Mengonfigurasi Varian Pembangunan.