開(kāi)始前先說(shuō)下什么是Gradle
單來(lái)說(shuō)Gradle就是一個(gè)新興的項(xiàng)目構(gòu)建工具,他有著很高的靈活度,可以滿足我們很多的項(xiàng)目需求。關(guān)于Gradle的介紹可以看這篇博文:Gradle for Android 系列:為什么 Gradle 這么火
https://blog.csdn.net/wqc_CSDN/article/details/53572921
Project目錄結(jié)構(gòu)

| 目錄文件 | 作用 |
|---|---|
| .gradle | gradle項(xiàng)目產(chǎn)生文件夾(自動(dòng)編譯工具產(chǎn)生的文件) |
| .idea | IDEA項(xiàng)目文件夾(開(kāi)發(fā)工具產(chǎn)生的文件) |
| app | module模塊 |
| build | 構(gòu)建時(shí)生成文件的地方 |
| captures | 捕獲系統(tǒng)信息的日志目錄 |
| gradle | gradle環(huán)境支持文件夾 |
| .gitignore | git源碼管理文件 |
| build.gradle | gradle項(xiàng)目自動(dòng)編譯的配置文件 |
| gradle.properties | gradle運(yùn)行環(huán)境配置文件 |
| gradlew | 自動(dòng)完成 gradle 環(huán)境的linux mac 腳本,配合gradle 文件夾使用 |
| gradlew.bat | 自動(dòng)完成 gradle 環(huán)境的windows 腳本,配合gradle 文件夾使用 |
| local.properties | Android SDK NDK 環(huán)境路徑配置 |
| setting.gradle | gradle 項(xiàng)目的子項(xiàng)目包含文件 |
| Test.iml | IDEA 項(xiàng)目文件 |
.gradle目錄
gradle 運(yùn)行時(shí)自動(dòng)生成的目錄,一般情況不做修改,不需要納入項(xiàng)目源代碼管理中。
.idea目錄
Intellij IDEA 運(yùn)行時(shí)候生成的文件目錄,一般情況不做修改,不需要納入項(xiàng)目源代碼管理中。
Intellij IDEA是JetBrains公司推出的Java集成開(kāi)發(fā)環(huán)境,Android Studio是基于IDEA Commutity Edition開(kāi)發(fā)的,Community 版本不僅是免費(fèi)的而且是開(kāi)源的。
module(app)
每一個(gè)module可看成在Eclipse中的一個(gè)Project,里面的文件結(jié)構(gòu)與父類差不多。里面也能包含build.gradle、gradle.properties、setting.gradle 等相關(guān)gradle文件,若沒(méi)有定義,則在項(xiàng)目中使用父類的設(shè)置。更多的內(nèi)容,后面再詳細(xì)介紹了。
build目錄
編譯時(shí)產(chǎn)生文件,不需要修改,也不需要納入項(xiàng)目源代碼管理中。
captures目錄
如右圖中,使用改功能會(huì)抓取相應(yīng)的信息并保存在captures目錄中,不需要納入項(xiàng)目源代碼管理中。
gradle目錄
可以看到里面wrapper目錄下有兩個(gè)文件,里面有一些項(xiàng)目對(duì)gradle的配置信息,我們來(lái)看下gradle-wrapper.properties里的內(nèi)容
#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的目錄與下載路徑以及當(dāng)前項(xiàng)目使用的gradle版本。默認(rèn)的路徑我們一般不會(huì)更改
.gitignore文件
git對(duì)項(xiàng)目文件管理,可以在里面添加你不希望納入git管理的文件。來(lái)看一下里面的內(nèi)容。
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
Android Studio已經(jīng)自動(dòng)幫我們添加了一些不需要的文件,我們可以按照同樣的格式來(lái)加入自己的文件。
build.gradle文件
項(xiàng)目的編譯環(huán)境配置,可以說(shuō)是Gradle最主要的配置文件。先來(lái)看下里面的內(nèi)容。
// 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
}
這里是對(duì)Project的配置,是最頂層的配置,在module中同樣有一個(gè)build.gradle文件,是對(duì)module的配置,如果module里沒(méi)有進(jìn)行配置,將使用這里的配置信息。一個(gè)是聲明倉(cāng)庫(kù)的源,這里可以看到是指明的jcenter(), jcenter可以理解成是一個(gè)新的中央遠(yuǎn)程倉(cāng)庫(kù),兼容maven中心倉(cāng)庫(kù),而且性能更優(yōu)。另一個(gè)是聲明了android gradle plugin的版本。再說(shuō)一下這里,各位是否還有映像。
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-alpha2'
}
gradle.properties文件
配置gradle運(yùn)行環(huán)境的文件,比如配置gradle運(yùn)行模式,運(yùn)行時(shí)jvm虛擬機(jī)的大小。在創(chuàng)建的項(xiàng)目中,暫時(shí)是沒(méi)有內(nèi)容的。各位參考下面的鏈接:
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項(xiàng)目可能沒(méi)有這個(gè)文件,這個(gè)路徑根據(jù)不同想電腦不同,一般也不會(huì)納入源代碼管理之中。
## 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文件
聲明當(dāng)前項(xiàng)目中含有什么module。如果有多個(gè)module會(huì)以‘,’分開(kāi),如:include ‘:app’, ‘:app2’
include ':app'
Module目錄結(jié)構(gòu)
再看下Module里面的結(jié)構(gòu)
| 目錄文件 | 作用 |
|---|---|
| build | module編譯時(shí)所生成文件的目錄 |
| lib | 第三方依賴庫(kù)所在目錄 |
| src | module源碼所在目錄 |
| src\andrroidTest | android Studio生成的測(cè)試模塊,可刪除 |
| src\main | module代碼目錄,結(jié)構(gòu)和Eclipse中的差不多了 |
| src\test | 單元測(cè)試模塊,可刪除 |
| .gitignore | module中的git管理文件 |
| app.iml | module中的IDEA 項(xiàng)目文件 |
| build.gradle | module自動(dòng)編譯的配置文件 |
| 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目錄
第三方庫(kù)存放目錄,我們可以把需要的第三方庫(kù)jar文件放到這里,*.so也同樣放在這里??梢栽赑roject Structure中管理它的依賴關(guān)系,也可以在build.gradle中直接修改。
src目錄
module源碼目錄,我們工作的主要地方,沒(méi)什么好多說(shuō)的了。
.gitignore文件
module模塊的git管理文件,可對(duì)module單獨(dú)管理。
build.gradle文件
這個(gè)文件是Module的gradle配置文件,也可以算是整個(gè)項(xiàng)目最主要的gradle配置文件。它的內(nèi)容比較復(fù)雜,我們先來(lái)看一下
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版本的寫(xiě)法,聲明是這是一個(gè)Android程序。
apply plugin: 'com.android.application'
Android項(xiàng)目中的配置:
// 編譯android的sdk版本
compileSdkVersion 23
// build tools的版本
buildToolsVersion "23.0.2"
defaultConfig {
// 應(yīng)用的包名
applicationId "eric.test"
// 允許的最少版本
minSdkVersion 17
// 目標(biāo)版本
targetSdkVersion 23
// apk的版本
versionCode 1
// apk的顯示版本
versionName "1.0"
}
buildTypes {
// 表明是在release版本中使用的配置
release {
// 是否運(yùn)行混淆
minifyEnabled false
// 混淆的配置文件路徑,默認(rèn)給了我們兩個(gè)配置文件。
// proguard-android.txt在<sdk目錄>/tools/proguard下面,里面已經(jīng)包含了基本的混淆聲明,有興趣的可以去看下。
// proguard-rules.pro是在module根目錄下面,我們可以根據(jù)項(xiàng)目去添加。
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
依賴的配置:
// 表明是依賴庫(kù)配置
dependencies {
// 表明依賴libs目錄下的所有jar包
compile fileTree(dir: 'libs', include: ['*.jar'])
// 表明在編譯項(xiàng)目的測(cè)試代碼時(shí)依賴
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