Овладяване на Gradle за Android: задачи Gradle и Kotlin

Автор: Lewis Jackson
Дата На Създаване: 11 Може 2021
Дата На Актуализиране: 1 Юли 2024
Anonim
Овладяване на Gradle за Android: задачи Gradle и Kotlin - Приложения
Овладяване на Gradle за Android: задачи Gradle и Kotlin - Приложения

Съдържание


Вместо Java, XML или Kotlin тези файлове за изграждане на Gradle използват езика, основан на Groovy-домейн (DSL). Ако не сте запознати с Groovy, ще разгледаме всеки ред всеки от тези файлове за изграждане на Gradle, така че до края на тази статия ще бъдете удобни за четене и писане на прост код на Groovy.

Gradle има за цел да улесни живота ви, като предостави набор от настройки по подразбиране, които често можете да използвате с минимална ръчна конфигурация - когато сте готови да изградите вашия проект, просто натиснете бутона „Run“ на Android Studio и Gradle ще започне процеса на изграждане за теб.

Въпреки подхода на Gradle за „съгласие за конфигурация“, ако настройките му по подразбиране не отговарят напълно на вашите нужди, можете да персонализирате, конфигурирате и разширите процеса на изграждане и дори да настроите настройките на Gradle, за да изпълнявате много специфични задачи.


Тъй като скриптите на Gradle се съдържат в техните собствени файлове, можете да променяте процеса на изграждане на приложението си по всяко време, без да се налага да докосвате изходния код на приложението си. В този урок ще модифицираме процеса на изграждане, използвайки аромати, варианти за изграждане и персонализирана задача Gradle - всички без някога докосване до нашия код на приложение.

Изследване на файловете за изграждане на Gradle

Всеки път, когато създавате проект, Android Studio ще генерира една и съща колекция от файлове за изграждане на Gradle. Дори да импортирате съществуващ проект в Android Studio, ще бъде все още създайте същите същите файлове на Gradle и ги добавете към вашия проект.

За да започнете да разбирате по-добре Gradle и синтаксиса на Groovy, нека разгледаме последователно всеки от файловете за изграждане на Gradle на Android.

1. settings.gradle

Файлът settings.gradle е мястото, където ще дефинирате всички модули на приложението си по име, използвайки ключовата дума „включва“. Например, ако сте имали проект, състоящ се от „приложение“ и „secondModule“, тогава вашият файл settings.gradle ще изглежда така:


включват: приложение,: secondmodule rootProject.name = MyProject

В зависимост от размера на вашия проект, този файл може да бъде значително по-дълъг.

По време на процеса на изграждане Gradle ще проучи съдържанието на файла на файла settings.gradle и ще идентифицира всички модули, които трябва да включи в процеса на изграждане.

2. build.gradle (ниво на проекта)

Файлът build.gradle на ниво проект се намира в основната директория на вашия проект и съдържа настройки, към които ще се приложи всичко вашите модули (наричани от Gradle също „проекти“).

Трябва да използвате този файл, за да определите всички плъгини, хранилища, зависимости и опции за конфигуриране, които се прилагат за всеки модул във вашия Android проект. Обърнете внимание, че ако дефинирате задачи на Gradle във файла на build.gradle на ниво проект, тогава все още е възможно тези задачи да бъдат отменени или разширени за отделни модули, като редактирате съответните им на ниво модул файл build.gradle.

Типичният файл build.gradle на ниво проект ще изглежда така:

