Menguasai Gradle untuk Android: Tugas Gradle dan Kotlin

Pengarang: Lewis Jackson
Tanggal Pembuatan: 11 Boleh 2021
Tanggal Pembaruan: 1 Juli 2024
Anonim
Gradle tutorial for complete beginners
Video: Gradle tutorial for complete beginners

Isi


Alih-alih Java, XML atau Kotlin, file Gradle build ini menggunakan bahasa khusus domain (DSL) berbasis Groovy. Jika Anda tidak terbiasa dengan Groovy, maka kami akan melihat-lihat setiap baris file-file build Gradle ini, jadi pada akhir artikel ini Anda akan merasa nyaman dengan membaca dan menulis kode Groovy sederhana.

Gradle bertujuan untuk membuat hidup Anda lebih mudah, dengan menyediakan satu set pengaturan default yang sering dapat Anda gunakan dengan konfigurasi manual minimum - ketika Anda siap untuk membangun proyek Anda, cukup tekan tombol "Run" Android Studio dan Gradle akan memulai proses pembuatan untukmu.

Terlepas dari pendekatan "konvensi atas konfigurasi" Gradle, jika pengaturan defaultnya tidak cukup memenuhi kebutuhan Anda, maka Anda dapat menyesuaikan, mengonfigurasi dan memperpanjang proses pembuatan, dan bahkan mengubah pengaturan Gradle untuk melakukan tugas yang sangat spesifik.


Karena skrip Gradle terkandung dalam file mereka sendiri, Anda dapat memodifikasi proses pembuatan aplikasi Anda kapan saja, tanpa harus menyentuh kode sumber aplikasi Anda. Dalam tutorial ini, kami akan memodifikasi proses pembuatan menggunakan rasa, varian pembuatan, dan tugas Gradle khusus - semuanya tanpa pernah menyentuh kode aplikasi kami.

Menjelajahi file build Gradle

Setiap kali Anda membuat proyek, Android Studio akan menghasilkan kumpulan file yang sama dengan Gradle build. Bahkan jika Anda mengimpor proyek yang ada ke Android Studio, itu akan masih buat file Gradle yang sama persis ini, dan tambahkan ke proyek Anda.

Untuk mulai mendapatkan pemahaman yang lebih baik tentang sintaks Gradle dan Groovy, mari kita lihat baris demi baris pada masing-masing file Android Gradle build.

1. settings.gradle

File settings.gradle adalah tempat Anda akan mendefinisikan semua modul aplikasi Anda berdasarkan nama, menggunakan kata kunci "sertakan". Misalnya, jika Anda memiliki proyek yang terdiri dari "aplikasi" dan "modul kedua," maka file settings.gradle Anda akan terlihat seperti ini:


termasuk: app,: secondmodule rootProject.name = MyProject

Bergantung pada ukuran proyek Anda, file ini mungkin jauh lebih lama.

Selama proses pembuatan, Gradle akan memeriksa konten file settings.gradle proyek Anda dan mengidentifikasi semua modul yang perlu dimasukkan dalam proses pembuatan.

2. build.gradle (tingkat proyek)

File build.gradle tingkat proyek terletak di direktori root proyek Anda dan berisi pengaturan yang akan diterapkan semua modul Anda (juga disebut sebagai "proyek" oleh Gradle).

Anda harus menggunakan file ini untuk menentukan plugin, repositori, dependensi, dan opsi konfigurasi apa pun yang berlaku untuk setiap modul di seluruh proyek Android Anda. Perhatikan bahwa jika Anda mendefinisikan tugas Gradle apa pun di dalam file build.gradle tingkat proyek, maka masih mungkin untuk mengganti atau memperluas tugas-tugas ini untuk masing-masing modul, dengan mengedit yang terkait tingkat modul file build.gradle.

File build.gradle tingkat proyek yang khas akan terlihat seperti ini:

