Android項目目錄結構

JDK
JDK是java語言的軟件開發工具包,它包含了java的運行環境,工具集合,基礎類庫等內容
 
Android SDK
是谷歌提供的 Android 開發包,在開發Android 項目的時候 咱們須要引入Android SDK 來使用Android 的相關API
 
Android Studio
在很早以前,Android項目都是用Eclipse來開發的,相信全部Java開發者都必定會對這個工具很是熟悉,它是Java開發神器,安裝ADT插件後就能夠用來開發Android程序了。而在2013年的時候,谷歌推出了一款官方的IDE工具Android Studio,因爲再也不是以插件的形式存在,Android Studio在開發Android程序方面要遠比Eclipse強大和方便得多。不過因爲Android Studio早期的測試版本並非很是穩定,因此本書的第1版仍然選用的Eclipse來做用開發工具。而現在,Android Studio已經推出了2.2版本,穩定性徹底再也不是問題,普及程度方面也遠超Eclipse,沒有比如今更適合的時機來換用Android Studio了,所以本書中全部的代碼都將在Android Studio上進行開發。
 
 
 
分析你的第一個Android程序 根目錄
 
1 . gradle和.idea
這兩個目錄下放置的都是Android Studio自動生成的一些文件,咱們無須關心,也不要去手動編輯。
 
2 . app
項目中的代碼、資源等內容幾乎都是放置在這個目錄下的,咱們後面的開發工做也基本都是在這個目錄下進行的,待會兒還會對這個目錄單獨展開進行講解。
 
3 . build
這個目錄你也不須要過多關心,它主要包含了一些在編譯時自動生成的文件。
 
4 . gradle 相似php的composer
這個目錄下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不須要提早將gradle下載好,而是會自動根據本地的緩存狀況決定是否須要聯網下載gradle。Android Studio默認沒有啓用gradle wrapper的方式,若是須要打開,能夠點擊Android Studio導航欄→File→Settings→Build, Execution, Deployment→Gradle,進行配置更改。
 
5 . .gitignore
這個文件是用來將指定的目錄或文件排除在版本控制以外的,關於版本控制咱們將在第5章中開始正式的學習。
 
6 . build.gradle
這是項目全局的gradle構建腳本,一般這個文件中的內容是不須要修改的。稍後咱們將會詳細分析gradle構建腳本中的具體內容。
 
兩處repositories的閉包中都聲明瞭jcenter()這行配置,那麼這個jcenter是什麼意思呢?其實它是一個代碼託管倉庫,不少Android開源項目都會選擇將代碼託管到jcenter上,聲明瞭這行配置以後,咱們就能夠在項目中輕鬆引用任何jcenter上的開源項目了。
接下來,dependencies閉包中使用classpath聲明瞭一個Gradle插件。爲何要聲明這個插件呢?由於Gradle並非專門爲構建Android項目而開發的,Java、C++等不少種項目均可以使用Gradle來構建。所以若是咱們要想使用它來構建Android項目,則須要聲明com.android. tools.build:gradle:2.2.0這個插件。其中,最後面的部分是插件的版本號,我在寫做本書時最新的插件版本是2.2.0。
 
 
 
 
7 . gradle.properties
這個文件是全局的gradle配置文件,在這裏配置的屬性將會影響到項目中全部的gradle編譯腳本。
 
8 . gradlew和gradlew.bat
這兩個文件是用來在命令行界面中執行gradle命令的,其中gradlew是在Linux或Mac系統中使用的,gradlew.bat是在Windows系統中使用的。
 
9 . HelloWorld.iml
iml文件是全部IntelliJ IDEA項目都會自動生成的一個文件(Android Studio是基於IntelliJ IDEA開發的),用於標識這是一個IntelliJ IDEA項目,咱們不須要修改這個文件中的任何內容。
 
10 . local.properties
這個文件用於指定本機中的Android SDK路徑,一般內容都是自動生成的,咱們並不須要修改。除非你本機中的Android SDK位置發生了變化,那麼就將這個文件中的路徑改爲新的位置便可。
 
11 . settings.gradle
這個文件用於指定項目中全部引入的模塊。因爲HelloWorld項目中就只有一個app模塊,所以該文件中也就只引入了app這一個模塊。一般狀況下模塊的引入都是自動完成的,須要咱們手動去修改這個文件的場景可能比較少。
 
 
app目錄
 
1 . build
這個目錄和外層的build目錄相似,主要也是包含了一些在編譯時自動生成的文件,不過它裏面的內容會更多更雜,咱們不須要過多關心。
 
2 . libs
若是你的項目中使用到了第三方jar包,就須要把這些jar包都放在libs目錄下,放在這個目錄下的jar包都會被自動添加到構建路徑裏去。
 
3 . androidTest
此處是用來編寫Android Test測試用例的,能夠對項目進行一些自動化測試。
 
4 . java
毫無疑問,java目錄是放置咱們全部Java代碼的地方,展開該目錄,你將看到咱們剛纔建立的HelloWorldActivity文件就在裏面。
 
5 . res
這個目錄下的內容就有點多了。簡單點說,就是你在項目中使用到的全部圖片、佈局、字符串等資源都要存放在這個目錄下。固然這個目錄下還有不少子目錄,
圖片放在drawable目錄下,
佈局放在layout目錄下,
字符串放在values目錄下,
因此你不用擔憂會把整個res目錄弄得亂糟糟的。
 
 
6 . AndroidManifest.xml
這是你整個Android項目的配置文件,你在程序中定義的全部四大組件都須要在這個文件裏註冊,另外還能夠在這個文件中給應用程序添加權限聲明。因爲這個文件之後會常常用到,咱們用到的時候再作詳細說明。
 
