Android——build.gradle 文件详解

安卓项目中有两个build.gradle文件,一个在最外层目录下,一个是在app目录下。

最外层目录下的build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

首先,buildscript是构建脚本,是配置Gradle的,allprojects配置则适用于所有项目。

其次,两处repositories的闭包中都声明了jcenter() 这行配置,jencter其实就是一个代码托管仓库,托管了很多Android开源项目,声明了这行配置以后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。

接下来,dependencies闭包中使用classpath声明了一个Gradle插件,Gradle可以构建很多项目,声明了这个插件后,才可以构建Android项目。

app目录下的build.gradle文件

apply plugin: 'com.android.application'
android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "com.dianxinos.dxbs"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false // enable proguard
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.flags'
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:24.2.1'
    testImplementation 'junit:junit:4.12'
}

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

接下来是一个大的android闭包,在这个闭包中我们可以配置项目构建的各种属性。其中,compileSdkVersion用于指定项目的编译版本,这里指定成23表示使用Android7.0系统的SDK编译。buildToolsVersion用于指定项目构建工具的版本。

然后我们看到,android闭包中又嵌套了一个defaultConfig闭包,在这里可以对项目更多细节进行配置。applicationId 指定包名,前面已经指定过,可以在这里进行修改。minSdkVersion 用于指定项目最低兼容的Android系统版本。targetSdkVersion 指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性。 versionCode 用于指定项目的版本号,versionName 用于指定项目的版本名。

buildTypes闭包中用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个是debug,一个是release。debug闭包可以忽略不写。
release闭包中,minifyEnabled 用于指定是否对项目的代码进行混淆。proguardFiles 用于指定混淆时使用的规则文件。
这里需要注意的是,通过AndroidStudio直接运行项目生成的都是测试版安装文件。

最后还有一个dependencies闭包。这个闭包可以指定当前项目所有的依赖关系。通常Android Studio项目一共有3种依赖关系:本地依赖、库依赖和远程依赖。本地依赖可以对本地的Jar包或目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖则可以对jcenter库上的开源项目添加依赖关系。
第一行中的compile filetree就是一个本地依赖声明,它表示libs目录下的所有.jar后缀的文件都添加到项目的构建路径当中。
第二行的compile则是远程依赖声明。
库依赖声明这里没有用到,它的基本格式是 compile project 后面加上要依赖的库名称,比如有一个库模块的名字叫helper,那么添加这个库的依赖关系只需要加入 compile project(‘:helper’) 这句声明即可。
另外剩下的一句 testCompile 是用于声明测试用例库的。

补充

在Android studio3.0中,compile依赖关系已被弃用,被implementation和api替代,provided被compile only替代,apk被runtime only替代。

api:跟2.x版本的 compile完全相同
implementation:只能在内部使用此模块,比如我在一个libiary中使用implementation依赖了gson库,然后我的主项目依赖了libiary,那么,我的主项目就无法访问gson库中的方法。这样的好处是编译速度会加快,推荐使用implementation的方式去依赖,如果你需要提供给外部访问,那么就使用api依赖即可
compile(api)

这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。
当我们依赖一些第三方的库时,可能会遇到com.android.support冲突的问题,就是因为开发者使用的compile依赖的com.android.support包,而他所依赖的包与我们本地所依赖的com.android.support包版本不一样,所以就会报All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes这个错误。

解决办法可以看这篇博客:com.android.support冲突的解决办法

猜你喜欢

转载自blog.csdn.net/qq_35008279/article/details/81876888