Android Studio的.gradle文件
gradle是Android的构建工具,一种依赖管理工具,基于Groovy语言,面向java应用为主,在开发工具中使用,构建工具就是一个把我们本来必须要使用手工进行编译打包的方式来用自动化的方式来完成。(Android 中使用Gradle Wrapper对Gradle进行一层包装,这么做的原因可能是因为gradle更新速度实在太快,为了兼容性着想)
Module中的build.gradle
//声明是Android程序
apply plugin: 'com.android.application'
android {
//编译sdk的版本
compileSdkVersion 26
//build tools的版本
buildToolsVersion "25.0.3"
defaultConfig {
//应用包名
applicationId "com.example.demo"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug{
//debug模式
}
release {
//是否进行混淆
minifyEnabled false
//混淆文件的位置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
//编译libs目录下的所有jar包
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:26.+'
testCompile 'junit:junit:4.12'
}
分析
- apply plugin: 如果创建的是一个应用,就以"com.android.application"作为值,而如果创建的是一个Library,就以"com.android.library"作为值。
- compileSdkVersion 26
编译SDK的版本
buildToolsVersion "25.0.3"
构建 tools版本
配置的是编译版本和构建工具 - release {
//是否混淆文件 false代表不混淆 true代表混淆
minifyEnabled false
//混淆文件的位置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
Android混淆是Android开发者经常使用的一种用于代码防止被反编译的一种常见方法,一般在release中生效,主要作用
1 压缩、优化、删除代码;
2 一定程度上提高反编译后被读懂的难度;
3 通过删除代码功能实现的特殊作用。
在debug模式下,不混淆,release下正式发布版里混淆,此时用到的两个文件'proguard-android.txt'和'proguard-rules.pro'
- 外部依赖
dependencies {
//编译libs目录下的所有jar包
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:26.+'
testCompile 'junit:junit:4.12'
}
外部依赖就是一个网站专门收集各种软件库,我们想使用某种软件库时就compile依赖,然后ADT工具就会自动的从该网站下载库。
project下的.gradle文件
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
// 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
}
- allprojects {
repositories {
jcenter()
}
}
这是存放library的仓库,除了这个仓库还有mavenCentral()仓库。
这两个仓库和github仓库是不一样的,github关注的是合作开发和代码分享,而这两个库专注的是代码的收集和存放。
1.buildscript里的
dependencies{
classpath'com.android.tools.build:gradle:2.2.2.'
}
告诉gradle需要下载jar包,里面包含各种android编译打包的插件类,gradle到哪里下载这个jar包?由
repositories{
jcenter()
}指定,到jcenter网站去下载
2.allprojects{
repositories{
jcenter()
}
}
调用这个方法是告诉所有子module,下载依赖就到jcenter网站去下载
- taskclean(type:Delete){
delete rootProject.buildDir
}
调用这个方法为这个项目构建创建一个任务,可以等构建脚本解析完执行这个任务生成的build目录
settings.gradle文件
include ':app'
- 当gradle运行时框架解析settings.build文件时,其实就是执行了一行代码,settings.include(“:app”),其含义是告诉gradle系统哪些module需要解析构建,只有作为该方法参数的module才会被解析构建。