buildscript {repositories {google () jcenter ()} dependensi {classpath com.android.tools.build:gradle:3.5.0-alpha06 // CATATAN: Jangan letakkan dependensi aplikasi Anda di sini; mereka termasuk // dalam file build.gradle modul individu}} semua proyek {repositori {google () jcenter ()}} tugas bersih (ketik: Hapus) {delete rootProject.buildDir}

File build.gradle tingkat proyek ini dibagi menjadi beberapa blok berikut:

  • Buildscript. Ini berisi pengaturan yang diperlukan untuk melakukan pembangunan.
  • Repositori. Gradle bertanggung jawab untuk menemukan dependensi proyek Anda dan membuatnya tersedia di gedung Anda. Namun, tidak semua dependensi berasal dari repositori yang sama, jadi Anda harus mendefinisikan semua repositori yang harus dicari Gradle, untuk mengambil dependensi proyek Anda.
  • Ketergantungan. Bagian ini berisi dependensi plugin Anda, yang diunduh dan disimpan di cache lokal Anda. Kamu harus tidak mendefinisikan setiap dependensi modul dalam blok ini.
  • Semua proyek. Di sinilah Anda akan menentukan repositori yang harus tersedia semua modul proyek Anda.

3. build.gradle (level modul)

Ini adalah file build.gradle tingkat modul, yang ada di setiap modul di seluruh proyek Anda. Jika proyek Android Anda terdiri dari beberapa modul, maka itu juga akan terdiri dari beberapa file build.gradle tingkat modul.

Setiap file build.gradle tingkat modul berisi nama paket proyek Anda, nama versi dan kode versi, ditambah SDK minimum dan target untuk modul khusus ini.

File build.gradle tingkat modul juga dapat memiliki serangkaian instruksi dan dependensi build yang unik. Misalnya, jika Anda membuat aplikasi dengan komponen Wear OS, maka proyek Android Studio Anda akan terdiri dari modul smartphone / tablet yang terpisah dan modul Wear - karena mereka menargetkan perangkat yang sepenuhnya berbeda, modul-modul ini memiliki perbedaan yang sangat drastis. ketergantungan!

File build.gradle tingkat modul dasar biasanya akan terlihat seperti ini:

terapkan plugin: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.speechtotext" minSdkVersion 23 targetSdkVersion 28 versiCode 1 versiName "1.0" testInstrumentationRunner "androidx.test.runner rilisuntuk tidak diubahuntuk membatalkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemutihkan tugasuntukmemindahkan tugasuntukmemindahkan tugasuntidakmemutihkanuntukmemutihkan tugasuntukmemutihkan tugas? getDefaultProguardFile (proguard-android-optim.txt), proguard-rules.pro}}} dependensi {fileTree implementasi (dir: libs, termasuk:) implementasi androidx.appcompat: appcompat: 1.0.2 implementasi androidx.constraintlayout: constraintlayout: 1.1. 3 testImplementation junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1}

Mari kita perhatikan lebih dekat masing-masing bagian ini:

  • terapkan plugin. Ini adalah daftar plugin yang diperlukan untuk membangun modul ini. Plugin com.android.application diperlukan untuk mengatur proses pembuatan khusus Android, jadi ini ditambahkan secara otomatis.
  • android. Di sinilah Anda harus menempatkan semua opsi khusus platform modul.
  • compileSdkVersion. Ini adalah tingkat API yang dikompilasi dengan modul ini. Anda tidak dapat menggunakan fitur dari API yang lebih tinggi dari nilai ini.
  • buildToolsVersion. Ini menunjukkan versi kompiler. Di Gradle 3.0.0 dan lebih tinggi, buildToolsVersion adalah opsional; jika Anda tidak menentukan nilai buildToolsVersion maka Android Studio akan default ke versi Build Tools terbaru.
  • defaultConfig. Ini berisi opsi yang akan diterapkan ke semua versi aplikasi Anda, seperti debug dan rilis versi Anda.
  • applicationId. Ini adalah pengidentifikasi unik aplikasi Anda.
  • minSdkVersion. Parameter ini menentukan level API terendah yang didukung modul ini.
  • targetSdkVersion. Ini adalah level API maksimum yang diuji oleh aplikasi Anda. Idealnya, Anda harus menguji aplikasi Anda menggunakan API terbaru, yang berarti nilai targetSdkVersion akan selalu sama dengan nilai compileSdkVersion.
  • versionCode. Ini adalah nilai numerik untuk versi aplikasi Anda.
  • versionName. Ini adalah string yang mudah digunakan, yang mewakili versi aplikasi Anda.
  • buildTypes. Secara default, Android mendukung dua tipe build: debug dan rilis. Anda dapat menggunakan blok "debug" dan "lepaskan" untuk menentukan pengaturan spesifik-jenis aplikasi Anda.
  • ketergantungan. Di sinilah Anda akan mendefinisikan perpustakaan mana pun yang menjadi sandaran modul ini.

