Android build.gradle文件详解

      • 1. 最外层目录下的build.gradle文件
        • 1.1 repostories
        • 1.2 dependencies
      • 2. app目录下的build.gradle文件
        • 2.1 apply plugin
        • 2.2 android
        • 2.3 buildTypes
        • 2.4 dependencies

以下内容都是记录的《Android第一行代码》(郭霖·第二版)中的内容。
Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML(Ant和Maven)的各种繁琐配置。
Android项目有两个build.gradle文件,一个在最外层的目录下,一个是在app目录下。这两个文件对构建Android Studio项目都起到了至关重要的作用。

1. 最外层目录下的build.gradle文件

下面是文件代码,直接从项目中复制出来的

buildscript {    repositories {        google()        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:3.4.2'        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {        google()        jcenter()        maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }        maven { url 'https://www.jitpack.io' }    }}

这些代码都是自动生成的,如果需要自己添加也是可以的。新人的话不用看语法结构,直接看最关键的部分。

1.1 repostories

首先,两处repositories的闭包中都声明了jcenter()这行配置,这个jcenter()其实就是一个代码托管仓库,很多Android开源项目都会选择项代码托管到jcenter上,声明了这行配置后,我们就可以在项目中轻松引用任何jcenter()上的开源项目了。还有上面代码中配置的google()也是一个道理。maven关键字时属于引入的单个开源项目。

1.2 dependencies

dependencies闭包中使用classpath声明了一个Gradle插件。因为Gradle不是专门为构建Android项目开发的,Java、C++等很多项目都可以使用Gradle来构建。因此如果是想构建Android项目,就需要声明‘com.android.tools.build:gradle:3.1.4’这个插件。其中,最后面的部分是插件的版本号。
通常情况下不需要修改这个文件中的内容,除非想添加一些全局的项目配置。

2. app目录下的build.gradle文件

下面代码都是我自己项目中复制出来的,有文章中没有说到的地方,可以暂时忽略。

apply plugin: 'com.android.application'android {    compileSdkVersion 29    buildToolsVersion "29.0.0"    defaultConfig {        applicationId "com.timemanagersystem"        minSdkVersion 19        targetSdkVersion 29        versionCode 1        versionName "1.0"        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'        }    }    useLibrary 'org.apache.http.legacy'}dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation 'androidx.appcompat:appcompat:1.1.0'    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'androidx.test:runner:1.2.0'    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'    implementation 'cn.bmob.android:bmob-sdk:3.7.3-rc1'    implementation "io.reactivex.rxjava2:rxjava:2.2.2"    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'    implementation 'com.squareup.okio:okio:2.1.0'}

2.1 apply plugin

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

2.2 android

在android闭包中,我们可以配置项目构建的各种属性。

  • compileSdkVersion:用于指定项目的编译版本,这里的29好像是Android 10的SDK。
  • buildToolsVersion:用于指定项目构建工具的版本。
  • defaultConfig:在这个闭包中,可以对项目进行更多的细节配置。applicationId用于指定项目的包名,在项目创建的时候,就已经指定过包名了,如果需要改的话,就在这里改。-minSdkVersion用于指定项目最低兼容的Android系统版本,这里为19,表示最低兼容Android 4.4系统。targetSdkVersion指定的值表示在该目标版本上已经做了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性。比如说Android 6.0 系统中引入了运行时权限这个功能,如果你想targetSdkVersion指定成23或者更高,那么系统就会为你得程序启用运行时权限这个功能,而如果想targetSdkVersion指定成22,那么就说明你的程序最高只在Android 5.1 上做过充分测试,Android 6.0 系统引入的新功能就不会启用了。
  • versionCode:用于指定项目的版本号。
  • versionName:用于指定项目的版本名。

2.3 buildTypes

buildTypes闭包用于指定生成安装文件相关配置,通常只会有两个子闭包,一个是debug,一个是release。debug闭包用于指定生成测试版安装文件的配置,release闭包用于指定生成正式安装文件的配置。debug闭包可以忽略不写。release闭包中的minifyEnabled用于指定是否对项目的代码进行混淆,true表示混淆,false表示不混淆。proguardFiles用于指定混淆时使用的规则文件,这里指定了两个文件,第一个proguard-android.txt是在Android SDK目录下的,里面是所有项目通用的混淆规则,第二个proguard-rules.pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。

2.4 dependencies

dependencies闭包中指定当前项目所有的依赖关系。通常一个Android Studio项目一共有三种依赖方式:本地依赖,库依赖和远程依赖。本地依赖可以对本地的jar包或者目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖则可以对jcenter库上的开源项目添加依赖关系。第一行implementation fileTree是一个本地依赖的声明,表示将libs目录下所有.jar文件都添加到项目的构建路径中。第二行的**implementation **是声明远程依赖,在“androidx.appcompat:appcompat:1.1.0” 中“androidx.appcompat”是域名,用于和其他公司的库做区别,“appcompat”是组名称,用于区别同一个公司中不同库,“1.1.0”是版本号。
声明后,在构建项目是会先检查本地是否已经有了这些库的缓存,没有的话会自动联网下载,然后添加到编译路径中。

更多相关文章

  1. android adb shell 命令大全
  2. 《淘宝客户端 for Android》项目实战 html webkit android css3
  3. Android项目中图标的更改
  4. 命令行建avd
  5. android xml布局文件属性说明
  6. android 谷歌地图准备
  7. android 获取md5值 google map key申请
  8. 【Android(安卓)应用开发】Ubuntu 下 Android(安卓)Studio 开发
  9. Android(安卓)Studio apk系统签名和版本描述的实现

随机推荐

  1. Android 6预置APK的权限授予
  2. ReactNative 命令生成bundle文件
  3. Android(安卓)Studio 2.0--如何使用新模
  4. 新浪微博SDK在Eclipse引入
  5. Android杂谈---layout_x与layout_y的正确
  6. Android 取出 图片以字节形式存放到数据
  7. ImageView.setScalType参数详解
  8. LinearLayout、RelativeLayout、FrameLay
  9. Android(安卓)studio和码云步骤
  10. Android中实现日期时间选择器(DatePicker