1. 程式人生 > >Android基礎——項目的文件結構(三)

Android基礎——項目的文件結構(三)

好的 oid ext main 成對 之間 app cnblogs 高級

Android基礎——項目的文件結構(三)

代碼源文件夾與資源文件夾

【註】此項目文件結構僅限於Android Studio下的Android項目!!!

  在一個Android項目中,代碼源文件夾有4個,分別是java、jni、aidl、rs,資源文件夾有3個,分別是assets、res、resources。(這裏的文件夾名稱是在project視圖下的名稱,如有疑問可參考Android基礎——項目的文件結構(一)Android視圖與Project視圖對比

  文件夾路徑及概要說明如下表所示:

Project視圖

概要說明

app/src/main/java

Java源文件夾,存放項目中所有的Java代碼源文件。

app/src/main/jni

C/C++源文件夾,存放項目中所有的C和C++代碼源文件。

app/src/main/aidl

AIDL源文件夾,存放項目中的Android接口定義語言代碼源文件。

app/src/main/rs

RenderScript源文件夾,存放項目中的RenderScript代碼源文件。

app/src/main/assets

存放程序員想使用的任何資源文件,其中的文件不能通過R調用。

app/src/main/res

存放項目中所有的資源文件,包括圖片、布局、字符串等。

app/src/main/resources

留坑,此文件夾貌似用來存放Java資源文件。

  【註】本次分析java、jni、aidl、assets、res文件夾,rs及resources文件夾本人知識有限,並不了解,還是不發表言論以免誤導大家。

  一、java文件夾

  java文件夾是用來存放項目中的java源碼的文件夾,在java文件夾中,一般會根據公司域名和項目名稱建立子文件夾,如公司域名為com.cnblogs,項目名稱為HelloWorld,那麽我們就會在java文件夾下新建文件夾com/cnblogs/helloworld(均使用小寫字母),在AS中會直接顯示com.cnblogs.helloworld為名的文件夾,在新建項目時寫入的項目包名也應為com.cnblogs.helloworld,同樣在新建文件夾時也可采用com.cnblogs.helloworld的寫法,AS會自動建立相應的文件夾層次結構。

  java語言是Android應用開發的主流語言,可以用來控制Android應用程序的業務邏輯和表現效果,學習Android應用開發需要一定的java基礎,高級的Android開發必然需要不低的java水平,所以也需要把握住java語言的學習。

  二、jni文件夾

  jni文件夾是用來存放項目中的C/C++源碼的文件夾,在Android應用開發中,如果需要用到C/C++函數,那麽其源碼就應該放在jni文件夾中。JNI(Java Native Interface)是Java平臺的一個特性(並不是Android系統特有的),其實主要是定義了一些JNI函數,讓開發者可以通過調用這些函數實現Java代碼調用C/C++的代碼,C/C++的代碼也可以調用Java的代碼,這樣就可以發揮各個語言的特點了。一般情況下我們首先是將寫好的C/C++代碼編譯成對應平臺的動態庫,windows一般是dll文件,linux一般是so文件,再使用Java代碼調用動態庫中的函數。使用了JNI以後的應用程序就失去了java的跨平臺特性,編譯出的動態庫只支持自己對應的平臺。

  三、aidl文件夾

  aidl文件夾是用來存放項目中的AIDL源碼的文件夾,AIDL——Android Interface Definition Language,即Android接口定義語言。是用來為Android跨進程提供支持的語言。Android系統中的進程之間不能共享內存,因此需要提供一些機制在不同進程之間進行數據通信。為了使其他的應用程序也可以訪問本應用程序提供的服務,Android系統采用了遠程過程調用(Remote Procedure Call,RPC)方式來實現。與很多其他的基於RPC的解決方案一樣,Android使用一種接口定義語言(Interface Definition Language,IDL)來公開服務的接口。

  四、res文件夾

  在Android項目中,最主要的資源文件都是存放在res文件夾下的,res文件夾下的文件都會參與項目的編譯,可以通過R文件調用res文件夾的所有資源文件。res文件夾下又主要包括了drawable、layout、menu、mipmap、values等文件夾,調用drawable文件夾下的test文件可以用R.drawable.test,其他文件夾以此類推。

  drawable文件夾用來存放一些drawable資源文件,如圖片、xml等。

  layout文件夾用來存放布局文件,各個控件主要通過layout布局文件來提供顯示效果。

  menu文件夾用來存放菜單及子菜單項。

  mipmap文件夾用來存放圖標文件,如應用程序圖標,也可放在drawable文件夾下。

  values文件夾主要用來存放具體值類文件,主要采用鍵值對的形式存儲數據,包括string、color、style、integer等數據。

  五、assets文件夾

  assets文件夾中存放的是原生文件,Android系統在編譯的時候不會編譯assets下的資源文件,所以我們不能通過R文件訪問它們。那我麽能不能通過該資源的絕對路徑去訪問它們呢?因為apk安裝之後會放在/data/app/**.apk目錄下,以apk形式存在,asset/res和被綁定在apk裏,並不會解壓到/data/data/包名目錄下去,所以我們無法直接獲取到assets的絕對路徑。Android系統為我們提供了一個AssetManager工具類,AssetManager提供對應用程序的原始資源文件進行訪問,允許以簡單的字節流的形式打開和讀取和應用程序綁定在一起的原始資源文件。

Android基礎——項目的文件結構(三)