Android Studio項(xiàng)目結(jié)構(gòu)--入門(mén)

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

  1. 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):

  1. 文件開(kāi)頭apply plugin是最新gradle版本的寫(xiě)法,以前的寫(xiě)法是apply plugin: 'android', 如果還是以前的寫(xiě)法,請(qǐng)改正過(guò)來(lái)。
  1. buildToolsVersion這個(gè)需要你本地安裝該版本才行,很多人導(dǎo)入新的第三方庫(kù),失敗的原因之一是build version的版本不對(duì),這個(gè)可以手動(dòng)更改成你本地已有的版本或者打開(kāi) SDK Manager 去下載對(duì)應(yīng)版本。
  2. 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
  3. minifyEnabled也是最新的語(yǔ)法,很早之前是runProguard,這個(gè)也需要更新下。
  4. 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é)果是這兩部分文件共同作用的。
  5. 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)的。
  6. 以上文件里的內(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])

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,556評(píng)論 25 708
  • 本篇教程中使用到的Android Studio版本為1.0, Eclipse ADT版本23.0.4。請(qǐng)嘗試更新到...
    yakov1380閱讀 8,133評(píng)論 1 14
  • 26日,湖南宜章境內(nèi)一輛旅游大巴著火,至少35人遇難,車(chē)上全部是耒陽(yáng)人。當(dāng)晚,湖南耒陽(yáng)市民自發(fā)在市區(qū)舉行了燭光悼...
    笨浩閱讀 336評(píng)論 0 1
  • 這種感覺(jué)真是糟糕,那是一種深深的挫敗感,而我竟猛然發(fā)覺(jué)。我想緊緊抓住的那些個(gè),難道只能是可望而不可及嗎?可是我又似...
    剪束閱讀 225評(píng)論 0 1
  • 想起昨天 我想起了你 我吻了別人 就像昨天 我吻了你…
    梁金欠閱讀 301評(píng)論 1 1