build.gradle文件详解

一个普通的android项目工程里面有两个build.gradle文件,一个位于根目录,一个位于app文件夹内.

一. 位于根目录的build.gradle

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

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

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

当前的studio版本是2.3,这是自动生成的代码,其实它是基于Groovy的领域特定语言(DSL),相比之前的构建工具Ant和Maven,更加的简便,但是许多大神都认为没有之前的更加有扩展性有灵活性,而且studio比较吃内存,编译速度较慢.当然,我这个目前还是喜欢使用studio,因为我不是大神

  1. 两句英文
    言归正传,第一句英文
    Top-level build file where you can add configuration options common to all sub-projects/modules, 这等鸟语,我这个四级都没过的人,只好求助有道词典.
    翻译:顶级构建文件,您可以添加配置选项常见的所有子项目/模块—->>就是顶级配置文件的意思吧,大致是这个意思
    还有一句英文:
    NOTE: Do not place your application dependencies here; they belong in the individual module build.gradle files
    翻译:注意:不要把你的应用程序依赖这里;他们属于个别模块build.gradle文件—->>总有一些刁民,把app的依赖库写错地方,所以给大家一个警告
  2. buildscript和allprojects对比
    buildscript里面的内容是针对gradle的依赖仓库(repositories)和依赖组件(dependencies )。allprojects里面的就是针对咱们android项目工程的依赖仓库(repositories).
    repositories闭包里面的jcenter(),其是就是代码托管仓库,很多开源项目都会选择将代码托管到jcenter,声明之后,就可以引用里面的项目了。
    dependencies里面的classpath声明的一个Gradle的插件,因为gradle不是专门构建android工程的工具,gradle还可以构建java,c++等项目,com.android.tools.build:gradle:2.3.0就是声明是构建android项目的gradle工具;
  3. task clean(type: Delete)\
    有没有很熟悉,其实就是build->clean project\
    话说build .gradle,其实就是gradle build的时候读取的文件呗,读取的时候添加的任务 clean ,这句话之前好像没有,之前有一个同事遇到过一个尴尬的情况,就是在studio1.X的时候新建的项目,后来studio升级到2.0,make modle时总会报错,说什么东西没删,现在看看估计是这个问题,1.x的时代里面没有这句话,后期需要了.所以说很坑啊\

2. 位于app文件夹内的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.cyy.new2"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary= true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.android.support:design:25.2.0'
    compile 'com.android.support:support-vector-drawable:25.2.0'
    testCompile 'junit:junit:4.12'
}
  1. apply plugin: ‘com.android.application’
    与之相对应的是apply plugin: ‘com.android.library’,对比就会发现,其实就是application和library的区别,就是声明这是一个app,还是一个library. 应用哪个插件,这就是哪种类型,毕竟两种类型的编译肯定是有区别的,应用的编译插件也不一样,辟谣:studio是可以在一个project中新建多个app的,但是不建议这么用,大概适用于,你的项目有两个客户端或者多个客户端,比如有用户端和商户端,这样在一个project里面其实比较好的,许多代码可以共用
  2. android{}闭包
    里面都是一些android工程的配置文件
    1). compileSdkVersion 25 buildToolsVersion “25.0.2”
    compileSdkVersion 用于指定项目的编译版本api水平
    buildToolsVersion 用于指定项目构建工具的版本
    其实还有defaultConfig{}中的minSdkVersion,targetSdkVersion
    minSdkVersion 项目最低兼容的Android系统版本
    targetSdkVersion 目标版本,其实也就是说你编写这个工程兼容的最好版本,但是在更高版本的设备上也可以运行.注意,如果不到23,也就是Android 6.0 ,运行时权限自动开启(不是万事大吉了,用户可以在设置里面关闭,你写代码处理蹦蹦蹦),但是大于等于23,默认关闭,需要在代码里处理.
    2). defaultConfig{}
    applicationId 应用id,类似包名,需要和包名一致,甚至哥曾经写错过,把我另外一个相同applicationId的app覆盖掉了
    versionCode 版本号,整数,内部使用
    versionName 版本名,外部显示字符串
    testInstrumentationRunner 不知道什么鬼,应该是和ui测试和单元测试用的东西,没用过,没了解过,不是很清楚,以后学了,再补充
    vectorDrawables.useSupportLibrary= true 这个我知道,对vector矢量图标的支持,设置开启,好像引用23的一个版本默认是不开启的.
    3). buildTypes{}
    编译类型,debug和release,目前只有release{},你需要的话,可以写debug,之前在这个里面写过是否打印log
    release{}
    minifyEnabled false 是否混淆
    proguardFiles 混淆的规则文件
    4).sourceSets{}

    sourceSets {
    main {
    jniLibs.srcDirs = ['libs']
    }
    }

    曾经,我不懂事,用了百度地图的sdk,把so包放到libs里面了,然后,没有加这句话,那天我加班到深夜,ccccc
    这段代码的意思就是 jniLibs文件夹,也就是so文件存储的地方,设置等于到libs里面
  3. dependencies{}
    1). compile
    compile fileTree (dir: ‘libs’, include: *.jar)
    把libs文件夹里面的后缀.jar都依赖编译了
    很多人不懂这个道理,可能把这句话删了,然后告诉我,jar包放到libs了,为什么无法引用里面的类???
    当然如果你任性删了,也可以的,你可以单独的引用
    compile files(‘libs/xxx.jar’)
    当然这是比较任性的人
    compile ‘com.android.support:appcompat-v7:25.2.0’
    这是当年,忽悠我用as人说的,引用网络jar方便,确实方便,就是这么简单的一句代码\
    2). androidTestCompile
    测试的东西,我也不懂,没用过,用过再装逼.
    3). testCompile
    同上
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值