AS是基于idea。
android studio是單工程的開(kāi)發(fā)模式
android studio中的application相當(dāng)于eclipse里面的workspace概念
android studio中的module相當(dāng)于eclipse里的project概念
Android Studio目錄結(jié)構(gòu)
新建工程項(xiàng)目后AS的Product目錄結(jié)構(gòu)如下所示:
.idea://AS生成的工程配置文件,類(lèi)似Eclipse的project.properties.
app://AS創(chuàng)建工程中的一個(gè)Module。
gradle://構(gòu)建工具系統(tǒng)的jar和wrapper等,jar告訴了AS如何與系統(tǒng)安裝的gradle構(gòu)建聯(lián)系
External Libraries://不是一個(gè)文件夾,只是依賴(lài)lib文件,如SDK等。
新建工程項(xiàng)目后AS的Module目錄結(jié)構(gòu)如下所示:
build://構(gòu)建目錄,相當(dāng)于Eclipse中默認(rèn)Java工程的bin目錄,鼠標(biāo)放在上面右鍵Show in Exploer即可打開(kāi)文件夾,
編譯生成的apk也在這個(gè)目錄的outs子目錄,不過(guò)在AS的工程里是默認(rèn)不顯示out目錄的,就算有編譯結(jié)果也
不顯示,右鍵打開(kāi)通過(guò)文件夾直接可以看。
libs://依賴(lài)包,包含jar包和jni等包。
src://源碼,相當(dāng)于eclipse的工程。
main://主文件夾
java://Java代碼,包含工程和新建是默認(rèn)產(chǎn)生的Test工程源碼。
res://資源文件,類(lèi)似Eclipse。
layout://App布局及界面元素配置,雷同Eclipse。
menu://App菜單配置,雷同Eclipse。
values://雷同Eclipse。
dimens.xml://定義css的配置文件。
strings.xml://定義字符串的配置文件。
styles.xml://定義style的配置文件。
......://arrays等其他文件。
......://assets等目錄
AndroidManifest.xml://App基本信息(Android管理文件)
ic_launcher-web.png://App圖標(biāo)
build.gradle://Module的Gradle構(gòu)建腳本
什么是Gradle
Gradle是一種依賴(lài)管理工具,基于Groovy語(yǔ)言,面向Java應(yīng)用為主,它拋棄了基于XML的各種繁瑣配置,取而代之的是一種基于Groovy的內(nèi)部領(lǐng)域特定(DSL)語(yǔ)言。
安裝Gradle
Win平臺(tái)會(huì)默認(rèn)下載到C:\Documents and Settings<username>.gradle\wrapper\dists目錄
你會(huì)看到這個(gè)目錄下有個(gè) gradle-x.xx-all 的文件夾
Gradle基本概念
egg: 9GAG
- 9GAG/app/build.gradle
這個(gè)文件是app文件下這個(gè)Module的gradle配置文件,也可以算是整個(gè)項(xiàng)目最主要的gradle配置文件,我們來(lái)看一下這個(gè)文件的內(nèi)容。
//聲明是Android程序
apply plugin: 'com.android.application'
android{
//編譯SDK版本
compileSdkVersion 21
//build tools的版本
buildToolsVersion "21.1.1"
defaultConfig{
//應(yīng)用的包名
applicationId "me.storm.ninegag"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0.0"
}
//java版本
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes{
release {
// 是否進(jìn)行混淆
minifyEnabled false
// 混淆文件的位置
proguardFiles getDefaultProguardFile('proguard- android.txt'), 'proguard-rules.txt'
}
}
// 移除lint檢查的error
lintOptions {
abortOnError false
}
}
dependencies {
// 編譯libs目錄下的所有jar包
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:21.0.2'
compile 'com.etsy.android.grid:library:1.0.5'
compile 'com.alexvasilkov:foldable-layout:1.0.1'
// 編譯extras目錄下的ShimmerAndroid模塊
compile project(':extras:ShimmerAndroid')
}
這里需要說(shuō)明幾點(diǎn):
- 文件開(kāi)頭apply plugin是最新gradle版本的寫(xiě)法,以前的寫(xiě)法是apply plugin: 'android', 如果還是以前的寫(xiě)法,請(qǐng)改正過(guò)來(lái)。
- buildToolsVersion這個(gè)需要你本地安裝該版本才行,很多人導(dǎo)入新的第三方庫(kù),失敗的原因之一是build version的版本不對(duì),這個(gè)可以手動(dòng)更改成你本地已有的版本或者打開(kāi) SDK Manager 去下載對(duì)應(yīng)版本。
- applicationId代表應(yīng)用的包名,也是最新的寫(xiě)法,這里就不在多說(shuō)了。
android 5.0開(kāi)始默認(rèn)安裝jdk1.7才能編譯,但是由于mac系統(tǒng)自帶jdk的版本是1.6,所以需要手動(dòng)下載jdk1.7并配置下,具體可以見(jiàn)我這篇博客Mac下安裝和管理Java - minifyEnabled也是最新的語(yǔ)法,很早之前是runProguard,這個(gè)也需要更新下。
- proguardFiles這部分有兩段,前一部分代表系統(tǒng)默認(rèn)的android程序的混淆文件,該文件已經(jīng)包含了基本的混淆聲明,免去了我們很多事,這個(gè)文件的目錄在 <sdk目錄>/tools/proguard/proguard-android.txt , 后一部分是我們項(xiàng)目里的自定義的混淆文件,目錄就在 app/proguard-rules.txt , 如果你用Studio 1.0創(chuàng)建的新項(xiàng)目默認(rèn)生成的文件名是 proguard-rules.pro , 這個(gè)名字沒(méi)關(guān)系,在這個(gè)文件里你可以聲明一些第三方依賴(lài)的一些混淆規(guī)則,由于是開(kāi)源項(xiàng)目,9GAG里并未進(jìn)行混淆,具體混淆的語(yǔ)法也不是本篇博客討論的范圍。最終混淆的結(jié)果是這兩部分文件共同作用的。
- compile project(':extras:ShimmerAndroid')這一行是因?yàn)?GAG中存在其他Module,不知道Module的概念可以看下這篇博客Android Studio系列教程二--基本設(shè)置與運(yùn)行, 總之你可以理解成Android Library,由于Gradle的普及以及遠(yuǎn)程倉(cāng)庫(kù)的完善,這種依賴(lài)漸漸的會(huì)變得非常不常見(jiàn),但是你需要知道有這種依賴(lài)的。
- 以上文件里的內(nèi)容只是基本配置,其實(shí)還有很多自定義部分,如自動(dòng)打包debug,release,beta等環(huán)境,簽名,多渠道打包等,后續(xù)會(huì)單獨(dú)拿出來(lái)講解。
9GAG/extras/ShimmerAndroid/build.gradle
每一個(gè)Module都有一個(gè)gradle配置文件,語(yǔ)法都是一樣,唯一不同的是開(kāi)頭聲明的是apply plugin:'com.android.library'
9GAG/gradle
這個(gè)目錄下有個(gè)wrapper文件夾,里面可以看到有兩個(gè)文件,我們主要看下gradle-wrapper.properties這個(gè)文件的內(nèi)容:
#Thu Dec 18 16:02:24 CST 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
可以看到這里面聲明了gradle的目錄與下載路徑以及當(dāng)前項(xiàng)目使用的gradle版本,這些默認(rèn)的路徑我們一般不會(huì)更改的,這個(gè)文件里指明的gradle版本不對(duì)也是很多導(dǎo)包不成功的原因之一。
9GAG/build.gradle
這個(gè)文件是整個(gè)項(xiàng)目的gradle基礎(chǔ)配置文件,我們來(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:1.0.0'
}
}
allprojects {
repositories {
jcenter()
}
}
項(xiàng)目結(jié)構(gòu)
當(dāng)我們新建一個(gè)項(xiàng)目的目錄結(jié)構(gòu)默認(rèn)是Android模式的。可以看到和Eclipse的目錄結(jié)構(gòu)有很大區(qū)別,Studio一個(gè)窗口只能有一個(gè)項(xiàng)目,如果你看著不習(xí)慣可以點(diǎn)擊左上角進(jìn)行切換,切換到Project模式下。
和Eclipse的區(qū)別有如下:
1、Studio中有Project和Module的概念,前面說(shuō)到Studio中一個(gè)窗口只能有一個(gè)項(xiàng)目,即Project,代表一個(gè)workspace,但是一個(gè)Project可以包含多個(gè)Module,比如你項(xiàng)目引用的Android Library, Java Library等,這些都可以看做是一個(gè)Module;
2、上述目錄中將java代碼和資源文件(圖片、布局文件等)全部歸結(jié)為src,在src目錄下有一個(gè)main的分組,同時(shí)劃分出java和res兩個(gè)文件夾,java文件夾則相當(dāng)于Eclipse下的src文件夾,res目錄結(jié)構(gòu)則一樣.
app/manifests AndroidManifest.xml配置文件目錄
app/java源碼目錄
app/res資源文件目錄
Gradle Scripts gradle編譯相關(guān)的腳本
參考資料:
1.Android Studio系列教程二——基本設(shè)置與運(yùn)行
2.Android Studio系列教程四——Gradle基礎(chǔ)
3.Android Studio教程從入門(mén)到精通([http://www.open-open.com/lib/view/open1433387390635.html])