Mendeklarasikan dependensi proyek Anda: Perpustakaan lokal

Anda dapat membuat fungsionalitas tambahan tersedia untuk proyek Android Anda, dengan menambahkan satu atau lebih dependensi proyek. Ketergantungan ini bisa bersifat lokal, atau dapat disimpan dalam repositori jarak jauh.

Untuk mendeklarasikan ketergantungan pada file JAR lokal, Anda harus menambahkan JAR itu ke direktori "libs" proyek Anda.

Anda kemudian dapat memodifikasi file build.gradle tingkat modul untuk menyatakan ketergantungan pada file ini. Misalnya, di sini kami mendeklarasikan ketergantungan pada JAR "mylibrary".

file implementasi (libs / mylibrary.jar)

Atau, jika folder "libs" Anda berisi beberapa JAR, maka mungkin lebih mudah untuk menyatakan bahwa proyek Anda tergantung pada semua file yang berada di dalam folder "libs", misalnya:

implementasi fileTree (dir: libs, termasuk:)

Menambahkan ketergantungan build: repositori jarak jauh

Jika perpustakaan terletak di repositori jarak jauh, maka Anda harus menyelesaikan langkah-langkah berikut:

  • Tetapkan repositori tempat dependensi ini berada.
  • Nyatakan ketergantungan individu.

Menghubungkan ke repositori jarak jauh

Langkah pertama, memberi tahu Gradle repositori (atau repositori) mana yang perlu diperiksa, untuk mengambil semua dependensi proyek Anda. Sebagai contoh:

repositori {google () jcenter ()}}

Di sini, baris “jcenter ()” memastikan bahwa Gradle akan memeriksa repositori JCenter, yang merupakan repositori publik gratis yang di-host di bintray.

Atau, jika Anda atau organisasi Anda mengelola repositori pribadi, maka Anda harus menambahkan URL repositori ini ke deklarasi dependensi Anda. Jika repositori dilindungi kata sandi, maka Anda juga harus memberikan informasi login Anda, misalnya:

repositori {mavenCentral () maven {// Konfigurasikan URL target // url "http://repo.mycompany.com/myprivaterepo"} maven {kredensial {nama pengguna nama pengguna kata sandi kata sandi myPassword} url "http://repo.mycompany.com / myprivaterepo "}

Jika dependensi hadir dalam beberapa repositori, maka Gradle akan memilih versi "terbaik" dari dependensi ini, berdasarkan faktor-faktor seperti usia setiap repositori dan versi statis.

Mendeklarasikan ketergantungan jarak jauh

Langkah selanjutnya adalah mendeklarasikan dependensi pada file build.gradle tingkat modul Anda. Anda menambahkan informasi ini ke blok "dependensi", menggunakan salah satu dari berikut ini:

  • Pelaksanaan. Ini adalah ketergantungan normal yang Anda butuhkan setiap kali Anda membangun proyek Anda. Ketergantungan "implementasi" akan hadir di seluruh semua membangun Anda.
  • Uji implementasi. Ini adalah ketergantungan yang diperlukan untuk mengkompilasi sumber uji aplikasi Anda dan menjalankan tes berbasis JVM. Ketika Anda menandai dependensi sebagai "Uji Implementasi", Gradle akan tahu bahwa itu tidak harus menjalankan tugas untuk dependensi ini selama build normal, yang dapat membantu mengurangi waktu build.
  • Implementasi Android. Ini adalah ketergantungan yang diperlukan saat menjalankan tes pada perangkat, misalnya kerangka kerja Espresso adalah “penerapan Android” yang umum.

Kami mendefinisikan ketergantungan jarak jauh, menggunakan salah satu kata kunci di atas, diikuti oleh grup ketergantungan, nama, dan atribut versi, misalnya:

dependencies {implementasi fileTree (dir: libs, termasuk:) implementasi androidx.appcompat: appcompat: 1.0.2 implementasi androidx.constraintlayout: constraintlayout: 1.1.3 testImplementation junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1}

Menghasilkan banyak APK: Cara membuat varian build

Terkadang, Anda mungkin perlu membuat beberapa versi aplikasi Anda. Misalnya, Anda mungkin ingin merilis versi gratis dan versi berbayar, yang mencakup beberapa fitur tambahan.

Ini adalah tugas build yang dapat membantu Gradle Anda, jadi mari kita lihat bagaimana Anda memodifikasi proses build untuk membuat beberapa APK dari satu proyek:

  • Buka file strings.xml Anda dan hapus string nama aplikasi asli Anda.
  • Selanjutnya, tentukan nama setiap cita rasa produk yang ingin Anda buat; dalam hal ini, saya menggunakan:

Aplikasi gratis saya Aplikasi berbayar saya

  • Buka file AndroidManifest.xml Anda dan ganti android: label = ”@ string / app_name” dengan:

android: label = "$ {appName}"

  • Buka file build.gradle tingkat modul Anda dan tambahkan berikut ini ke blok "android":

flavourDimensions "mode" productFlavours {free {dimension "mode" applicationIdSuffix ".free" manifestPlaceholder =} berbayar {dimension "mode" applicationIdSuffix ".paid" manifestPlaceholder =}}}

Mari kita uraikan apa yang terjadi di sini:

  • flavorDimensions. Plugin Android menciptakan varian versi dengan menggabungkan rasa dari dimensi yang berbeda. Di sini, kami membuat dimensi rasa yang terdiri dari versi "gratis" dan "berbayar" aplikasi kami. Berdasarkan kode di atas, Gradle akan menghasilkan empat varian versi: paidDebug, paidRelease, freeDebug, dan freeRelease.
  • keunggulan produk. Ini menentukan daftar rasa dan pengaturannya, yang dalam kode di atas adalah "dibayar" dan "gratis."
  • Gratis / berbayar. Ini adalah nama dari dua rasa produk kami.
  • Dimensi. Kita perlu menentukan nilai parameter "dimensi"; dalam hal ini, saya menggunakan "mode."
  • applicationIdSuffix. Karena kami ingin membuat beberapa versi aplikasi kami, kami harus memberi setiap APK pengenal aplikasi yang unik.
  • manifestPlaceholder. Setiap proyek memiliki file Manifest tunggal yang berisi informasi penting tentang konfigurasi proyek Anda. Saat membuat beberapa varian build, Anda biasanya ingin memodifikasi beberapa properti Manifest ini pada waktu build. Anda dapat menggunakan file build Gradle untuk menentukan entri Manifest unik untuk setiap varian build, yang kemudian akan dimasukkan ke dalam Manifest Anda saat membangun. Dalam kode di atas, kami mengubah nilai "appName" tergantung pada apakah Gradle membuat versi gratis atau versi berbayar dari aplikasi kami.

Membuat tugas Gradle khusus

Terkadang Anda mungkin perlu menyesuaikan proses pembuatan, menggunakan Gradle tugas.

Tugas adalah kumpulan tindakan yang dinamai Gradle akan dijalankan saat melakukan pembangunan, misalnya menghasilkan Javadoc. Gradle mendukung banyak tugas secara default, tetapi Anda juga dapat membuat tugas kustom, yang dapat berguna jika Anda memiliki kumpulan instruksi bangunan yang sangat spesifik.

Di bagian ini, kami akan membuat tugas Gradle khusus yang akan beralih melalui semua varian build proyek kami (paidDebug, paidRelease, freeDebug, dan freeRelease), buat cap tanggal dan waktu, dan kemudian tambahkan informasi ini ke setiap APK yang dibuat.

Buka file build.gradle tingkat modul Anda dan tambahkan berikut ini:

task addDateAndTime () {// Iterate melalui semua varian build output // android.applicationVariants.all {varian -> // Iterate melalui semua file APK // variant.outputs.all {output -> // Buat instance dari tanggal dan waktu saat ini, dalam format yang ditentukan // def dateAndTime = format Date (). baru ("yyyy-MM-dd: HH-mm") // Menambahkan informasi ini ke nama file APK // def fileName = varian. name + "_" + dateAndTime + ".apk" output.outputFileName = fileName}}}

Selanjutnya, kita perlu memberi tahu Gradle kapan harus menjalankan tugas ini. Selama membangun, Gradle mengidentifikasi semua yang diperlukan untuk mengunduh dan semua tugas yang harus dijalankan, dan mengaturnya dalam Grafik Acyclic yang Diarahkan (DAG). Gradle kemudian akan menjalankan semua tugas ini, sesuai dengan urutan yang ditentukan dalam DAG-nya.

Untuk aplikasi saya, saya akan menggunakan metode "whenReady", yang memastikan tugas kami akan dipanggil setelah DAG diisi, dan Gradle siap untuk mulai menjalankan tugasnya.

Tambahkan berikut ini ke file build.gradle tingkat modul Anda:

// Jalankan tugas ini // gradle.taskGraph.whenReady {addDateAndTime}

Ayo letakkan tugas khusus kami dan kode varian build kami untuk diuji, dengan membangun proyek ini menggunakan perintah Gradle.

Membangun proyek Anda dengan pembungkus Gradle

Anda mengeluarkan perintah Gradle menggunakan pembungkus Gradle ("gradlew"). Script ini adalah cara yang disukai untuk memulai pembangunan Gradle, karena membuat eksekusi build independen dari versi Gradle Anda. Pemisahan ini dapat bermanfaat jika Anda berkolaborasi dengan orang lain yang mungkin belum menginstal versi Gradle yang sama.

Saat mengeluarkan perintah pembungkus Gradle Anda, Anda akan menggunakan "gradlew" untuk sistem operasi mirip Unix, termasuk macOS, dan "gradlew.bat" untuk Windows. Saya memiliki Mac, jadi saya akan menggunakan perintah "gradlew".

Anda dapat mengeluarkan perintah Gradle dari dalam Android Studio:

  • Di bilah alat Android Studio, pilih "Lihat> Alat Windows> Terminal." Ini membuka panel Terminal di sepanjang bagian bawah jendela IDE.
  • Masukkan perintah berikut ke Terminal:

./gradlew build

Android Studio akan terlihat seperti ini:

  • Tekan tombol "Enter" di keyboard Anda. Gradle sekarang akan membangun proyek Anda.

Gradle menyimpan semua APK yang dihasilkan di direktori app / build / outputs / apk proyek Anda, jadi navigasikan ke direktori ini. Folder "APK" harus berisi beberapa folder dan subfolder; pastikan Gradle telah membuat APK untuk setiap varian versi Anda, dan bahwa informasi tanggal dan waktu yang benar telah ditambahkan ke setiap file.

Apa tugas Gradle lain yang tersedia?

Selain tugas khusus yang mungkin Anda buat, Gradle mendukung daftar tugas yang telah ditentukan di luar kotak. Jika Anda ingin tahu persis tugas apa yang tersedia, maka:

  • Buka jendela Terminal Android Studio, jika belum terbuka (dengan memilih "Lihat> Alat Windows> Terminal" dari bilah alat Android Studio).
  • Ketikkan yang berikut ke Terminal:

./gradlew -q tugas

  • Tekan tombol "Enter" di keyboard Anda.

Tugas "tugas" ini sekarang akan berjalan, dan setelah beberapa saat Terminal akan menampilkan daftar semua tugas yang tersedia untuk proyek ini, lengkap dengan deskripsi singkat dari setiap tugas.

Mendapatkan lebih banyak dari Gradle: Menambahkan plugin

Gradle dikirimkan bersama sejumlah plugin yang telah diinstal sebelumnya, tetapi Anda dapat memperpanjang Gradle lebih jauh dengan menambahkan plugin baru. Plugin ini membuat tugas baru tersedia untuk proyek Android Anda, misalnya plugin Java termasuk tugas yang memungkinkan Anda untuk mengkompilasi kode sumber Java, menjalankan tes unit dan membuat file JAR, seperti "compileJava," "compileText," "jar," "Javadoc," dan "bersih."

Untuk menerapkan plugin, tambahkan deklarasi “apply plugin” ke file build.gradle tingkat modul Anda, diikuti dengan nama plugin tersebut. Misalnya, di sini kami menerapkan plugin Java:

terapkan plugin: java

Jika Anda penasaran ingin melihat plugin apa yang tersedia, maka periksa pencarian Plugin Gradle, yang menyediakan registri komprehensif plugin Gradle.

DSL Gradle Kotlin

Secara default, Anda akan menulis skrip build Gradle Anda menggunakan Groovy DSL, tetapi jika Anda salah satu dari banyak pengembang yang mengadopsi Kotlin untuk pengembangan Android, maka Anda dapat memilih untuk menulis skrip build Anda di Kotlin.

Tidak seperti Groovy, Kotlin adalah bahasa pemrograman yang diketik secara statis, jadi jika Anda beralih maka file build Anda akan kompatibel dengan fitur pelengkapan otomatis dan navigasi kode sumber Android Studio. Selain itu, pindah dari Groovy ke Kotlin berarti Anda akan menggunakan bahasa pemrograman yang sama di seluruh proyek Anda, yang dapat membuat pengembangan lebih mudah - terutama jika Anda tidak terlalu terbiasa dengan Groovy!

Jika Anda ingin mulai menulis logika build Anda di Kotlin, maka Anda harus menyiapkan DSL Gradle Kotlin dan ikuti instruksi dalam panduan migrasi.

Membungkus

Dalam artikel ini, kami mengeksplorasi alat otomatisasi dan ketergantungan manajemen Android Studio. Kami memeriksa bagaimana Gradle mengotomatiskan proses pembuatan di luar kotak, dan bagaimana Anda dapat memodifikasi proses pembuatan dengan mengedit file pembangunan Gradle proyek Anda, termasuk membuat tugas Gradle khusus, dan menghasilkan beberapa varian build dari satu proyek.

Sudahkah Anda memperpanjang Gradle untuk mengotomatiskan bagian lain dari proses pembuatan Android? Beri tahu kami di komentar di bawah!

Minggu ini melihat rili pengaturan kamera 108MP pertama di dunia dalam Xiaomi Mi Note 10. Kamera ini tentu mengeankan di ata kerta, tetapi Google dan Apple maih membuktikan bahwa foto-foto martphone t...

Kredit Foto: Marcu DaweBerita bear Apple minggu ini terjadi baru kemarin, dengan perancang utama ir Jonathan Ive mengumumkan dia akan meninggalkan peruahaan etelah lebih dari 20 tahun. Kami juga meli...

Populer Di Lokasi