读《Gradle for Android 》学习笔记(第二章基本自定义构建)
2.1理解Gradle文件
我们在创建一个Android项目时gradle结构如下:
2.1.1settings文件 :Include ':app'
gradle会根据这个文件创建settings对象并调用该对象的方法,这样就可以知道本项目由哪些模块了
2.1.2顶层构建文件
dependencies里是安卓应用插件的配置
2.1.3模块的构建文件
模块构建文件的属性可以覆盖顶层构建文件的属性。
apply plugin: 'com.android.application'//标明用安卓应用插件,在顶层中dependencies中配置的
android {//这些android代码块之所以可以使用是因为上面我们配置了安卓插件
compileSdkVersion 22 //安卓api版本
buildToolsVersion "22.0.1" //构建工具和编译器的版本号,构建工具包含命令行应用如下:aapt、zipalign、dx和renderscript.可以在SDK Manager里下。
defaultConfig {//配置核心属性,可覆盖功能清单里的对应条目
applicationId "com.love.flower.groovy_study" //给市场用的区分应用的id
minSdkVersion 15
targetSdkVersion 21//表示在21版本已经通过测试不必启用用向前兼容的行为(但不知行为只的是什么。。)
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:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
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'
}
2.2任务入门
2.2.1基础任务
assemble:集合项目的输出
clean:清理项目的输出
check:运行所有检查,通常是单元测试和集成测试
build:同时运行assemble和check
Android任务:
同样的任务在android插件的扩展下实现它们的行为
assemble:为每个构建版本创建一个APK
clean:删除所有的构建内容,如APK文件
check:运行Lint检查,如果Lint发现一个问题,则可终止构建
build:同时运行assemble和check
connectedCheck:在链接设备或模拟器上运行测试
deviceCheck:一个占位任务,专为其他插件在远端设备上运行调试
installDebug和installRelease:在连接的设备或模拟器上安装特定版本
所有的installtasks都会有相关的uninstall任务。
./gradlew check会生成lint-results.html 可以看到项目运行Lint检查的结果。(里面会显示错误和警告!)
那么会不会很头大!!好多命令。。然后书中很贴心的给我们只出,可以用这个:
2.3自定义构建
在自定义构建时如果自定义了一定记得要同步项目:用
在底层AS同步实际用了generateDebugSources任务来生成必须的类。
2.3.1操控manifest条目
我们在gradle里还可以配置清单文件的下面属性:
2.3.2 BuildConfig和资源
BuildConfig可以创建自定义字段和资源,可以在debug 和release中区分使用。
顶层构建文件添加添加一个含有自定义属性的ext代码块就可以给顶层gradle添加额外属性了。
比如:
ext{
compileSdkVersion=22
buildToolsVersion="22.0.1"
}
这样就可以在app的gradle里引用了
2.3.4项目属性
定义属性的三种常用方式:
- ext代码块
- gradle.properties文件
- -P命令行参数
方式一:
ext{
local='Hello from build.gradle'
}
方式二:
gradle-wrapper.properties文件中:propertiesFile=Hello2
方式三:
第三种通过命令行./gradlew printProperties -Pcmd='test' (待测试)
如果顶层和模块都定义了同一个属性,那么该模块里的会直接用模块的该属性
2.3.5默认的任务
感觉这两张看的并没有什么效果。。。。。。没事儿,以后一定要更多的慢慢积累。。