接下来的一段时间会对Android Gradle的相关知识进行梳理,因此借此整理成一个系列。若是你是刚入行的新秀,那么这个系列将会很是适合你,由于Android基本的配置都与Gradle有关。固然若是你已经入行,但对Gradle仍是停留在表面的认知上,这个系列也会对你有所帮助。html
这篇文章定义为入门篇,将结合本身刚开始学习Android时的疑惑与如今对Gradle的认识,进一步整理Gradle在Android中的总体结构。java
当我使用Android Studio时,一直有几个疑问围绕着我:android
后来知道Android Studio自身是不可以编译成APK的,它是集成了Gradle。经过研究Gradle,发现Gradle也只是一个构建工具,真正编译成APK的功能是由Android app plugins提供的。Gradle只是自动化构建工具,提供构建时的各类生命周期,例如:building、testing、publishing等。因此Gradle不只支持Android还支持C/C++、Scale等。git
而这个plugin其实就是在project中的build.gradle中声明的classpathgithub
buildscript { repositories { // Gradle 4.1 and higher include support for Google's Maven repo using // the google() method. And you need to include this repo to download // Android Gradle plugin 3.0.0 or higher. google() ... } dependencies { classpath 'com.android.tools.build:gradle:3.4.0' } }
全部每次对Android构建进行了优化,咱们都要来更新这个版本。api
有了上面的基础,当咱们新建一个Android项目时,你将会看到以下与Gradle相关的文件:闭包
你会看到文件名几乎都有gradle字段,下面我会一一介绍它们的做用app
首先是gradle-wrapper.properties文件,打开它你将会看到以下相似信息jvm
#Sat Jan 19 08:25:46 CST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
这个是gradle版本的配置项,申明你当前项目中使用的gradle版本。当咱们构建项目的时候,它会根据版本自动下载。而且保存到你的电脑本地中。若是你使用的是Mac,你可使用以下命令查看你的全部已经下载的gradle版本。函数
ls ~/.gradle/wrapper/dists/
因此若是你不满意当前版本,也能够经过查看version of Gradle修改到相应的版本
这个文件是项目与其子项目或者module间的配置。里面经过include函数来告诉该项目所包换的子项目或者依赖的module。例如刚新建项目时只有一个app子项目。
include ':app'
因此settings.gradle是位于project的最外层,即与app同级。
如今咱们已经知道一个project能够包含一个或者多个sub-projects,而Android通常会将sub-projects当作module,因此你会在这看到两个build.gradle。根据后面的hint提示,发现它们分别来自与project与module。
首先咱们来看project中的build.gradle,即位于根目录下的文件
buildscript { //1 ext.objectboxVersion = '2.3.0' //4 repositories { //2 google() jcenter() } dependencies { //3 classpath 'com.android.tools.build:gradle:3.3.2' classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion" } } allprojects { //5 repositories { google() jcenter() } } task clean(type: Delete) { //6 delete rootProject.buildDir }
下面是module中的build.gradle
apply plugin: 'com.android.application' apply plugin: 'io.objectbox' //1 android { //2 compileSdkVersion 28 defaultConfig { minSdkVersion 21 targetSdkVersion 27 versionCode 100005 versionName "1.0.5" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { //3 implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:support-v4:28.0.0' }
这个文件通常都是本地文件,主要用来对gradle构建的一些我的配置项。例如gradle运行是否并行,gradle的jvmargs大小、是否开启daemon等等。它会在gradle运行时注入到相应的build.gradle中。
这个文件也是本地文件,只不过它用来配置gradle以外的配置信息,例如ndk与sdk目录,或者一些敏感的信息,例如插件开发打包上传到远程仓库这时可能须要帐号、密码、api_key等,防止打包时暴露。
gradle tasks是用来执行特定的gradle任务的。咱们能够直接点击Android Studio右边的Gradle按钮,你会发如今Tasks下会列出该项目的所用可执行的gradle任务。
或者你也能够在命令行中执行以下命令,查看app下的全部tasks
./gradlew app:tasks
咱们顺便点击一个,例如assembleDebug,咱们将会在Run日志系统中看到以下执行结果
根据输出的日志,也标明它是执行了task: assembleDebug
固然咱们也能够在命令行执行指定的task,例如要达到上面相同的效果,咱们能够输入以下命令
./gradlew assembleDebug --console plain
既然说到这里,再说一个初级者容易作的无心义的操做。有时会碰到一些问题而去点击Clean Project,再点击Rebuild Project。其实Clean Project是没必要要的。咱们能够直接先点击Rebuild Project,查看日志
结果是它分别执行了task: clean,assembleDebug。因此Rebuild Project就已经包含了Clean Project,咱们无需画蛇添足执行Clean Project。
嗯,就这些。最后,但愿这篇文章,可以让你们对gradle在项目中的结构与所处的地位有一个更清晰的理解。
想更多的了解我,亦或者对个人文章感兴趣的能够关注个人公众号,及时获取最新动态~