Android知识要点整理(16)----Gradle 之项目结构
Posted znapast
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android知识要点整理(16)----Gradle 之项目结构相关的知识,希望对你有一定的参考价值。
android app 由Gradle负责构建。Gradle构建系统定义了许多概念。
1.Project和Tasks
这个Gradle中最重要的两个概念。每次构建(build)至少由一个project构成,一个project 由一到多个task构成。项目结构中的每个build.gradle
文件代表一个project,在这编译脚本文件中可以定义一系列的task;task 本质上又是由一组被顺序执行的Action`对象构成,Action其实是一段代码块,类似于Java中的方法。
2.构建生命周期
每次构建的执行本质上执行一系列的Task
。某些Task可能依赖其他Task。哪些没有依赖的Task总会被最先执行,而且每个Task只会被执行一遍。每次构建的依赖关系是在构建的配置阶段确定的。每次构建分为3个阶段:
- Initialization: 初始化阶段 ;这是创建Project阶段,构建工具根据每个build.gradle文件创建出一个Project实例。
- Configuration:配置阶段;这个阶段,通过执行构建脚本来为每个project创建并配置Task。
- Execution:执行阶段;这是Task真正被执行的阶段,Gradle会根据依赖关系决定哪些Task需要被执行,以及执行的先后顺序。
3.构建配置文件
为了能够在Android项目中使用Gradle构建项目,我们需要在顶层目录新建build.gradle
配置文件,用来配置构建脚本相关属性。基本内容如下:
buildscript
repositories
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:1.2.3'
除此之外,顶层的配置文件中还可以用来配置android项目各个模块的通用属性。配置内容放置在allprojects代码块中。如下所示:
allprojects
repositories
jcenter()
//其他配置
同时,每个模块有自己的单独的配置文件,内容结构大致如下:
//表示该模块为应用模块,类似的有library模块
apply plugin: 'com.android.application'
//针对android 属性的一些配置
android
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig
applicationId "com.example.android.animationsdemo"
minSdkVersion 14
targetSdkVersion 23
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
//模块的依赖关系
dependencies
compile 'com.android.support:support-v4:24.0.0-alpha2'
compile 'com.android.support:support-v13:24.0.0-alpha2'
compile 'com.android.support:recyclerview-v7:24.0.0-alpha2'
compile project(path: ':backend', configuration: 'android-endpoints')
4.Gradle项目结构
针对Android的单模块gradle目录结构如下:
MyApp
├── build.gradle
├── settings.gradle
└── app
├── build.gradle
├── build
├── libs
└── src
└── main
├── java
│ └── com.package.myapp
└── res
├── drawable
├── layout
└── etc.
模块关键目录的解释如下:
目录 | 内容 |
---|---|
/src/main/java | app模块的源代码 |
/src/main/res | 相关资源 (如drawables, layouts, strings等等) |
/libs | 第三方代码库(.jar 或者 .aar) |
/build | The output of the build process |
5.认知Gradle Wrapper
Android Studio中默认会使用 Gradle Wrapper 而不是直接使用Gradle。命令也是使用gradlew
而不是gradle
。这是因为gradle针对特定的开发环境的构建脚本,新的gradle可能不能兼容旧版的构建环境。为了解决这个问题,使用Gradle Wrapper 来间接使用 gradle。相当于在外边包裹了一个中间层。对开发者来说,直接使用Gradlew 即可,不需要关心 gradle的版本变化。Gradle Wrapper 会负责下载合适的的gradle版本来构建项目。
正如上面说的,使用Android studio创建Android项目时,系统会默认使用Gradle Wrapper。但是如果项目是从Eclipse移植而来,那么我们需要手动添加对Gradle Wrapper的支持。具体步骤如下:
- 安装Gradle工具,并且把
gradle
命令添加到环境变量。 - 在项目的顶层目录中的
build.gradle
文件中添加如下代码(新版gradle可以省略这一步,因为wrapper task 默认包含在项目中):
task wrapper(type: Wrapper)
gradleVersion = '2.4'
- 然后执行如下命令:
gradle wrapper --gradle-version 2.4
这样之后,项目中会生成如下结构的文件目录:
myapp/
├── gradlew //命令脚本
├── gradlew.bat //命令脚本
└── gradle/wrapper/ //jar文件
├── gradle-wrapper.jar
└── gradle-wrapper.properties //属性文件
其中属性文件具体内容如下:
#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\\://services.gradle.org/distributions/gradle-2.10-all.zip
6.移植Eclipse项目到Android Studio
Android 提供了自动导入Eclipse项目的方法。但是我们只讲如何手工将Eclipse项目变为Android Studio可以直接使用的项目。
一种方法是保留原有的目录结构。下面是具体步骤
1. 在项目根目录中创建build.gradle
配置文件。最基本的内容如下:
buildscript
repositories
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:1.2.3'
apply plugin: 'com.android.application'
android
compileSdkVersion 22
buildToolsVersion "22.0.1"
2 为了保持原有目录结构,我们需要修改source set。在build.gradle 文件末尾的android 代码块中添加如下内容:
android
//...
sourceSets
main
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
androidTest.setRoot('tests')
3.同时,添加依赖关系,如下:
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
一种是转换为Android Studio 默认的目录结构。具体步骤如下:
1.手动建立相应的目录。下面的表格是新旧目录的映射关系:
旧目录 | 新目录 |
---|---|
src/ | app/src/main/java |
res/ | app/src/main/res |
assets/ | app/src/main/assets |
AndroidManifest.xml | app/src/main/AndroidManifest.xml |
2.在项目根目录中创建settings.gralde
文件,这个文件只能写一行内容,用于告诉构建系统在构建时将app模块包含进去:
include ':app'
3.在项目根目录中创建build.gradle
,用于配置项目级的属性。内容如下:
buildscript
repositories
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:1.2.3'
4.在app模块目录创建build.gradle
,用于配置模块级的属性。内容如下:
apply plugin: 'com.android.application'
android
compileSdkVersion 22
buildToolsVersion "22.0.1"
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
这样,Eclipse项目就成功地转为Android Studio项目。仔细观察会发现,第一种方法只用到了一个build.gradle文件,它将第二种方法中的2个build.gradle文件合为一体。第一方法更为简单,但是第二种方法更加符合趋势,以后扩展起来也更加方便。
以上就是Gradle android 项目结构的相关知识要点。
以上是关于Android知识要点整理(16)----Gradle 之项目结构的主要内容,如果未能解决你的问题,请参考以下文章
Android 知识要点整理(12)----Animation(动画)