美文网首页
Android中.gradle详细内容

Android中.gradle详细内容

作者: 鹅鹅鹅曲项向天歌呀 | 来源:发表于2018-09-11 15:32 被阅读0次

http://www.infoq.com/cn/articles/android-in-depth-gradle/
先学习什么是gradle,在android中的作用是什么,以上链接非常有用,但是内容非常长,耐心,慢慢看完。


看完,我们一起来学习一下anroid项目中的以.gradle结尾的三个文件,在项目中的作用。

先看个目录结构图. 目录结构图

1、settings.gradle

include ':app'

啊哦,就这一行代码嫩,基本上也就这一行,多的话,就是下面这样的:

include ':app','photopicker'
//'模块名','模块名',.....用到几个加几个

setting文件的是配置项目的子项目的,用于指示 Gradle 在构建应用时应将哪些模块包括在内,app就是建项目是默认的Module,也就是目录结构图中的app包名,也可以配置多个,其他的就是用来开发使用的,比如photopicker图片选择器,也可以依赖,也可以以moudle的方式放进项目里使用。

2、build.gradle(最外层)

这些代码都是自动生成的,

// Top-level build file where you can add configuration options common to all sub-projects/modules.
//翻译:顶级构建文件,您可以在其中添加对所有子项目/模块通用的配置选项。
// 此处的"buildscript"用于配置Project的build script的classpath。
buildscript {
    repositories {
        google()   //google 仓库
        jcenter()  //JCenter 仓库
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        //翻译:注意:不要把你的应用依赖放在这里;他们属于在单独的模块构建中.gradle文件
    }
}
// 该配置会被应用到所有的子工程。
allprojects {
    repositories {
        google()
        jcenter()
    }
}
// 运行gradle clean时,执行此处定义的task。
// 该任务继承自Delete,删除根目录中的build目录。
// 相当于执行Delete.delete(rootProject.buildDir)。
// gradle使用groovy语言,调用method时可以不用加()。
task clean(type: Delete) {
    delete rootProject.buildDir
}

buildscript:闭包。gradle脚本执行所需依赖,分别是对应的maven库和插件
两处 repositories :闭包,声明jcenter()和google(),这是代码托管仓库,在这里配置好之后,我们就可以引用jcenter和google上的开源项目了。
dependencies :闭包,使用classpath声明一个gradle插件,来构建android项目
allprojects :闭包。项目本身需要的依赖,比如我现在要依赖我自己maven库的toastutils库,那么我应该将maven {url ‘https://..........‘}写在这里,而不是buildscript中,不然找不到。
task clean::开启一个任务,指定每次编译都要清空工程

3、build.gradle

apply plugin: 'com.android.application'   //声明是Android程序

android {
    compileSdkVersion 26  //用于指定项目的编译版本
    buildToolsVersion '26.0.3'  //构建工具版本
    defaultConfig {
        applicationId "com.example.administrator.helloworld"  //包名
        minSdkVersion 19  //最低兼容版本
        targetSdkVersion 26  //目标sdk版本
        versionCode 1    //版本号
        versionName "1.0"    //版本名
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"  //单元测试
    }
    buildTypes {
        release {
            minifyEnabled false  //是否混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  //混淆文件
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])   //本地依赖
    implementation 'com.android.support:appcompat-v7:28.0.0-rc02'  //远程依赖
    testImplementation 'junit:junit:4.12'   //测试
    androidTestImplementation 'com.android.support.test:runner:1.0.2'  //测试
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'  //测试
    //demo,依赖一个第三方
    implementation 'com.hyman:flowlayout-lib:1.1.2'  //远程依赖
}

apply plugin:声明是Android程序,这里有两种选择:com.android.application 表示这是一个应用程序模块,可直接运行,com.android.library表示这是一个库模块,是依附别的应用程序运行
android 闭包 :在这个闭包中我们可以配置项目构建的各种属性。
 compileSdkVersion :用于指定项目的编译版本,这里26,表示使用android8.0系统的SDK编译。
  buildToolsVersion :用于指定项目的构建工具版本。
  defaultConfig 闭包:对项目的更多细节进行配置
  applicationId :用于指定那项目的包名
  minSdkVersion : 用于指定最低兼容版本,这里15,表示最低兼容到android4.0系统。
  targetSdkVersion :表示你在该目标版本上做了充分的测试,系统将会为你的程序启动新的功能和特性,比如android6.0系统引入了运行时权限这个功能,如果将targetSdkVersion设置为23或者更高,那么系统就会为你的程序启动运行时权限功能,而如果你将targetSdkVersion设置为22,那么就说明你的程序最高只在android5.1的系统上做过充分的测试,android6.0系统中引入的新功能自然不会启用了。
  versionCode :用于指定项目的版本号
  versionName :用于指定项目的版本名
  testInstrumentationRunner ://单元测试使用,不用关心
 buildTypes 闭包: 指定生成安装文件的配置,通常只会有两个子闭包,一个release,一个debugdebug闭包用于指定生成测试版本的配置,release用于指定正式版本安装文件的配置,另外,debug默认是不写的。
  release :
   minifyEnabled :是否对代码进行混淆
   proguardFiles :指定混淆时使用的规则文件,这里指定了两个文件,一个proguard-android.txt在android SDK目录下,一个proguard-rules.pro在当前项目的根目录下,里面可以编写写当前项目特有的混淆规则.
dependencies 闭包:指定当前项目的所有依赖关系。一共有3种依赖方式:本地依赖,库依赖,远程依赖。本地依赖可以的对本地的jar包或者目录添加依赖关系,库依赖可以对项目的的库模块添加依赖关系,远程依赖则可以对jcenter库上的开源项目添加依赖关系。
 implementation fileTree:本地依赖声明,他表示降libs目录下的所有.jar后缀的文件都添加到项目的构建路径中。
 implementation:这是一个标准的远程依赖,com.android.support是域名,appcompat-v7是组名,28.0.0-rc02是版本号,加上这句户后,gradle在构建项目的时候回首先检查一下本地是否已经有这个库的缓存,没有则联网下载,有则添加到构架的路径中。
 testImplementation 以及下面两个:是测试用例库,暂时用不到,不用关心
 implementation project(:'XXX') :这个是库依赖的格式, XXX代表的是库的名称,这里没有用到。


推荐文章:https://blog.csdn.net/innost/article/details/48228651

相关文章

网友评论

      本文标题:Android中.gradle详细内容

      本文链接:https://www.haomeiwen.com/subject/ficlgftx.html