Android基础——项目的文件结构(三)
Android基礎(chǔ)——項(xiàng)目的文件結(jié)構(gòu)(三)
代碼源文件夾與資源文件夾
【注】此項(xiàng)目文件結(jié)構(gòu)僅限于Android Studio下的Android項(xiàng)目!!!
在一個(gè)Android項(xiàng)目中,代碼源文件夾有4個(gè),分別是java、jni、aidl、rs,資源文件夾有3個(gè),分別是assets、res、resources。(這里的文件夾名稱是在project視圖下的名稱,如有疑問(wèn)可參考Android基礎(chǔ)——項(xiàng)目的文件結(jié)構(gòu)(一)Android視圖與Project視圖對(duì)比)
文件夾路徑及概要說(shuō)明如下表所示:
?
| Project視圖 | 概要說(shuō)明 |
| app/src/main/java | Java源文件夾,存放項(xiàng)目中所有的Java代碼源文件。 |
| app/src/main/jni | C/C++源文件夾,存放項(xiàng)目中所有的C和C++代碼源文件。 |
| app/src/main/aidl | AIDL源文件夾,存放項(xiàng)目中的Android接口定義語(yǔ)言代碼源文件。 |
| app/src/main/rs | RenderScript源文件夾,存放項(xiàng)目中的RenderScript代碼源文件。 |
| app/src/main/assets | 存放程序員想使用的任何資源文件,其中的文件不能通過(guò)R調(diào)用。 |
| app/src/main/res | 存放項(xiàng)目中所有的資源文件,包括圖片、布局、字符串等。 |
| app/src/main/resources | 留坑,此文件夾貌似用來(lái)存放Java資源文件。 |
【注】本次分析java、jni、aidl、assets、res文件夾,rs及resources文件夾本人知識(shí)有限,并不了解,還是不發(fā)表言論以免誤導(dǎo)大家。
一、java文件夾
java文件夾是用來(lái)存放項(xiàng)目中的java源碼的文件夾,在java文件夾中,一般會(huì)根據(jù)公司域名和項(xiàng)目名稱建立子文件夾,如公司域名為com.cnblogs,項(xiàng)目名稱為HelloWorld,那么我們就會(huì)在java文件夾下新建文件夾com/cnblogs/helloworld(均使用小寫字母),在AS中會(huì)直接顯示com.cnblogs.helloworld為名的文件夾,在新建項(xiàng)目時(shí)寫入的項(xiàng)目包名也應(yīng)為com.cnblogs.helloworld,同樣在新建文件夾時(shí)也可采用com.cnblogs.helloworld的寫法,AS會(huì)自動(dòng)建立相應(yīng)的文件夾層次結(jié)構(gòu)。
java語(yǔ)言是Android應(yīng)用開(kāi)發(fā)的主流語(yǔ)言,可以用來(lái)控制Android應(yīng)用程序的業(yè)務(wù)邏輯和表現(xiàn)效果,學(xué)習(xí)Android應(yīng)用開(kāi)發(fā)需要一定的java基礎(chǔ),高級(jí)的Android開(kāi)發(fā)必然需要不低的java水平,所以也需要把握住java語(yǔ)言的學(xué)習(xí)。
二、jni文件夾
jni文件夾是用來(lái)存放項(xiàng)目中的C/C++源碼的文件夾,在Android應(yīng)用開(kāi)發(fā)中,如果需要用到C/C++函數(shù),那么其源碼就應(yīng)該放在jni文件夾中。JNI(Java Native Interface)是Java平臺(tái)的一個(gè)特性(并不是Android系統(tǒng)特有的),其實(shí)主要是定義了一些JNI函數(shù),讓開(kāi)發(fā)者可以通過(guò)調(diào)用這些函數(shù)實(shí)現(xiàn)Java代碼調(diào)用C/C++的代碼,C/C++的代碼也可以調(diào)用Java的代碼,這樣就可以發(fā)揮各個(gè)語(yǔ)言的特點(diǎn)了。一般情況下我們首先是將寫好的C/C++代碼編譯成對(duì)應(yīng)平臺(tái)的動(dòng)態(tài)庫(kù),windows一般是dll文件,linux一般是so文件,再使用Java代碼調(diào)用動(dòng)態(tài)庫(kù)中的函數(shù)。使用了JNI以后的應(yīng)用程序就失去了java的跨平臺(tái)特性,編譯出的動(dòng)態(tài)庫(kù)只支持自己對(duì)應(yīng)的平臺(tái)。
三、aidl文件夾
aidl文件夾是用來(lái)存放項(xiàng)目中的AIDL源碼的文件夾,AIDL——Android Interface Definition Language,即Android接口定義語(yǔ)言。是用來(lái)為Android跨進(jìn)程提供支持的語(yǔ)言。Android系統(tǒng)中的進(jìn)程之間不能共享內(nèi)存,因此需要提供一些機(jī)制在不同進(jìn)程之間進(jìn)行數(shù)據(jù)通信。為了使其他的應(yīng)用程序也可以訪問(wèn)本應(yīng)用程序提供的服務(wù),Android系統(tǒng)采用了遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call,RPC)方式來(lái)實(shí)現(xiàn)。與很多其他的基于RPC的解決方案一樣,Android使用一種接口定義語(yǔ)言(Interface Definition Language,IDL)來(lái)公開(kāi)服務(wù)的接口。
四、res文件夾
在Android項(xiàng)目中,最主要的資源文件都是存放在res文件夾下的,res文件夾下的文件都會(huì)參與項(xiàng)目的編譯,可以通過(guò)R文件調(diào)用res文件夾的所有資源文件。res文件夾下又主要包括了drawable、layout、menu、mipmap、values等文件夾,調(diào)用drawable文件夾下的test文件可以用R.drawable.test,其他文件夾以此類推。
drawable文件夾用來(lái)存放一些drawable資源文件,如圖片、xml等。
layout文件夾用來(lái)存放布局文件,各個(gè)控件主要通過(guò)layout布局文件來(lái)提供顯示效果。
menu文件夾用來(lái)存放菜單及子菜單項(xiàng)。
mipmap文件夾用來(lái)存放圖標(biāo)文件,如應(yīng)用程序圖標(biāo),也可放在drawable文件夾下。
values文件夾主要用來(lái)存放具體值類文件,主要采用鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù),包括string、color、style、integer等數(shù)據(jù)。
五、assets文件夾
? assets文件夾中存放的是原生文件,Android系統(tǒng)在編譯的時(shí)候不會(huì)編譯assets下的資源文件,所以我們不能通過(guò)R文件訪問(wèn)它們。那我么能不能通過(guò)該資源的絕對(duì)路徑去訪問(wèn)它們呢?因?yàn)閍pk安裝之后會(huì)放在/data/app/**.apk目錄下,以apk形式存在,asset/res和被綁定在apk里,并不會(huì)解壓到/data/data/包名目錄下去,所以我們無(wú)法直接獲取到assets的絕對(duì)路徑。Android系統(tǒng)為我們提供了一個(gè)AssetManager工具類,AssetManager提供對(duì)應(yīng)用程序的原始資源文件進(jìn)行訪問(wèn),允許以簡(jiǎn)單的字節(jié)流的形式打開(kāi)和讀取和應(yīng)用程序綁定在一起的原始資源文件。
轉(zhuǎn)載于:https://www.cnblogs.com/hwb04160011/p/7994624.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Android基础——项目的文件结构(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于Python Profilers性能
- 下一篇: 详解微信开放平台第三方平台代小程序开发业