buildscript {repositories {google () jcenter ()} зависимости {classpath com.android.tools.build:gradle:3.5.0-alpha06 // ЗАБЕЛЕЖКА: Не поставяйте тук зависимостите на приложението си; те принадлежат // в отделния модул build.gradle файлове}} allprojects {хранилища {google () jcenter ()}} задача чист (тип: Изтриване) {изтриване rootProject.buildDir}

Този файл build.gradle на ниво проект е разделен на следните блокове:

  • Buildscript. Това съдържа настройки, необходими за извършване на изграждането.
  • Хранилища. Gradle е отговорен за намирането на зависимостите на вашия проект и предоставянето им на разположение във вашата версия. Не всички зависимости обаче идват от едно и също хранилище, така че ще трябва да дефинирате всички хранилища, в които Gradle трябва да търси, за да извлечете зависимостите на вашия проект.
  • Зависимости. Този раздел съдържа вашите зависимости от приставки, които се изтеглят и съхраняват в локалния ви кеш. Ти трябва не дефинирайте всички модулни зависимости в този блок.
  • Allprojects. Тук ще определите хранилищата, за които трябва да са достъпни всичко от модулите на вашия проект

3. build.gradle (ниво на модул)

Това е файлът на ниво модул build.gradle, който присъства във всеки модул във вашия проект. Ако вашият Android проект се състои от няколко модула, той също ще се състои от множество файлове build.gradle на ниво модул.

Всеки файл на build.gradle на ниво модул съдържа името на пакета, името на версията и кода на версията на вашия проект, плюс минималния и целевия SDK за този конкретен модул.

Файл build.gradle на ниво модул може също да има свой уникален набор от инструкции и зависимости за изграждане. Например, ако създавате приложение с компонент на Wear OS, проектът ви за Android Studio ще се състои от отделен модул за смартфон / таблет и модул Wear - тъй като те са насочени към изцяло различни устройства, тези модули имат драстично различни зависимости!

Основният файл на build.gradle на ниво модул обикновено изглежда така:

прилага плъгин: 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 {освобождаване {minifyEnabled фалшиви proguardFiles getDefaultProguardFile (proguard-android-optimize.txt), proguard-rules.pro}}} зависимости {изпълнение fileTree (реж .: libs, включва:) внедряване androidx.appcompat: appcompat: 1.0.2 внедряване 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}

Нека разгледаме по-подробно всеки от тези раздели:

  • прилагам плъгин. Това е списък на плъгините, необходими за изграждането на този модул. Плъгинът com.android.application е необходим за настройка на специфичния за Android процес на изграждане, така че това се добавя автоматично.
  • Android. Тук трябва да поставите всички опции, специфични за платформата на модула.
  • compileSdkVersion. Това е нивото на API, с което е съставен този модул. Не можете да използвате функции от API, по-висока от тази стойност.
  • buildToolsVersion. Това показва версията на компилатора. В Gradle 3.0.0 и по-нови версии buildToolsVersion не е задължително; ако не посочите стойност на buildToolsVersion, тогава Android Studio ще бъде по подразбиране към най-новата версия на Инструменти за изграждане.
  • defaultConfig. Това съдържа опции, които ще се прилагат за всички версии за сглобяване на приложението ви, като например вашите грешки за отстраняване на грешки и издания.
  • applicationId. Това е уникален идентификатор на приложението ви.
  • minSdkVersion. Този параметър определя най-ниското ниво на API, което този модул поддържа.
  • targetSdkVersion. Това е максималното ниво на API, срещу което е тествано приложението ви. В идеалния случай трябва да тествате приложението си с помощта на най-новия API, което означава, че стойността targetSdkVersion винаги ще бъде равна на стойността compileSdkVersion.
  • VersionCode. Това е числова стойност за версията на приложението ви.
  • VersionName. Това е удобен за потребителя низ, който представлява версията на вашето приложение.
  • buildTypes. По подразбиране Android поддържа два типа компилация: отстраняване на грешки и пускане. Можете да използвате блоковете за отстраняване на грешки и „освобождаване“, за да укажете специфичните за типа настройки на приложението ви.
  • зависимости. Тук ще определите всички библиотеки, от които зависи този модул.

Деклариране на зависимостите на вашия проект: Местни библиотеки

Можете да предоставите допълнителна функционалност на вашите Android проекти, като добавите една или повече зависимости от проекта. Тези зависимости могат да бъдат локални или да се съхраняват в отдалечено хранилище.

За да декларирате зависимост от локален JAR файл, ще трябва да добавите този JAR към директорията „libs“ на вашия проект.

След това можете да модифицирате файла build.gradle на ниво модул, за да декларирате зависимост от този файл. Например, тук ние декларираме зависимост от „mylibrary“ JAR.

файлове за внедряване (libs / mylibrary.jar)

Освен това, ако папката ви „libs“ съдържа няколко JAR, тогава може да е по-лесно просто да заявите, че вашият проект зависи от всички файлове, разположени в папката „libs“, например:

file fileTree (dir: libs, include:)

Добавяне на зависимост за изграждане: Отдалечени хранилища

Ако библиотеката се намира в отдалечен хранилище, ще трябва да изпълните следните стъпки:

  • Определете хранилището, където се намира тази зависимост.
  • Обявете индивидуалната зависимост.

Свързване с отдалечено хранилище

Първата стъпка е да кажете на Gradle кое хранилище (или хранилища) трябва да провери, за да извлечете всички зависимости на вашия проект. Например:

хранилища {google () jcenter ()}}

