淺析Android系統(tǒng)的架構(gòu)以及程序項(xiàng)目的目錄結(jié)構(gòu)
Android框架結(jié)構(gòu)
直接上圖:

由上圖,我們可以看出Android系統(tǒng)架構(gòu)由5部分組成,
分別是:Linux Kernel(linux內(nèi)核)、Android Runtime(運(yùn)行時(shí)環(huán)境)、Libraries(類(lèi)庫(kù))、Application Framework(應(yīng)用框架)、Applications(應(yīng)用)。
1.1、Linux Kernel
Android基于Linux 2.6提供核心系統(tǒng)服務(wù),例如:安全、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)堆棧、驅(qū)動(dòng)模型。Linux Kernel也作為硬件和軟件之間的抽象層,它隱藏具體硬件細(xì)節(jié)而為上層提供統(tǒng)一的服務(wù)。
如果你學(xué)過(guò)計(jì)算機(jī)網(wǎng)絡(luò)知道OSI/RM,就會(huì)知道分層的好處就是使用下層提供的服務(wù)而為上層提供統(tǒng)一的服務(wù),屏蔽本層及以下層的差異,當(dāng)本層及以下層發(fā)生了變化不會(huì)影響到上層。也就是說(shuō)各層各司其職,各層提供固定的SAP(Service Access Point),專(zhuān)業(yè)點(diǎn)可以說(shuō)是高內(nèi)聚、低耦合。
如果你只是做應(yīng)用開(kāi)發(fā),就不需要深入了解Linux Kernel層。
1.2、Android Runtime
Android包含一個(gè)核心庫(kù)的集合,提供大部分在Java編程語(yǔ)言核心類(lèi)庫(kù)中可用的功能。每一個(gè)Android應(yīng)用程序是Dalvik虛擬機(jī)中的實(shí)例,運(yùn)行在他們自己的進(jìn)程中。Dalvik虛擬機(jī)設(shè)計(jì)成,在一個(gè)設(shè)備可以高效地運(yùn)行多個(gè)虛擬機(jī)。Dalvik虛擬機(jī)可執(zhí)行文件格式是.dex,dex格式是專(zhuān)為Dalvik設(shè)計(jì)的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)。
大多數(shù)虛擬機(jī)包括JVM都是基于棧的,而Dalvik虛擬機(jī)則是基于寄存器的。dx 是一套工具,可以將 Java .class 轉(zhuǎn)換成 .dex 格式。一個(gè)dex文件通常會(huì)有多個(gè).class。由于dex有時(shí)必須進(jìn)行最佳化,會(huì)使文件大小增加1-4倍,以O(shè)DEX結(jié)尾。(注意,.class轉(zhuǎn)換成.dex文件的過(guò)程中,android是會(huì)對(duì)其進(jìn)行優(yōu)化的,以讓其更適應(yīng)小內(nèi)存環(huán)境)
Dalvik虛擬機(jī)依賴于Linux 內(nèi)核提供基本功能,如線程和底層內(nèi)存管理。
1.3、Libraries
Android包含一個(gè)C/C++庫(kù)的集合,供Android系統(tǒng)的各個(gè)組件使用。這些功能通過(guò)Android的應(yīng)用程序框架(application framework)暴露給開(kāi)發(fā)者。下面列出一些核心庫(kù):
(1)系統(tǒng)C庫(kù)——標(biāo)準(zhǔn)C系統(tǒng)庫(kù)(libc)的BSD衍生,調(diào)整為基于嵌入式Linux設(shè)備
(2)媒體庫(kù)——基于PacketVideo的OpenCORE。這些庫(kù)支持播放和錄制許多流行的音頻和視頻格式,以及靜態(tài)圖像文件,包括MPEG4、 H.264、 MP3、 AAC、 AMR、JPG、 PNG
(3)界面管理——管理訪問(wèn)顯示子系統(tǒng)和無(wú)縫組合多個(gè)應(yīng)用程序的二維和三維圖形層
(4)LibWebCore——新式的Web瀏覽器引擎,驅(qū)動(dòng)Android 瀏覽器和內(nèi)嵌的web視圖
(5)SGL——基本的2D圖形引擎
(6)3D庫(kù)——基于OpenGL ES 1.0 APIs的實(shí)現(xiàn)。庫(kù)使用硬件3D加速或包含高度優(yōu)化的3D軟件光柵
(7)FreeType ——位圖和矢量字體渲染
SQLite ——所有應(yīng)用程序都可以使用的強(qiáng)大而輕量級(jí)的關(guān)系數(shù)據(jù)庫(kù)引擎
1.4、Application Framework
通過(guò)提供開(kāi)放的開(kāi)發(fā)平臺(tái),Android使開(kāi)發(fā)者能夠編制極其豐富和新穎的應(yīng)用程序。開(kāi)發(fā)者可以自由地利用設(shè)備硬件優(yōu)勢(shì)、訪問(wèn)位置信息、運(yùn)行后臺(tái)服務(wù)、設(shè)置鬧鐘、向狀態(tài)欄添加通知等等,很多很多。
開(kāi)發(fā)者可以完全使用核心應(yīng)用程序所使用的框架APIs。應(yīng)用程序的體系結(jié)構(gòu)旨在簡(jiǎn)化組件的重用,任何應(yīng)用程序都能發(fā)布他的功能且任何其他應(yīng)用程序可以使用這些功能(需要服從框架執(zhí)行的安全限制)。這一機(jī)制允許用戶替換組件。
所有的應(yīng)用程序其實(shí)是一組服務(wù)和系統(tǒng),包括:
(1)視圖(View)——豐富的、可擴(kuò)展的視圖集合,可用于構(gòu)建一個(gè)應(yīng)用程序。包括包括列表、網(wǎng)格、文本框、按鈕,甚至是內(nèi)嵌的網(wǎng)頁(yè)瀏覽器
(2)內(nèi)容提供者(Content Providers)——使應(yīng)用程序能訪問(wèn)其他應(yīng)用程序(如通訊錄)的數(shù)據(jù),或共享自己的數(shù)據(jù)
(3)資源管理器(Resource Manager)——提供訪問(wèn)非代碼資源,如本地化字符串、圖形和布局文件
(4)通知管理器(Notification Manager)——使所有的應(yīng)用程序能夠在狀態(tài)欄顯示自定義警告
(5)活動(dòng)管理器(Activity Manager)——管理應(yīng)用程序生命周期,提供通用的導(dǎo)航回退功能
1.5、Applications
Android裝配一個(gè)核心應(yīng)用程序集合,包括電子郵件客戶端、SMS程序、日歷、地圖、瀏覽器、聯(lián)系人和其他設(shè)置。所有應(yīng)用程序都是用Java編程語(yǔ)言寫(xiě)的。更加豐富的應(yīng)用程序有待我們?nèi)ラ_(kāi)發(fā)!
一般項(xiàng)目的目錄結(jié)構(gòu)以及簡(jiǎn)要說(shuō)明
我們這里的例子如圖所示:

