开始前先说下什么是Gradle
单来说Gradle就是一个新兴的项目构建工具,他有着很高的灵活度,可以满足我们很多的项目需求。关于Gradle的介绍可以看这篇博文:Gradle for Android 系列:为什么 Gradle 这么火
https://blog.csdn.net/wqc_CSDN/article/details/53572921
Project目录结构
目录文件 | 作用 |
---|---|
.gradle | gradle项目产生文件夹(自动编译工具产生的文件) |
.idea | IDEA项目文件夹(开发工具产生的文件) |
app | module模块 |
build | 构建时生成文件的地方 |
captures | 捕获系统信息的日志目录 |
gradle | gradle环境支持文件夹 |
.gitignore | git源码管理文件 |
build.gradle | gradle项目自动编译的配置文件 |
gradle.properties | gradle运行环境配置文件 |
gradlew | 自动完成 gradle 环境的linux mac 脚本,配合gradle 文件夹使用 |
gradlew.bat | 自动完成 gradle 环境的windows 脚本,配合gradle 文件夹使用 |
local.properties | Android SDK NDK 环境路径配置 |
setting.gradle | gradle 项目的子项目包含文件 |
Test.iml | IDEA 项目文件 |
.gradle目录
gradle 运行时自动生成的目录,一般情况不做修改,不需要纳入项目源代码管理中。
.idea目录
Intellij IDEA 运行时候生成的文件目录,一般情况不做修改,不需要纳入项目源代码管理中。
Intellij IDEA是JetBrains公司推出的Java集成开发环境,Android Studio是基于IDEA Commutity Edition开发的,Community 版本不仅是免费的而且是开源的。
module(app)
每一个module可看成在Eclipse中的一个Project,里面的文件结构与父类差不多。里面也能包含build.gradle、gradle.properties、setting.gradle 等相关gradle文件,若没有定义,则在项目中使用父类的设置。更多的内容,后面再详细介绍了。
build目录
编译时产生文件,不需要修改,也不需要纳入项目源代码管理中。
captures目录
如右图中,使用改功能会抓取相应的信息并保存在captures目录中,不需要纳入项目源代码管理中。
gradle目录
可以看到里面wrapper目录下有两个文件,里面有一些项目对gradle的配置信息,我们来看下gradle-wrapper.properties里的内容
#Wed Oct 21 11:34:03 PDT 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
可以看到里面声明了gradle的目录与下载路径以及当前项目使用的gradle版本。默认的路径我们一般不会更改
.gitignore文件
git对项目文件管理,可以在里面添加你不希望纳入git管理的文件。来看一下里面的内容。
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
Android Studio已经自动帮我们添加了一些不需要的文件,我们可以按照同样的格式来加入自己的文件。
build.gradle文件
项目的编译环境配置,可以说是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.0.0-alpha2'
// 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
}
这里是对Project的配置,是最顶层的配置,在module中同样有一个build.gradle文件,是对module的配置,如果module里没有进行配置,将使用这里的配置信息。一个是声明仓库的源,这里可以看到是指明的jcenter(), jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。另一个是声明了android gradle plugin的版本。再说一下这里,各位是否还有映像。
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-alpha2'
}
gradle.properties文件
配置gradle运行环境的文件,比如配置gradle运行模式,运行时jvm虚拟机的大小。在创建的项目中,暂时是没有内容的。各位参考下面的链接:
https://docs.gradle.org/current/userguide/build_environment.html
https://docs.gradle.org/current/userguide/multi_project_builds.html#sec:decoupled_projects
local.properties文件
配置android NDK,SDK的地方,非android项目可能没有这个文件,这个路径根据不同想电脑不同,一般也不会纳入源代码管理之中。
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Tue Dec 08 19:51:24 CST 2015
ndk.dir=D\:\\Tools\\android-ndk-r10
sdk.dir=D\:\\Tools\\Android-SDK
setting.gradle文件
声明当前项目中含有什么module。如果有多个module会以‘,’分开,如:include ‘:app’, ‘:app2’
include ':app'
Module目录结构
再看下Module里面的结构
目录文件 | 作用 |
---|---|
build | module编译时所生成文件的目录 |
lib | 第三方依赖库所在目录 |
src | module源码所在目录 |
src\andrroidTest | android Studio生成的测试模块,可删除 |
src\main | module代码目录,结构和Eclipse中的差不多了 |
src\test | 单元测试模块,可删除 |
.gitignore | module中的git管理文件 |
app.iml | module中的IDEA 项目文件 |
build.gradle | module自动编译的配置文件 |
proguard-rules.pro | module代码混淆配置文件 |
build目录
module的编译文件目录,编译中生成的中间文件就在这里。
我们编译最终生成的apk就在build/outputs/apk目录下,里面包含了app-debug.apk, app-debug-unaligned.apk,app-release-unaligned.apk三种apk, 另外app-release.apk是生成在module的根目录下。
lib目录
第三方库存放目录,我们可以把需要的第三方库jar文件放到这里,*.so也同样放在这里。可以在Project Structure中管理它的依赖关系,也可以在build.gradle中直接修改。
src目录
module源码目录,我们工作的主要地方,没什么好多说的了。
.gitignore文件
module模块的git管理文件,可对module单独管理。
build.gradle文件
这个文件是Module的gradle配置文件,也可以算是整个项目最主要的gradle配置文件。它的内容比较复杂,我们先来看一下
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "eric.test"
minSdkVersion 17
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
其中
// 这句是gradle版本的写法,声明是这是一个Android程序。
apply plugin: 'com.android.application'
Android项目中的配置:
// 编译android的sdk版本
compileSdkVersion 23
// build tools的版本
buildToolsVersion "23.0.2"
defaultConfig {
// 应用的包名
applicationId "eric.test"
// 允许的最少版本
minSdkVersion 17
// 目标版本
targetSdkVersion 23
// apk的版本
versionCode 1
// apk的显示版本
versionName "1.0"
}
buildTypes {
// 表明是在release版本中使用的配置
release {
// 是否运行混淆
minifyEnabled false
// 混淆的配置文件路径,默认给了我们两个配置文件。
// proguard-android.txt在<sdk目录>/tools/proguard下面,里面已经包含了基本的混淆声明,有兴趣的可以去看下。
// proguard-rules.pro是在module根目录下面,我们可以根据项目去添加。
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
依赖的配置:
// 表明是依赖库配置
dependencies {
// 表明依赖libs目录下的所有jar包
compile fileTree(dir: 'libs', include: ['*.jar'])
// 表明在编译项目的测试代码时依赖
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
参考文章:https://blog.csdn.net/wx198210/article/details/50248915