Тук редът "jcenter ()" гарантира, че Gradle ще провери JCenter хранилището, което е безплатно, обществено хранилище, хоствано в bintray.

Освен това, ако вие или вашата организация поддържате личен хранилище, тогава трябва да добавите URL адреса на това хранилище към декларацията си за зависимост. Ако хранилището е защитено с парола, ще трябва също да предоставите информация за вход, например:

хранилища {mavenCentral () maven {// Конфигуриране на целевия URL адрес // url "http://repo.mycompany.com/myprivaterepo"} maven {идентификационни данни {потребителско име myUsername парола myPassword} url "http://repo.mycompany.com / myprivaterepo "}

Ако зависимост съществува в няколко хранилища, тогава Gradle ще избере „най-добрата“ версия на тази зависимост въз основа на фактори като възрастта на всяко хранилище и статичната версия.

Деклариране на дистанционна зависимост

Следващата стъпка е деклариране на зависимостта във вашия файл на ниво модул build.gradle. Добавяте тази информация към блока „зависимости“, като използвате някое от следните:

  • Изпълнение. Това е нормална зависимост, от която се нуждаете всеки път, когато изграждате своя проект. Зависимостта от „изпълнение“ ще присъства в цялата област всичко вашите надграждания.
  • Testimplementation. Това е зависимост, която е необходима за съставяне на тестовия източник на приложението ви и провеждане на тестове, базирани на JVM. Когато маркирате зависимост като „Testimplementation“, Gradle ще знае, че не е необходимо да изпълнява задачи за тази зависимост по време на нормално изграждане, което може да помогне за намаляване на времето за изграждане.
  • Androidtestimplementation. Това е зависимост, която се изисква при изпълнение на тестове на устройство, например рамката на Espresso е често срещана „Androidtestimplementation“.

Ние определяме отдалечена зависимост, като използваме една от горните ключови думи, последвана от атрибутите на групата, име и версия на зависимостта, например:

зависимости {изпълнение fileTree (реж .: libs, включва:) внедряване androidx.appcompat: appcompat: 1.0.2 внедряване 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}

Генериране на множество APK файлове: Как да създадете варианти за изграждане

Понякога може да се наложи да създадете няколко версии на приложението си. Например може да искате да пуснете безплатна и платена версия, която включва някои допълнителни функции.

Това е задача за изграждане, с която Gradle може да ви помогне, така че нека разгледаме как да промените процеса на изграждане, за да създадете множество APK файлове от един проект:

  • Отворете файла strings.xml и изтрийте оригиналния си низ за приложение.
  • След това определете имената на всеки аромат на продукта, който искате да създадете; в този случай използвам:

Моето безплатно приложение Моето платено приложение

  • Отворете своя AndroidManifest.xml файл и заменете android: label = ”@ string / app_name” с:

андроид: етикет = "$ {AppName}"

  • Отворете файла на build.gradle на ниво модул и добавете следното към блока „android“:

tasteDimensions "режим" productFlavors {безплатен {размерност "режим" applicationIdSuffix ".free" manifestPlaceholders =} платен {размер "режим" applicationIdSuffix ".paid" manifestPlaceholders =}}}

Нека разбием какво се случва тук:

  • flavorDimensions. Приставката за Android създава варианти за компилация, като комбинира аромати от различни измерения. Тук създаваме ароматно измерение, състоящо се от „безплатни“ и „платени“ версии на нашето приложение. Въз основа на кода по-горе, Gradle ще генерира четири варианта на сглобяване: paidDebug, paidRelease, freeDebug и freeRelease.
  • productFlavors. Това указва списък на аромати и техните настройки, които в горния код са "платени" и "безплатни".
  • Безплатен / платен. Това са имената на нашите два аромати на продукта.
  • Измерение. Трябва да определим стойност на параметъра „размерност“; в този случай използвам „режим“.
  • applicationIdSuffix. Тъй като искаме да създадем множество версии на нашето приложение, трябва да дадем на всеки APK уникален идентификатор на приложение.
  • manifestPlaceholders. Всеки проект има един файл Manifest, съдържащ важна информация за конфигурацията на вашия проект. Когато създавате няколко варианта на сглобяване, обикновено искате да промените някои от тези свойства на Manifest по време на изграждане. Можете да използвате файловете за изграждане на Gradle, за да укажете уникални записи на Manifest за всеки вариант на изграждане, които след това ще бъдат вмъкнати във вашия Manifest по време на изграждане. В горния код ние променяме стойността „appName“ в зависимост от това дали Gradle изгражда безплатната или платената версия на нашето приложение.

Създаване на персонализирана задача Gradle

Понякога може да се наложи да персонализирате процеса на изграждане, като използвате Gradle задачи.

Задачата е именувана колекция от действия, които Gradle ще изпълнява, докато изпълнява компилация, например генериране на Javadoc. Gradle поддържа множество задачи по подразбиране, но можете също да създадете персонализирани задачи, които могат да ви бъдат полезни, ако имате предвид много специфичен набор от инструкции за изграждане.

В този раздел ще създаваме персонализирана задача на Gradle, която ще повтори всички варианти за изграждане на нашия проект (paidDebug, paidRelease, freeDebug и freeRelease), ще създадем печат за дата и час и след това ще добавим тази информация към всеки генериран APK файл.

Отворете файла на build.gradle на ниво модул и добавете следното:

задача addDateAndTime () {// Итерация през всички варианти за изграждане на изход // android.applicationVariants.all {вариант -> // Итерация през всички APK файлове // variant.outputs.all {output -> // Създаване на екземпляр от текущата дата и час, във формат, зададен // def dateAndTime = нов дата (). формат ("гггг-MM-dd: HH-mm") // Прибавете тази информация към името на файла на APK // def fileName = вариант. име + "_" + dateAndTime + ".apk" output.outputFileName = fileName}}}

След това трябва да кажем на Gradle кога тя трябва да изпълни тази задача. По време на изграждането Gradle идентифицира всичко, което трябва да изтегли, и всички задачи, които трябва да изпълни, и ги подрежда в насочена ациклична графика (DAG). След това Gradle ще изпълни всички тези задачи в съответствие с реда, определен в DAG.

За приложението си ще използвам метода „WhenReady“, който гарантира, че задачата ни ще бъде извикана след попълване на DAG и Gradle е готов да започне да изпълнява задачите си.

Добавете следното към файла на build.gradle на ниво модул:

// Изпълнете тази задача // gradle.taskGraph.whenReady {addDateAndTime}

Да поставим нашата персонализирана задача и нашия вариант на вариант за изграждане към теста, като изграждаме този проект с помощта на команда Gradle.

Изграждане на вашия проект с обвивка Gradle

Издавате команди Gradle, като използвате обвивката Gradle („gradlew“). Този скрипт е предпочитаният начин да започнете изграждане на Gradle, тъй като прави изпълнението на компилацията независима от вашата версия на Gradle. Това разделяне може да бъде полезно, ако си сътрудничите с други, които не е задължително да имат инсталирана същата версия на Gradle.

Когато издавате командите за увиване на Gradle, ще използвате „gradlew“ за подобни на Unix операционни системи, включително macOS и „gradlew.bat“ за Windows. Имам Mac, така че ще използвам команди gradlew.

Можете да издавате команди Gradle от Android Studio:

  • В лентата с инструменти на Android Studio изберете „View> Tools Windows> Terminal.“ Това отваря панел Terminal в долната част на прозореца IDE.
  • Въведете следната команда в терминала:

./gradlew build

Android Studio трябва да изглежда така:

  • Натиснете клавиша „Enter“ на клавиатурата си. Сега Gradle ще изгради вашия проект.

Gradle съхранява всички генерирани APK файлове в директорията за приложения / build / output / apk на вашия проект, така че отидете до тази директория. Папката „APK“ трябва да съдържа няколко папки и подпапки; уверете се, че Gradle е генерирал APK файл за всеки от вариантите ви за сглобяване и че правилната информация за дата и час е добавена към всеки файл.

Какви други задачи на Gradle са налични?

В допълнение към всички персонализирани задачи, които можете да създадете, Gradle поддържа списък на предварително зададени задачи извън кутията. Ако ви е любопитно да видите какви точно задачи са налични, тогава:

  • Отворете прозореца на терминала на Android Studio, ако той не е вече отворен (като изберете „View> Tools Windows> Terminal“ от лентата с инструменти на Android Studio).
  • Въведете следното в терминала:

./gradlew -q задачи

  • Натиснете клавиша „Enter“ на клавиатурата си.

Тази задача със задачи вече ще стартира и след няколко минути терминалът ще покаже списък на всички задачи, налични за този проект, заедно с кратко описание на всяка задача.

Извличане на повече от Gradle: Добавяне на приставки

Gradle се доставя с редица приставки предварително инсталирани, но можете допълнително да разширите Gradle, като добавите нови плъгини. Тези плъгини правят нови задачи достъпни за вашите проекти за Android, например плъгинът за Java включва задачи, които ви позволяват да компилирате изходния код на Java, да стартирате тестовете на единици и да създадете JAR файл, като „compileJava“, „compileText“, „jar“, „Javadoc“ и „чист“.

За да приложите плъгин, добавете декларацията „приложете приставка“ към файла на build.gradle на ниво модул, последвано от името на приставката. Например, тук прилагаме приставката за Java:

прилагам плъгин: java

Ако ви интересува да видите какви плъгини са налични, проверете търсенето на плъгини Gradle, което предоставя изчерпателен регистър на плъгини Gradle.

DSL на Gradle Kotlin

По подразбиране ще напишете своите скриптове за изграждане на Gradle с помощта на Groovy DSL, но ако сте един от многото разработчици, приели Kotlin за разработка на Android, тогава можете да предпочитате да напишете своите скриптове за изграждане вместо в Kotlin.

За разлика от Groovy, Kotlin е статично типизиран език за програмиране, така че ако направите превключвателя, вашите файлове за изграждане ще бъдат съвместими с функциите за автоматично довършване и навигация на изходния код на Android Studio. Плюс това, преминаването от Groovy към Kotlin означава, че ще използвате един и същ език за програмиране във вашия проект, което може да направи развитието по-лесно - особено ако не сте прекалено запознати с Groovy!

Ако искате да започнете да пишете своята логика за изграждане в Kotlin, тогава ще трябва да настроите DSL Gradle Kotlin и да следвате инструкциите в ръководството за миграция.

Обобщавайки

В тази статия разгледахме инструмента за автоматизация и управление на зависимости от Android Studio. Разгледахме как Gradle автоматизира процеса на сглобяване навън и как можете да модифицирате процеса на изграждане, като редактирате файловете за изграждане на Gradle на вашия проект, включително създаване на задачи по поръчка на Gradle и генериране на множество варианти на сглобяване от един проект.

Разширихте ли Gradle, за да автоматизирате други части от процеса на изграждане на Android? Уведомете ни в коментарите по-долу!

Екранът за заключване на Android се развива много пъти през годините. Имаше различни методи за отключване на плъзгане и OEM производителите винаги са поставяли своя въртене на нещата. Както се оказва...

MMORPG са забавни неща. Те имат способността да ви поставят в един огромен свят, пълен с хиляди други хора и можете да ги играете почти безкрайно, без да стигнете до края. Следването им е огромно и из...

Популярни Публикации