src文件夾,顧名思義,就是存放java源代碼的地方。
例如我們的代碼如下
package cn.com.android.phone;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class PhoneCaller extends Activity {
private EditText editText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText) findViewById(R.id.editText);
Button button = (Button) findViewById(R.id.myButton);
button.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
String number = editText.getText().toString();
// 聲明打電話的意圖
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
// 將意圖傳遞給操作系統(tǒng)
PhoneCaller.this.startActivity(intent);
}
});
}
}
我們的類(lèi)繼承了Activity這個(gè)類(lèi)。一般我們都會(huì)實(shí)現(xiàn)其中的onCreate方法和onPause方法
1.onCreate方法
該方法主要用于初始化我們的Activity。當(dāng)用戶通過(guò)請(qǐng)求和我們交互的時(shí)候,我們就通過(guò)Activity做出相應(yīng)的處理。Activity從功能上說(shuō),比較像struts中的action.是系統(tǒng)和用戶交互的一個(gè)接口。
2.onPause方法
該方法在當(dāng)你的Activity被銷(xiāo)毀前執(zhí)行的方法,一般用來(lái)進(jìn)行數(shù)據(jù)的實(shí)例化。(Activity被銷(xiāo)毀的原因有很多種,比如人為的,或者系統(tǒng)內(nèi)存不足時(shí)等等)。
3.gen文件夾
gen文件夾,主要包含一個(gè)R.java文件,這個(gè)文件是由系統(tǒng)自動(dòng)維護(hù)的,不允許人為的修改,否則將會(huì)出現(xiàn)很多讓你郁悶的錯(cuò)誤。
R.java是一個(gè)android資源的索引文件,里面定義了大量的靜態(tài)內(nèi)部類(lèi)和靜態(tài)常量,靜態(tài)類(lèi)的名稱(chēng)都和res文件夾下的文件夾一一對(duì)應(yīng)的。如圖
既然都是索引文件,那么該文件的作用和數(shù)據(jù)庫(kù)中索引作用肯定也是差不多。它可以幫助我們快速的定位文件,此外,編譯器還會(huì)檢查R.java中定義的資源是否被使用了,如果沒(méi)有被使用,那么打成安裝包的時(shí)候,會(huì)自動(dòng)過(guò)濾掉那些沒(méi)被使用的資源,這樣可以大大的節(jié)約空間。
(在強(qiáng)調(diào)一遍,沒(méi)事不要瞎改R.java文件)
4.Android 2.2文件夾
沒(méi)什么可說(shuō)的,一個(gè)基礎(chǔ)jar包。
5.asset文件夾
該文件夾下通常會(huì)存放一些資源文件,例如mp3/視頻文件等等。
這個(gè)文件被稱(chēng)為原生文件夾,意思就是存放在這里的文件在打包成安裝包時(shí),會(huì)原樣打包,不進(jìn)行壓縮等各種處理。這和res文件夾下的文件是不一樣的,res下的資源文件會(huì)進(jìn)行壓縮處理的。主要的目的,實(shí)際上還是為了節(jié)約空間。
6.res文件夾
主要有三個(gè)子文件夾,drawable_?dpi、layout、values
drawable_?dpi:很多人疑問(wèn)為什么這個(gè)文件夾下會(huì)分出來(lái)三個(gè)子文件夾,drawable_hdpi高分辨率、drawable_ldpi低分辨率、drawable_mdpi一般分辨率,實(shí)際上這和我們?cè)赼sset中提到的文件優(yōu)化壓縮有關(guān),android會(huì)對(duì)三個(gè)文件夾下的文件使用不同的壓縮優(yōu)化算法。這樣就既保證了我們對(duì)某些圖片較高分辨率的要求,也保證了這些資源不會(huì)占用太多的空間。
layout存放布局文件。包括主布局文件和一般的組件布局文件。
values下可以存放很多.xml文件,例如arrays.xml、colors.xml、dimens.xml、styles.xml,當(dāng)然這些xml文件的名稱(chēng)都是隨意取得。
7.AndroidManifest.xml
也沒(méi)什么可說(shuō)的,安卓項(xiàng)目都帶~列出程序的組件和一些需要交互的東西。
8.default.properties
記錄了項(xiàng)目運(yùn)行的環(huán)境信息,例如android的版本要求等。
項(xiàng)目的總配置文件,記錄應(yīng)用中所使用的各種組件。這個(gè)文件列出了應(yīng)用程序所提供的功能,在這個(gè)文件中,你可以指定應(yīng)用程序使用到的服務(wù)(如電話服務(wù)、互聯(lián)網(wǎng)服務(wù)、短信服務(wù)、GPS服務(wù)等等)。另外當(dāng)你新添加一個(gè)Activity的時(shí)候,也需要在這個(gè)文件中進(jìn)行相應(yīng)配置,只有配置好后,才能調(diào)用此Activity。AndroidManifest.xml將包含如下設(shè)置:application permissions、Activities、intent filters等。
- Android 架構(gòu)之?dāng)?shù)據(jù)庫(kù)框架搭建
- Android Jetpack架構(gòu)組件Lifecycle詳解
- Android Jetpack架構(gòu)組件 ViewModel詳解
- Android登錄代碼MVP架構(gòu)詳解
- Android應(yīng)用架構(gòu)思想分析
- Android 生命周期架構(gòu)組件使用方法
- Android架構(gòu)組件Room的使用詳解
- 詳解Android中的MVP架構(gòu)分解和實(shí)現(xiàn)
- Android視圖控件架構(gòu)分析之View、ViewGroup
- Android App的運(yùn)行環(huán)境及Android系統(tǒng)架構(gòu)概覽
- Android操作系統(tǒng)的架構(gòu)設(shè)計(jì)分析
- Android 架構(gòu)之?dāng)?shù)據(jù)庫(kù)框架升級(jí)
相關(guān)文章
android自定義view之實(shí)現(xiàn)日歷界面實(shí)例
本篇文章主要介紹了android自定義view之實(shí)現(xiàn)日歷界面實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
Android SQLite數(shù)據(jù)庫(kù)增刪改查操作的案例分析
本篇文章介紹了,在Android中SQLite數(shù)據(jù)庫(kù)增刪改查操作的案例分析,需要的朋友參考下2013-04-04
解決android studio android monitor打不開(kāi)的問(wèn)題
下面小編就為大家分享一篇解決android studio android monitor打不開(kāi)的問(wèn)題,具有很的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Android Flutter實(shí)現(xiàn)點(diǎn)贊效果的示例代碼
點(diǎn)贊這個(gè)動(dòng)作不得不說(shuō)在社交、短視頻等App中實(shí)在是太常見(jiàn)了。本文將利用Flutter制作出一個(gè)點(diǎn)贊動(dòng)畫(huà)效果,感興趣的小伙伴可以學(xué)習(xí)一下2022-04-04
Android kotlin RecyclerView遍歷json實(shí)現(xiàn)列表數(shù)據(jù)的案例
這篇文章主要介紹了Android kotlin RecyclerView遍歷json實(shí)現(xiàn)列表數(shù)據(jù)的案例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-08-08
Android+SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)的生詞記事本功能實(shí)例
這篇文章主要介紹了Android+SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)的生詞記事本功能,結(jié)合具體實(shí)例形式分析了Android操作SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)生詞記錄功能的操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-09-09
Android Studio修改Log信息顏色的實(shí)現(xiàn)
這篇文章主要介紹了Android Studio修改Log信息顏色的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Android?Studio中使用SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)登錄和注冊(cè)功能
SQLite是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它包含在一個(gè)相對(duì)小的C庫(kù)中,下面這篇文章主要給大家介紹了關(guān)于Android?Studio中使用SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)登錄和注冊(cè)功能的相關(guān)資料,需要的朋友可以參考下2024-06-06
Android實(shí)現(xiàn)小米相機(jī)底部滑動(dòng)指示器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)小米相機(jī)底部滑動(dòng)指示器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04

