Menguasai Gradle untuk Android: tugas Gradle dan Kotlin

Pengarang: Lewis Jackson
Tarikh Penciptaan: 11 Mungkin 2021
Tarikh Kemas Kini: 1 Julai 2024
Anonim
Gradle tutorial for complete beginners
Video.: Gradle tutorial for complete beginners

Kandungan


Daripada Java, XML atau Kotlin, Gradle membina fail menggunakan bahasa khusus domain Groovy (DSL). Sekiranya anda tidak biasa dengan Groovy, kami akan melihat garis demi baris pada setiap Gradle membina fail, jadi pada akhir artikel ini anda akan selesa dengan membaca dan menulis kod Groovy yang mudah.

Gradle bertujuan untuk menjadikan kehidupan anda lebih mudah, dengan menyediakan satu set tetapan lalai yang sering anda gunakan dengan konfigurasi manual minimum - apabila anda siap untuk membina projek anda, cukup tekan butang "Run" Android Studio dan Gradle akan memulakan proses bina untuk anda.

Walaupun pendekatan "Konvensyen atas konfigurasi" Gradle, jika tetapan lalainya tidak cukup memenuhi keperluan anda, maka anda boleh menyesuaikan, mengkonfigurasi dan memperluaskan proses binaan, dan juga mengubah taraf Gradle untuk melaksanakan tugas yang sangat spesifik.


Oleh kerana skrip Gradle terkandung dalam fail mereka sendiri, anda boleh mengubah proses membina aplikasi anda pada bila-bila masa, tanpa perlu menyentuh kod sumber aplikasi anda. Dalam tutorial ini, kami akan mengubah proses binaan menggunakan perisa, membina variasi dan tugas Gradle tersuai - semua tanpa pernah menyentuh kod permohonan kami.

Meneroka Gradle membina fail

Setiap kali anda membuat projek, Android Studio akan menghasilkan koleksi yang sama Gradle membina fail. Walaupun anda mengimport projek yang sedia ada ke Android Studio, ia akan masih ada buat fail Gradle yang sama, dan tambahkannya ke projek anda.

Untuk mula mendapatkan pemahaman yang lebih baik tentang Gradle dan sintaks Groovy, mari kita lihat secara garis demi baris pada setiap Android Gradle membina fail.

1. settings.gradle

Fail tetapan.gradle adalah di mana anda akan menentukan semua modul aplikasi anda dengan nama, menggunakan kata kunci "termasuk". Contohnya, jika anda mempunyai projek yang terdiri daripada "app" dan "secondModule," maka fail settings.gradle anda akan kelihatan seperti ini:


termasuk: app,: secondmodule rootProject.name = MyProject

Bergantung kepada saiz projek anda, fail ini mungkin lebih lama.

Semasa proses membina, Gradle akan mengkaji kandungan fail settings.gradle anda dan mengenal pasti semua modul yang perlu disertakan dalam proses membina.

2. build.gradle (tahap projek)

Fail build.gradle tahap projek terletak di direktori root projek anda dan mengandungi tetapan yang akan digunakan untuk semua modul anda (juga dirujuk sebagai "projek" oleh Gradle).

Anda harus menggunakan fail ini untuk menentukan sebarang plugin, repositori, dependensi, dan pilihan konfigurasi yang digunakan untuk setiap modul sepanjang projek Android anda. Ambil perhatian bahawa jika anda menentukan tugas Gradle dalam fail build.gradle peringkat projek, maka masih mungkin untuk menimpa atau memperluas tugas-tugas ini untuk modul individu, dengan menyunting penyesuaian yang sesuai tahap modul fail build.gradle.

Satu fail build.gradle tahap projek yang biasa akan kelihatan seperti ini:

buildscript {repositories {google () jcenter ()} dependencies {classpath com.android.tools.build:gradle:3.5.0-alpha06 // NOTA: Jangan letakkan ketergantungan aplikasi anda di sini; mereka termasuk // dalam mod build.gradle modul individu}} allprojects {repositories {google () jcenter ()}} tugas bersih (jenis: Padam) {delete rootProject.buildDir}

Fail build.gradle tahap projek ini dibahagikan kepada blok berikut:

  • Buildscript. Ini mengandungi tetapan yang diperlukan untuk melaksanakan binaan.
  • Repositori. Gradle bertanggungjawab untuk mencari dependensi projek anda dan menjadikannya tersedia dalam binaan anda. Walau bagaimanapun, tidak semua dependensi datang dari repositori yang sama, jadi anda perlu menentukan semua repositori yang Gradle harus mencari, untuk mendapatkan dependensi projek anda.
  • Kebergantungan. Bahagian ini mengandungi dependencies plugin anda, yang dimuat turun dan disimpan dalam cache setempat anda. Kamu patut tidak tentukan sebarang kebergantungan modul dalam blok ini.
  • Semua projek. Di sinilah anda akan menentukan repositori yang sepatutnya tersedia semua modul projek anda.

3. build.gradle (tahap modul)

Ini ialah fail build.gradle tahap modul, yang terdapat dalam setiap modul sepanjang projek anda. Jika projek Android anda terdiri daripada pelbagai modul, maka ia juga akan terdiri daripada beberapa fail build.gradle tahap modul.

Setiap fail build.gradle modul mengandungi nama pakej projek anda, nama versi dan kod versi, ditambah SDK minimum dan target untuk modul tertentu ini.

Fail membangun.gradle tahap modul juga boleh mempunyai set unik membina arahan dan dependensi. Contohnya, jika anda membuat aplikasi dengan komponen OS Pakai, maka projek Android Studio anda akan terdiri daripada modul telefon pintar / tablet berasingan dan modul Pakai - kerana mereka menyasarkan peranti yang sama sekali berbeza, modul ini mempunyai secara drastik berbeza kebergantungan!

Fail build.gradle tahap modul asas biasanya akan kelihatan seperti ini:

memohon plugin: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.speechtotext" minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"} buildTypes {release {minifyEnabled proguardFiles false getDefaultProguardFile (proguard-android-optimize.txt), proguard-rules.pro}}} dependencies {implementation fileTree (dir: libs, include:) implementation androidx.appcompat: appcompat: 1.0.2 implementation 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 lihat lebih dekat pada setiap bahagian ini:

  • memohon plugin. Ini adalah senarai plugin yang diperlukan untuk membina modul ini. Plugin com.android.application diperlukan untuk menyediakan proses bina khusus Android, jadi ini ditambahkan secara automatik.
  • android. Di sinilah anda harus meletakkan semua pilihan khusus platform modul.
  • compileSdkVersion. Ini adalah tahap API yang modul ini disusun dengan. Anda tidak boleh menggunakan ciri dari API yang lebih tinggi daripada nilai ini.
  • buildToolsVersion. Ini menunjukkan versi pengkompil. Dalam Gradle 3.0.0 dan lebih tinggi, buildToolsVersion adalah pilihan; jika anda tidak menetapkan nilai buildToolsVersion maka Android Studio akan lalai ke versi Build Tools yang terbaru.
  • defaultConfig. Ini mengandungi pilihan yang akan digunakan untuk semua versi binaan aplikasi anda, seperti debug dan membebaskan binaan anda.
  • aplikasiId. Ini adalah pengenal unik aplikasi anda.
  • minSdkVersion. Parameter ini mentakrifkan tahap API yang paling rendah yang menyokong modul ini.
  • targetSdkVersion. Ini adalah paras API maksimum yang permohonan anda telah diuji terhadap. Sebaiknya, anda harus menguji aplikasi anda menggunakan API terkini, yang bermaksud nilai targetSdkVersion akan sentiasa sama dengan nilai kompilasiSdkVersion.
  • versionCode. Ini adalah nilai angka untuk versi permohonan anda.
  • versionName. Ini adalah rentetan mesra pengguna, yang mewakili versi aplikasi anda.
  • buildTypes. Secara lalai, Android menyokong dua jenis binaan: debug dan pembebasan. Anda boleh menggunakan blok "debug" dan "melepaskan" untuk menentukan tetapan khusus jenis aplikasi anda.
  • kebergantungan. Ini adalah di mana anda akan menentukan mana-mana perpustakaan yang modul ini bergantung kepada.

Mengisytiharkan kebergantungan projek anda: Perpustakaan tempatan

Anda boleh membuat fungsi tambahan yang tersedia untuk projek Android anda, dengan menambah satu atau lebih ketergantungan projek. Ketergantungan ini boleh menjadi setempat, atau mereka boleh disimpan dalam repositori jauh.

Untuk mengisytiharkan kebergantungan pada fail JAR tempatan, anda perlu menambah JAR itu ke direktori "libs" projek anda.

Anda kemudiannya boleh mengubah fail build.gradle tahap modul untuk menyatakan kebergantungan pada fail ini. Sebagai contoh, di sini kami mengisytiharkan pergantungan pada JAR "mylibrary".

fail pelaksanaan (libs / mylibrary.jar)

Sebagai alternatif, jika folder "libs" anda mengandungi beberapa JAR, maka mungkin lebih mudah untuk menyatakan bahawa projek anda bergantung pada semua fail yang terletak dalam folder "libs", sebagai contoh:

pelaksanaan failTree (dir: libs, termasuk:)

Menambah kebergantungan membina: repositori jauh

Jika sebuah perpustakaan terletak dalam repositori jauh, maka anda perlu melengkapkan langkah-langkah berikut:

  • Tentukan repositori tempat ketergantungan ini terletak.
  • Terangkan kebergantungan individu.

Menyambung ke repositori jauh

Langkah pertama ialah memberitahu Gradle yang repositori (atau repositori) yang perlu diperiksa, untuk mendapatkan semua ketergantungan projek anda. Sebagai contoh:

repositori {google () jcenter ()}}

