美文网首页
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