目录
- Compileing development Process
- Old compile Mothed
- Modern compile Mothed
- What is Gradle
- Gradle Effect
- What is Groovy
- Groovy syntax reles
- Structure Script
- Peoject
- Attribute
- Task
- Example #1
- apply
- Example #1
- Example #2
- Dependency Management
- Example #1
- Example #2
- Multiple Porject Structure
- Testing
- Release
Compileing development Process
Old compile Mothed
1.Manually copy the jar to libs.
2.Manually copy the modules to libs.
3.2.Manually copy the aarto libs.
Modern compile Mothed
- maven
- Gradle
What is Gradle
Gradle is code dependency management tool.
Gradle base is Apache Ant and Apache Maven.
Gradle use Groovy language as the implementation.
For java domain.
Gradle Effect
I often use it:
- Dependency Management
- Code Compile
- Pack to APK
- Pack to Jar
I don't user it very often:
- Testing
- Automatic execution
- Release
Example # Android 新建工程阶段
What is Groovy
Groovy is seemed Java that OOP language.
Groovy syntax reles
TODO.
Structure Script
Two base concept:
- project
- task
Peoject
每个构建中至少包含一个项目。
在多项目构建中,一个项目依赖于其他项目。
一个项目代表一个正在构建的组件(如一个jar文件),当构建启动后,Gradle会给予build.gradle实例化一个org.gradle.api.Project类,并且能通过project变量使其隐式可用。
Attribute
- group
- name
- version
- apply
- dependencies
- repositories
- task
Task
一个项目至少包含一个或多个任务。
对应 org.gradle.api.Task类,主要包括任务动作和任务依赖。
任务动作定义了一个最小的工作单元,可以定义依赖于其他任务、动作序列和执行条件。
function:
- dependsOn
- doFirst
- doLast
- <<
Example #1
task task2{println "task2"
}task1 <<{println "task1 append"
}
apply
apply plugin:'×××' //引入二进制插件
apply from:'×××' //引入应用脚本插件
plugin effect:
- 模块化构建脚本的功能
- 公共的功能可以抽取出来成为插件,可以供多个 build.gradle 使用,增加复用性
Example #1
1.创建一个 Java Library 的 module
2.定义一个接口
class PluginTest implements Plugin<Project> {@Overridevoid apply(Project project) {//定义一个 Task project.task("MyTask") {doLast {println "MyTask doLast invoke..."}}}
}
3.在外部引入二进制插件
//在 app 下的 build.gradle 引用这个插件
apply plugin: PluginTest
Example #2
apply plugin: 'com.android.application'android {compileSdkVersion 25buildToolsVersion "25.0.1"}}
在Andriod中有3类工程:
- App插件id:com.android.application
- Library插件id:com.android.library
- Test插件id:com.android.test
一般一个项目只会设置一个App插件,而module一般是会设置为Library插件。
Dependency Management
大部分基于JVM的软件项目都需要依赖外部类库来实现、重用现有功能。
自动化的依赖管理可以明确依赖的版本,解决因传递性依赖带来的版本冲突。
- 明确依赖的版本
- 解决版本冲突
Concept:
工件坐标
工件 ≈ jar
坐标 ≈ group、name、version常用仓库
公共仓库:mavenLocal、mavenCentral(https://search.maven.org)、jcenter...
自定义仓库:本地创建的包仓库
文件仓库: 保存本地文件路径,不建议使用,容易冲突依赖的传递性
A<----B<----C<----D
Example #1
repositories{maven{url 'http://192.168.0.1' #自己私服的地址}mavenCentrral() #使用远程仓库mavenLoacl() #使用远程仓库
}dependencies{compile 'junit:junit:4.12'
}
Example #2
allprojects {repositories {jcenter()}
}
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.3.0'testCompile 'junit:junit:4.12'
}
Multiple Porject Structure
TODO
Testing
TODO
Release
TODO