<activity android:name=".HelloWorldActivity">
   <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
  </intent-filter> 
</activity>

 

 

 
這段代碼表示對HelloWorldActivity這個活動進行註冊,沒有在AndroidManifest.xml裏註冊的活動是不能使用的。其中intent-filter裏的兩行代碼很是重要,和表示HelloWorldActivity是這個項目的主活動,在手機上點擊應用圖標,首先啓動的就是這個活動。
 
 
 
7 . test
此處是用來編寫Unit Test測試用例的,是對項目進行自動化測試的另外一種方式。
 
8 . .gitignore
這個文件用於將app模塊內的指定的目錄或文件排除在版本控制以外,做用和外層的.gitignore文件相似。
 
9 . app.iml
IntelliJ IDEA項目自動生成的文件,咱們不須要關心或修改這個文件中的內容。
 
10 . build.gradle
這是app模塊的gradle構建腳本,這個文件中會指定不少項目構建相關的配置,咱們稍後將會詳細分析gradle構建腳本中的具體內容。
第一行應用了一個插件,通常有兩種值可選:com.android.application表示這是一個應用程序模塊,com.android.library表示這是一個庫模塊。應用程序模塊和庫模塊的最大區別在於,一個是能夠直接運行的,一個只能做爲代碼庫依附於別的應用程序模塊來運行。
 
接下來是一個大的android閉包,在這個閉包中咱們能夠配置項目構建的各類屬性。其中,
compileSdkVersion
用於指定項目的編譯版本,這裏指定成24表示使用Android 7.0系統的SDK編譯。
buildToolsVersion
用於指定項目構建工具的版本,目前最新的版本就是24.0.2,
若是有更新的版本時,Android Studio會進行提示。
 
而後咱們看到,這裏在android閉包中又嵌套了一個defaultConfig閉包,defaultConfig閉包中能夠對項目的更多細節進行配置。其中,applicationId用於指定項目的包名,前面咱們在建立項目的時候其實已經指定過包名了,若是你想在後面對其進行修改,那麼就是在這裏修改的。minSdkVersion用於指定項目最低兼容的Android系統版本,這裏指定成15表示最低兼容到Android 4.0系統。targetSdkVersion指定的值表示你在該目標版本上已經作過了充分的測試,系統將會爲你的應用程序啓用一些最新的功能和特性。好比說Android 6.0系統中引入了運行時權限這個功能,若是你將targetSdkVersion指定成23或者更高,那麼系統就會爲你的程序啓用運行時權限功能,而若是你將targetSdkVersion指定成22,那麼就說明你的程序最高只在Android 5.1系統上作過充分的測試,Android 6.0系統中引入的新功能天然就不會啓用了。剩下的兩個屬性都比較簡單,versionCode用於指定項目的版本號,versionName用於指定項目的版本名,這兩個屬性在生成安裝文件的時候很是重要,咱們在後面都會學到。
 
分析完了defaultConfig閉包,接下來咱們看一下buildTypes閉包。buildTypes閉包中用於指定生成安裝文件的相關配置,一般只會有兩個子閉包,一個是debug,一個是release。debug閉包用於指定生成測試版安裝文件的配置,release閉包用於指定生成正式版安裝文件的配置。另外,debug閉包是能夠忽略不寫的,所以咱們看到上面的代碼中就只有一個release閉包。下面來看一下release閉包中的具體內容吧,minifyEnabled用於指定是否對項目的代碼進行混淆,true表示混淆,false表示不混淆。proguardFiles用於指定混淆時使用的規則文件,這裏指定了兩個文件,第一個proguard-android.txt是在Android SDK目錄下的,裏面是全部項目通用的混淆規則,第二個proguard-rules.pro是在當前項目的根目錄下的,裏面能夠編寫當前項目特有的混淆規則。須要注意的是,經過Android Studio直接運行項目生成的都是測試版安裝文件
 
這樣整個android閉包中的內容就都分析完了,接下來還剩一個dependencies閉包。這個閉包的功能很是強大,它能夠指定當前項目全部的依賴關係。一般Android Studio項目一共有3種依賴方式:本地依賴、庫依賴和遠程依賴。本地依賴能夠對本地的Jar包或目錄添加依賴關係,庫依賴能夠對項目中的庫模塊添加依賴關係,遠程依賴則能夠對jcenter庫上的開源項目添加依賴關係。觀察一下dependencies閉包中的配置,第一行的compile fileTree就是一個本地依賴聲明,它表示將libs目錄下全部.jar後綴的文件都添加到項目的構建路徑當中。而第二行的compile則是遠程依賴聲明,com.android.support:appcompat-v7:24.2.1就是一個標準的遠程依賴庫格式,其中com.android.support是域名部分,用於和其餘公司的庫作區分;appcompat-v7是組名稱,用於和同一個公司中不一樣的庫作區分;24.2.1是版本號,用於和同一個庫不一樣的版本作區分。加上這句聲明後,Gradle在構建項目時會首先檢查一下本地是否已經有這個庫的緩存,若是沒有的話則會去自動聯網下載,而後再添加到項目的構建路徑當中。至於庫依賴聲明這裏沒有用到,它的基本格式是compile project後面加上要依賴的庫名稱,好比說有一個庫模塊的名字叫helper,那麼添加這個庫的依賴關係只須要加入compile project(':helper')這句聲明便可。另外剩下的一句testCompile是用於聲明測試用例庫的,這個咱們暫時用不到,先忽略它就能夠了。
 
 
 
 
 
11 . proguard-rules.pro
這個文件用於指定項目代碼的混淆規則,當代碼開發完成後打成安裝包文件,若是不但願代碼被別人破解,一般會將代碼進行混淆,從而讓破解者難以閱讀。
相關文章
相關標籤/搜索