Di sini, baris "jcenter ()" memastikan Gradle akan memeriksa repositori JCenter, yang merupakan repositori awam yang dihoskan di bintray.

Sebagai alternatif, jika anda atau organisasi anda menyimpan repositori peribadi, maka anda harus menambahkan URL repositori ini kepada pernyataan ketergantungan anda. Jika repositori dilindungi kata laluan, maka anda juga perlu memberikan maklumat login anda, sebagai contoh:

repositori {mavenCentral () maven {// Configure the target URL // url "http://repo.mycompany.com/myprivaterepo"} maven {credentials {username myUsername password myPassword} url "http://repo.mycompany.com / myprivaterepo "}

Sekiranya terdapat kebergantungan dalam pelbagai repositori, maka Gradle akan memilih versi "terbaik" kebergantungan ini, berdasarkan faktor-faktor seperti umur setiap repositori dan versi statik.

Mengisytiharkan pergantungan jauh

Langkah seterusnya ialah mengisytiharkan pergantungan dalam fail build.gradle tahap modul anda. Anda menambah maklumat ini ke blok "dependencies", menggunakan mana-mana yang berikut:

  • Pelaksanaan. Ini adalah kebergantungan biasa yang anda perlukan apabila anda membina projek anda. Kebergantungan "pelaksanaan" akan hadir di seluruh semua binaan anda.
  • Testimplementation. Ini adalah kebergantungan yang diperlukan untuk menyusun sumber ujian aplikasi anda dan menjalankan ujian berasaskan JVM. Apabila anda menandakan kebergantungan sebagai "Ujian Pelaksanaan" Gradle akan tahu bahawa ia tidak perlu menjalankan tugas untuk kebergantungan ini semasa bina biasa, yang dapat membantu mengurangkan masa membina.
  • Androidtestimplementation. Ini adalah kebergantungan yang diperlukan ketika menjalankan ujian pada peranti, contohnya kerangka Espresso adalah "implementasi penerapan Android" biasa.

Kami menentukan kebergantungan terpencil, menggunakan salah satu kata kunci di atas, diikuti oleh atribut kumpulan, nama dan versi ketergantungan, contohnya:

dependencies {implementation fileTree (dir: libs, include:) implementation androidx.appcompat: appcompat: 1.0.2 implementation 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}

Menjana berbilang APK: Bagaimana untuk membuat variasi bina

Kadang-kadang, anda mungkin perlu membuat pelbagai versi permohonan anda. Sebagai contoh, anda mungkin mahu melepaskan versi percuma dan versi berbayar, yang termasuk beberapa ciri tambahan.

Ini adalah tugas membina yang Gradle boleh membantu anda, jadi mari lihat bagaimana anda akan mengubah proses bina untuk membuat pelbagai APK dari satu projek:

  • Buka fail strings.xml anda dan padamkan rentetan nama aplikasi asal anda.
  • Seterusnya, tentukan nama setiap rasa produk yang anda ingin buat; dalam contoh ini, saya menggunakan:

Aplikasi percuma saya Apl berbayar saya

  • Buka fail AndroidManifest.xml anda dan gantikan android: label = "@ string / app_name" dengan:

android: label = "$ {appName}"

  • Buka fail build.gradle tahap modul anda dan tambahkan yang berikut ke blok "android":

rasa "mode" productFlavors {free {dimensi "mode" applicationIdSuffix "manifest" manifestPlaceholders =} paid {dimension "mode" applicationIdSuffix "paid" manifestPlaceholders =}}}

Mari pecahkan apa yang berlaku di sini:

  • rasaDimensions. Plugin Android mewujudkan variasi binaan dengan menggabungkan rasa dari dimensi yang berbeza. Di sini, kami mewujudkan dimensi rasa yang terdiri daripada versi "percuma" dan "berbayar" apl kami. Berdasarkan kod di atas, Gradle akan menghasilkan empat varian pembina: paidDebug, paidRelease, freeDebug dan freeRelease.
  • productFlavors. Ini menentukan senarai perisa dan tetapannya, yang dalam kod di atas adalah "dibayar" dan "percuma."
  • Percuma / dibayar. Ini adalah nama-nama dua produk kami.
  • Dimensi. Kita perlu menentukan nilai parameter "dimensi"; dalam contoh ini, saya menggunakan "mod."
  • applicationIdSuffix. Oleh kerana kami ingin membuat pelbagai versi aplikasi kami, kami perlu memberikan setiap APK pengecam aplikasi unik.
  • manifestasi Pemegang Saham. Setiap projek mempunyai fail Manifest tunggal yang mengandungi maklumat penting mengenai konfigurasi projek anda. Apabila membuat pelbagai binaan binaan, biasanya anda akan mahu mengubah suai beberapa ciri-ciri Manifest ini pada masa membina. Anda boleh menggunakan Gradle build files untuk menentukan entri Manifest yang unik untuk setiap varian binaan, yang kemudiannya akan dimasukkan ke dalam Manifest anda pada waktu bina. Dalam kod di atas, kami mengubah nilai "appName" bergantung kepada sama ada Gradle sedang membina aplikasi percuma atau versi berbayar kami.

Membuat tugas Gradle tersuai

Kadang-kadang anda mungkin perlu menyesuaikan proses binaan, menggunakan Gradle tugas.

Tugasan adalah koleksi yang dinamakan tindakan Gradle yang akan dilaksanakan kerana ia melakukan binaan, contohnya menjana Javadoc. Gradle menyokong banyak tugasan secara lalai, tetapi anda juga boleh membuat tugas khusus, yang boleh berguna jika anda mempunyai satu set yang sangat spesifik untuk membina arahan.

Dalam bahagian ini, kami akan mencipta tugas Gradle tersuai yang akan melampaui semua varian binaan projek kami (dibayarDebug, paidRelease, freeDebug dan freeRelease), mencipta setem tarikh dan masa, dan kemudian masukkan maklumat ini kepada setiap APK yang dihasilkan.

Buka fail build.gradle tahap anda dan tambahkan yang berikut:

tugas addDateAndTime () {// Beralih melalui semua varian binaan keluaran // android.applicationVariants.all {varian -> // Berterusan melalui semua fail APK // variant.outputs.all {output -> // Buat contoh tarikh dan masa semasa, dalam format yang ditetapkan // def dateAndTime = tarikh baru (). format ("yyyy-MM-dd: HH-mm") // Tambahkan maklumat ini ke nama fail APK // def fileName = variant. nama + "_" + dateAndTime + ".apk" output.outputFileName = fileName}}}

Seterusnya, kita perlu memberitahu Gradle bila ia perlu melaksanakan tugas ini. Semasa membina, identiti Gradle semua yang diperlukan untuk memuat turun dan semua tugas yang perlu dilaksanakan, dan mengaturnya dalam Grafik Aciklik Directed (DAG). Gradle kemudian akan melaksanakan semua tugas-tugas ini, mengikut perintah yang ditakrifkan dalam DAGnya.

Untuk aplikasi saya, saya akan menggunakan kaedah "whenReady", yang memastikan tugas kami akan dipanggil sekali DAG telah dihuni, dan Gradle bersedia untuk melaksanakan tugasnya.

Tambahkan yang berikut ke fail build.gradle tahap modul anda:

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

Mari letakkan tugas khusus kami dan kod varian bina kami untuk ujian, dengan membina projek ini menggunakan perintah Gradle.

Membina projek anda dengan bungkus Gradle

Anda mengeluarkan arahan Gradle menggunakan bungkus Gradle ("gradlew"). Skrip ini adalah cara yang lebih baik untuk memulakan Gradle build, kerana ia membuat pelaksanaan build bebas dari versi Gradle anda. Pemisahan ini berguna jika anda bekerjasama dengan orang lain yang mungkin tidak mempunyai versi Gradle yang sama.

Apabila mengeluarkan arahan bungkus Gradle anda, anda akan menggunakan "gradlew" untuk sistem operasi seperti Unix, termasuk macOS, dan "gradlew.bat" untuk Windows. Saya mempunyai Mac, jadi saya akan menggunakan arahan "gradlew".

Anda boleh mengeluarkan arahan Gradle dari dalam Android Studio:

  • Dalam bar alat Android Studio, pilih "Lihat> Alat Windows> Terminal." Ini membuka panel Terminal di bahagian bawah tetingkap IDE.
  • Masukkan arahan berikut ke dalam Terminal:

./gradlew build

Android Studio harus kelihatan seperti ini:

  • Tekan kekunci "Enter" pada papan kekunci anda. Gradle kini akan membina projek anda.

Gradle menyimpan semua APK yang dihasilkan dalam direktori app / build / output / apk projek anda, jadi navigasi ke direktori ini. Folder "APK" harus mengandungi beberapa folder dan subfolder; pastikan Gradle telah menghasilkan APK untuk setiap varian binaan anda, dan maklumat tarikh dan masa yang betul telah ditambahkan pada setiap fail.

Apa tugas Gradle yang lain boleh didapati?

Sebagai tambahan kepada tugas-tugas khusus yang mungkin anda buat, Gradle menyokong senarai tugas-tugas yang telah ditetapkan sebelumnya dari out-of-the-box. Sekiranya anda ingin tahu apa tugas yang ada, maka:

  • Buka tingkap Terminal Android Studio, jika belum dibuka (dengan memilih "Lihat> Alat Windows> Terminal" dari bar alat Android Studio).
  • Taipkan yang berikut ke dalam Terminal:

./gradlew -q tugas

  • Tekan kekunci "Enter" pada papan kekunci anda.

Tugas "tugas" ini sekarang akan dijalankan, dan selepas beberapa saat Terminal akan memaparkan senarai semua tugas yang tersedia untuk projek ini, lengkap dengan penerangan ringkas setiap tugas.

Dapatkan lebih banyak daripada Gradle: Menambah plugin

Gradle ships dengan beberapa plugin yang telah dipasangkan, tetapi anda boleh melanjutkan Gradle dengan menambah plugin baru. Plugin ini membuat tugas-tugas baru yang tersedia untuk projek Android anda, misalnya plugin Java termasuk tugas yang membolehkan anda menyusun kod sumber Java, menjalankan ujian unit dan membuat fail JAR, seperti "compileJava," "compileText," "jar," "Javadoc," dan "bersih."

Untuk memohon plugin, tambah deklarasi "aplikasikan plugin" ke fail build.gradle tingkat modul anda, diikuti dengan nama plugin. Sebagai contoh, di sini kami menggunakan Java plugin:

memohon plugin: java

Jika anda ingin melihat plugin apa yang tersedia, kemudian semak carian Gradle Plugin, yang menyediakan pendaftaran lengkap Gradle plugins.

The Gradle Kotlin DSL

Secara lalai, anda akan menulis skrip bina Gradle anda menggunakan Groovy DSL, tetapi jika anda salah seorang daripada banyak pemaju yang telah mengguna pakai Kotlin untuk pembangunan Android, maka anda mungkin lebih suka menulis script skrip anda di Kotlin sebaliknya.

Tidak seperti Groovy, Kotlin adalah bahasa pengaturcaraan yang diketik secara statistik, jadi jika anda membuat suis maka fail membina anda akan serasi dengan ciri-ciri navigasi autokumen lengkap Android dan kod sumber. Selain itu, bergerak dari Groovy ke Kotlin bermakna anda akan menggunakan bahasa pengaturcaraan yang sama di seluruh projek anda, yang boleh menjadikan pembangunan lebih mudah - khususnya jika anda tidak begitu akrab dengan Groovy!

Jika anda ingin memulakan menulis logik binaan anda di Kotlin, maka anda perlu menyediakan Gradle Kotlin DSL dan ikut arahan dalam panduan penghijrahan.

Mengakhiri

Dalam artikel ini, kami menerokai alat pengurusan automasi dan peranti pengurusan pergantungan Android Studio. Kami mengkaji bagaimana Gradle mengotomatisasi proses bina keluar dari kotak, dan bagaimana anda boleh mengubah proses membina dengan mengedit fail membina Gradle projek anda, termasuk membuat tugas Gradle tersuai, dan menghasilkan pelbagai binaan binaan dari satu projek.

Adakah anda memperluas Gradle untuk mengautomasikan bahagian lain proses membina Android? Beritahu kami dalam komen di bawah!

Boan dengan aplikai podcat anda ekarang? Jika ya, beralih kepada yang baru adalah cara untuk pergi. Terima kaih kepada fail OPML, anda boleh melakukannya dalam beberapa minit ahaja....

Pengguna Netflix menggunakan begitu banyak data yang menyebabkan maalah dengan IP. Verizon ecara terbuka mengakui untuk mendeteki Netflix dan YouTube. Anda mungkin udah tahu bahawa Netflix menggunaka...

Kami Menasihati Anda Untuk Membaca