阅读 230

Android Studio 入门(七) 对项目build.gradle构建工具的进一步解读

不同于Eclipse(一个开放源代码的、基于Java的可扩展开发平台),Android Studio是采用Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来进行项目设置,摒弃了传统基于XML(如Ant和Maven)的各种烦琐配置。

HelloWorld项目中有两个build.gradle文件,一个是在最外层目录下的,一个是在app目录下的。这两个文件对构建Android Studio项目都起到了至关重要的作用,下面我们就来对这两个文件中的内容进行详细的分析。

先来看一下最外层目录下的build.gradle文件:

  • 8.png

外层的build.gradle文件的代码应该如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript {     ext.kotlin_version = '1.3.72'     repositories {         google()         jcenter()              }     dependencies {         classpath 'com.android.tools.build:gradle:3.5.2'         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"         // NOTE: Do not place your application dependencies here; they belong         // in the individual module build.gradle files     } } allprojects {     repositories {         google()         jcenter()              } } task clean(type: Delete) {     delete rootProject.buildDir } 复制代码

这些代码都是自动生成的,虽然语法结构看上去可能有点难以理解,但是如果我们忽略语法结构,只看最关键的部分,其实还是很好懂的。

首先,两处repositories的闭包中都声明了google()和jcenter()这两行配置,那么它们是什么意思呢?其实它们分别对应了一个代码仓库,google仓库中包含的主要是Google自家的扩展依赖库,而jcenter仓库中包含的大多是一些第三方的开源库。声明了这两行配置之后,我们就可以在项目中轻松引用任何google和jcenter仓库中的依赖库了。

接下来,dependencies闭包中使用classpath声明了两个插件:一个Gradle插件和一个Kotlin插件。为什么要声明Gradle插件呢?因为Gradle并不是专门为构建Android项目而开发的,Java、C++等很多种项目也可以使用Gradle来构建,因此如果我们要想使用它来构建Android项目,则需要声明com.android.tools.build:gradle:3.5.2这个插件。其中,最后面的部分是插件的版本号,它通常和当前Android Studio的版本是对应的,比如我现在使用的是Android Studio 3.5.2版本,那么这里的插件版本号就应该是3.5.2。而另外一个Kotlin插件则表示当前项目是使用Kotlin进行开发的,如果是Java版的Android项目,则不需要声明这个插件。我在写此教程时,Kotlin插件的最新版本号是1.3.72。

这样我们就将最外层目录下的build.gradle文件分析完了,通常情况下,你并不需要修改这个文件中的内容,除非你想添加一些全局的项目构建配置。

下面我们再来看一下app目录下的build.gradle文件,代码如下所示:

apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android {     compileSdkVersion 31     buildToolsVersion "31.0.0"     defaultConfig {         applicationId "com.example.helloworld123"         minSdkVersion 21         targetSdkVersion 31         versionCode 1         versionName "1.0"         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"     }     buildTypes {         release {             minifyEnabled false             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'         }     } } dependencies {     implementation fileTree(dir: 'libs', include: ['*.jar'])     implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"     implementation 'androidx.appcompat:appcompat:1.0.2'     implementation 'androidx.core:core-ktx: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' } 复制代码

这个文件中的内容就要相对复杂一些了,下面我们一行行地进行分析。

首先第一行应用了一个插件,一般有两种值可选:com.android.application表示这是一个应用程序模块,com.android.library表示这是一个库模块。二者最大的区别在于,应用程序模块是可以直接运行的,库模块只能作为代码库依附于别的应用程序模块来运行。

接下来的两行应用了kotlin-androidkotlin-android-extensions这两个插件。如果你想要使用Kotlin来开发Android项目,那么第一个插件就是必须应用的。而第二个插件帮助我们实现了一些非常好用的Kotlin扩展功能,在后面的学习中,你将能体会到它所带来的巨大便利性。

紧接着是一个大的android闭包,在这个闭包中我们可以配置项目构建的各种属性。其中,compileSdkVersion用于指定项目的编译版本,这里指定成31表示使用Android 11系统的SDK编译。buildToolsVersion用于指定项目构建工具的版本,这里使用的是31.0.0的版本,如果有更新的版本时,Android Studio会进行提示。

然后我们看到,android闭包中又嵌套了一个defaultConfig闭包,defaultConfig闭包中可以对项目的更多细节进行配置。其中,applicationId是每一个应用的唯一标识符,绝对不能重复,默认会使用我们在创建项目时指定的包名,如果你想在后面对其进行修改,那么就是在这里修改的。minSdkVersion用于指定项目最低兼容的Android系统版本,这里指定成21表示最低兼容到Android 5.0系统。targetSdkVersion指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性。比如Android 6.0系统中引入了运行时权限这个功能,如果你将targetSdkVersion指定成23或者更高,那么系统就会为你的程序启用运行时权限功能,而如果你将targetSdkVersion指定成22,那么就说明你的程序最高只在Android 5.1系统上做过充分的测试,Android 6.0系统中引入的新功能自然就不会启用了。接下来的两个属性都比较简单,versionCode用于指定项目的版本号,versionName用于指定项目的版本名。最后,testInstrumentationRunner用于在当前项目中启用JUnit测试,你可以为当前项目编写测试用例,以保证功能的正确性和稳定性。( defaultConfig部分起步阶段也是基本不用管的,遇到问题后再看 )

分析完了defaultConfig闭包,接下来我们看一下buildTypes闭包。buildTypes闭包中用于指定生成安装文件的相关配置,通常只会有两个子闭包:一个是debug,一个是release。( 目前打包我都是选的release )debug闭包用于指定生成测试版安装文件的配置,release闭包用于指定生成正式版安装文件的配置。另外,debug闭包是可以忽略不写的( 这里直接没有生成 ),因此我们看到上面的代码中就只有一个release闭包。下面来看一下release闭包中的具体内容吧,minifyEnabled用于指定是否对项目的代码进行混淆,true示混淆,false表示不混淆。proguardFiles用于指定混淆时使用的规则文件,这里指定了两个文件:第一个proguard-android-optimize.txt是在/tools/proguard目录下的,里面是所有项目通用的混淆规则;第二个proguard-rules.pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。需要注意的是,通过Android Studio直接运行项目生成的都是测试版安装文件,关于如何生成正式版安装文件,这个我们之后再具体来说( 自己也可以提前百度 )。

这样整个android闭包中的内容就都分析完了,接下来还剩一个dependencies闭包。这个闭包的功能非常强大,它可以指定当前项目所有的依赖关系。通常Android Studio项目一共有3种依赖方式:本地依赖、库依赖和远程依赖。

  1. 本地依赖可以对本地的jar包或目录添加依赖关系

  2. 库依赖可以对项目中的库模块添加依赖关系

  3. 远程依赖则可以对jcenter仓库上的开源项目添加依赖关系

观察一下dependencies闭包中的配置,第一行的implementation fileTree就是一个本地依赖声明,它表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径中。

而implementation则是远程依赖声明,androidx.appcompat:appcompat:1.1.0就是一个标准的远程依赖库格式,其中androidx.appcompat是域名部分,用于和其他公司的库做区分;appcompat是工程名部分,用于和同一个公司中不同的库工程做区分;1.1.0是版本号,用于和同一个库不同的版本做区分。加上这句声明后,Gradle在构建项目时会首先检查一下本地是否已经有这个库的缓存,如果没有的话则会自动联网下载,然后再添加到项目的构建路径中。

至于库依赖声明这里没有用到,它的基本格式是implementation project后面加上要依赖的库的名称,比如有一个库模块的名字叫helper,那么添加这个库的依赖关系只需要加入implementation project(':helper')这句声明即可。关于这部分内容,我们将之后的学习中看到。

另外剩下的testImplementation和androidTestImplementation都是用于声明测试用例库的,这个我们暂时用不到,先忽略它就可以了。


作者:Javen_cpdd
链接:https://juejin.cn/post/7038244420600201246

 伪原创工具 SEO网站优化  https://www.237it.com/ 


文章分类
ANDROID
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