一个普通的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,因为我不是大神
- 两句英文
言归正传,第一句英文
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的依赖库写错地方,所以给大家一个警告 - 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工具; - 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'
}
- apply plugin: ‘com.android.application’
与之相对应的是apply plugin: ‘com.android.library’,对比就会发现,其实就是application和library的区别,就是声明这是一个app,还是一个library. 应用哪个插件,这就是哪种类型,毕竟两种类型的编译肯定是有区别的,应用的编译插件也不一样,辟谣:studio是可以在一个project中新建多个app的,但是不建议这么用,大概适用于,你的项目有两个客户端或者多个客户端,比如有用户端和商户端,这样在一个project里面其实比较好的,许多代码可以共用 - 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里面 - 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
同上