當前位置:首頁 » 操作系統 » 安卓源碼框架

安卓源碼框架

發布時間: 2022-11-15 20:04:40

① 怎樣評價羅升陽的android系統源代碼分析

我幹了3年Android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。 先說下我的入門過程: 第零步,下載源碼,我下的4.2的,框架層源碼10G,內核2G多,ctags給框架層建的標簽文件都有600M,當時讓我有點震撼,用的vim+ctags+cscope來閱讀,還算不錯,架構挺清晰的。 第一步,我找到了一本好書《Android的設計與實現 第一卷》它講了Android框架層的啟動,初始化,服務框架初始化,Binder,消息循環,PackageManagerService,ActivityManagerService。據作者說後面會出講UI子系統的第二卷,拭目以待。其實這本書看了幾十頁我就發現需要第二步的知識,否則看不下去,於是跳去第二步。 第二步,學習Linux系統編程,在看《Android的設計與實現》的時候我發現,框架層的Native部分,全是Linux編程。為了掌握這部分知識,我花了4個月學習了《Linux系統編程手冊》(TLPI)這本1000多頁的書,我以前是搞WIndows文件系統這塊的,所以C語言還比較熟,TLPI的習題很有意思,量也比較大,堅持下來還是收獲很多。 第三步,花了4個月學習了一些Linux內核的知識,看了LKD,PLKA看了一半多。越學越沒底,覺得不懂得越來越多,不過這個也正常,只有靠慢慢磨,估計以後要不斷的磨這塊。 第四步,回頭看Android源碼,這次一口氣看完了《Android的設計與實現 第一卷》,終於對框架層有了譜。同時真的數次把我看暈,前面看Linux內核源碼都沒這么暈,不斷在java層和Native層之間跳有點磨腦漿。其中我又覺得Java的基礎沒有打太牢,回去補了一個月的《Core Java》第八版。但是這書沒有涉及UI子系統,於是又看了《Android內核剖析》 第五步,《Android內核剖析》(這本書實際上是講框架層的,作者也是個搞嵌入式的,所以他在寫框架層的時候文筆不太好,很羅嗦,不過還是有很多看點,到他後來寫做ROM,玩開發板時估計是說到了他的本行,一下子遛起來了看得出還是挺有水平的,這本書知識有點舊畢竟講的是2.3很多代碼已經過時,但是作者很多點子很有參考價值)這本書講UI子系統和按鍵/觸摸消息處理系統還是很有分量的,尤其13章View繪制那裡,結合源碼研究很有收獲。而後面他講編譯框架和ROM相關的東西都是挺寶貴的資料。 第六步,為了再補一下其他諸如電源管理模塊等子系統的知識看了,《深入理解android》系列,個人認為這個系列看起來有點不太舒服,不過作為補充印證還是比較有價值。 第七步,《Android系統源代碼情景分析》,羅升陽的源碼分析大作,比《Android的設計與實現》分析得更細致,但缺點是涉及到模塊比較少,選用的源碼也比《Android的設計與實現》更舊一點。看完書後需要去研究作者的博客,東西挺多的,一定讓你滿意。 第八步,買塊開發板自己玩。這步我還沒走到,原因是我覺得我還差點准備知識。可能要再幾個月,到時准備入塊6410或者樹莓派。 最後,由於我11年以前都是搞Windows這塊的,所以對Linux知識不是很了解,不得已看了這么些書,如果是一直做Linux的人,很多步驟估計可以省掉了。直接上源碼才是正道。 我本身做著移動GIS開發的工作,學框架層全是因為興趣,但招聘平台Android框架層開發人員還是蠻有競爭力的有不少定製ROM,智能電視的工作都處於人才難求狀態,畢竟有一定的門檻,現在各種ios培訓,讓奔著錢干開發的人紛紛湧入,而ios只能幹sdk開發的缺點就暴露出來了,一堆新手老手,菜鳥大牛全擠在SDK開發這塊,我覺得不太妙。 反觀Android這邊,雖然入門菜鳥沒有搞ios來錢,但是可持續性很好,從sdk-》框架》驅動》內核這樣幹下去。干著干著發現自己漸漸變成了Linux開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。 轉載

② Android源碼解析RPC系列(一)---Binder原理

看了幾天的Binder,決定有必要寫一篇博客,記錄一下學習成果,Binder是Android中比較綜合的一塊知識了,目前的理解只限於JAVA層。首先Binder是幹嘛用的?不用說,跨進程通信全靠它,操作系統的不同進程之間,數據不共享,對於每個進程來說,它都天真地以為自己獨享了整個系統,完全不知道其他進程的存在,進程之間需要通信需要某種系統機制才能完成,在Android整個系統架構中,採用了大量的C/S架構的思想,所以Binder的作用就顯得非常重要了,但是這種機制為什麼是Binder呢?在Linux中的RPC方式有管道,消息隊列,共享內存等,消息隊列和管道採用存儲-轉發方式,即數據先從發送方緩存區拷貝到內核開辟的緩存區中,然後再從內核緩存區拷貝到接收方緩存區,這樣就有兩次拷貝過程。共享內存不需要拷貝,但控制復雜,難以使用。Binder是個折中的方案,只需要拷貝一次就行了。其次Binder的安全性比較好,好在哪裡,在下還不是很清楚,基於安全性和傳輸的效率考慮,選擇了Binder。Binder的英文意思是粘結劑,Binder對象是一個可以跨進程引用的對象,它的實體位於一個進程中,這個進程一般是Server端,該對象提供了一套方法用以實現對服務的請求,而它的引用卻遍布於系統的各個進程(Client端)之中,這樣Client通過Binder的引用訪問Server,所以說,Binder就像膠水一樣,把系統各個進程粘結在一起了,廢話確實有點多。

為了從而保障了系統的安全和穩定,整個系統被劃分成內核空間和用戶空間
內核空間:獨立於普通的應用程序,可以訪問受保護的內存空間,有訪問底層硬體設備的所有許可權。
用戶空間:相對與內核空間,上層運用程序所運行的空間就是用戶空間,用戶空間訪問內核空間的唯一方式就是系統調用。一個4G的虛擬地址空間,其中3G是用戶空間,剩餘的1G是內核空間。如果一個用戶空間想與另外一個用戶空間進行通信,就需要內核模塊支持,這個運行在內核空間的,負責各個用戶進程通過Binder通信的內核模塊叫做Binder驅動,雖然叫做Binder驅動,但是和硬體並沒有什麼關系,只是實現方式和設備驅動程序是一樣的,提供了一些標准文件操作。

在寫AIDL的時候,一般情況下,我們有兩個進程,一個作為Server端提供某種服務,然後另外一個進程作為Client端,連接Server端之後,就 可以使用Server裡面定義的服務。這種思想是一種典型的C/S的思想。值得注意的是Android系統中的Binder自身也是C/S的架構,也有Server端與Client端。一個大的C/S架構中,也有一個小的C/S架構。

先籠統的說一下,在整個Binder框架中,由系列組件組成,分別是Client、Server、ServiceManager和Binder驅動程序,其中Client、Server和ServiceManager運行在用戶空間,Binder驅動程序運行內核空間。運行在用戶空間中的Client、Server和ServiceManager,是在三個不同進程中的,Server進程中中定義了服務提供給Client進程使用,並且Server中有一個Binder實體,但是Server中定義的服務並不能直接被Client使用,它需要向ServiceManager注冊,然後Client要用服務的時候,直接向ServiceManager要,ServiceManager返回一個Binder的替身(引用)給Client,這樣Client就可以調用Server中的服務了。

場景 :進程A要調用進程B裡面的一個draw方法處理圖片。

分析 :在這種場景下,進程A作為Client端,進程B做為Server端,但是A/B不在同一個進程中,怎麼來調用B進程的draw方法呢,首先進程B作為Server端創建了Binder實體,為其取一個字元形式,可讀易記的名字,並將這個Binder連同名字以數據包的形式通過Binder驅動發送給ServiceManager,也就是向ServiceManager注冊的過程,告訴ServiceManager,我是進程B,擁有圖像處理的功能,ServiceManager從數據包中取出名字和引用以一個注冊表的形式保留了Server進程的注冊信息。為什麼是以數據包的形式呢,因為這是兩個進程,直接傳遞對象是不行滴,只能是一些描述信息。現在Client端進程A聯系ServiceManager,說現在我需要進程B中圖像處理的功能,ServiceManager從注冊表中查到了這個Binder實體,但是呢,它並不是直接把這個Binder實體直接給Client,而是給了一個Binder實體的代理,或者說是引用,Client通過Binder的引用訪問Server。分析到現在,有個關鍵的問題需要說一下,ServiceManager是一個進程,Server是另一個進程,Server向ServiceManager注冊Binder必然會涉及進程間通信。當前實現的是進程間通信卻又要用到進程間通信,這就好象蛋可以孵出雞前提卻是要找只雞來孵蛋,確實是這樣的,ServiceManager中預先有了一個自己的Binder對象(實體),就是那隻雞,然後Server有個Binder對象的引用,就是那個蛋,Server需要通過這個Binder的引用來實現Binder的注冊。雞就一隻,蛋有很多,ServiceManager進程的Binder對象(實體)僅有一個,其他進程所擁有的全部都是它的代理。同樣一個Server端Binder實體也應該只有一個,對應所有Client端全部都是它的代理。

我們再次理解一下Binder是什麼?在Binder通信模型的四個角色裡面;他們的代表都是「Binder」,一個Binder對象就代表了所有,包括了Server,Client,ServiceManager,這樣,對於Binder通信的使用者而言,不用關心實現的細節。對Server來說,Binder指的是Binder實體,或者說是本地對象,對於Client來說,Binder指的是Binder代理對象,也就是Binder的引用。對於Binder驅動而言,在Binder對象進行跨進程傳遞的時候,Binder驅動會自動完成這兩種類型的轉換。

簡單的總結一下,通過上面一大段的分析,一個Server在使用的時候需要經歷三個階段

1、定義一個AIDL文件
Game.aidl

GameManager .aidl

2、定義遠端服務Service
在遠程服務中的onBind方法,實現AIDL介面的具體方法,並且返回Binder對象

3、本地創建連接對象

以上就是一個遠端服務的一般套路,如果是在兩個進程中,就可以進程通信了,現在我們分析一下,這個通信的流程。重點是GameManager這個編譯生成的類。

從類的關系來看,首先介面GameManager 繼承 IInterface ,IInterface是一個介面,在GameManager內部有一個內部類Stub,Stub繼承了Binder,(Binder實現了IBinder),並且實現了GameManager介面,在Stub中還有一個內部類Proxy,Proxy也實現了GameManager介面,一個整體的結構是這樣的

現在的問題是,Stub是什麼?Proxy又是什麼?在上面說了在Binder通信模型的四個角色裡面;他們的代表都是「Binder」,一個Binder對象就代表了所有,包括了Server,Clinet,ServiceManager,為了兩個進程的通信,系統給予的內核支持是Binder,在抽象一點的說,Binder是系統開辟的一塊內存空間,兩個進程往這塊空間裡面讀寫數據就行了,Stub從Binder中讀數據,Proxy向Binder中寫數據,達到進程間通信的目的。首先我們分析Stub。

Stub 類繼承了Binder ,說明了Stub有了跨進程傳輸的能力,實現了GameManager介面,說明它有了根據游戲ID查詢一個游戲的能力。我們在bind一個Service之後,在onServiceConnecttion的回調裡面,就是通過asInterface方法拿到一個遠程的service的。

asInterface調用queryLocalInterface。

mDescriptor,mOwner其實是Binder的成員變數,Stub繼承了Binder,在構造函數的時候,對著兩個變數賦的值。

如果客戶端和服務端是在一個進程中,那麼其實queryLocalInterface獲取的就是Stub對象,如果不在一個進程queryLocalInterface查詢的對象肯定為null,因為不同進程有不同虛擬機,肯定查不到mOwner對象的,所以這時候其實是返回的Proxy對象了。拿到Stub對象後,通常在onServiceConnected中,就把這個對象轉換成我們多定義AIDL介面。

比如我們這里會轉換成GameManager,有了GameManager對象,就可以調用後querryGameById方法了。如果是一個進程,那直接調用的是自己的querryGameById方法,如果不是一個進程,那調用了就是代理的querryGameById方法了。

看到其中關鍵的一行是

mRemote就是一個IBinder對象,相對於Stub,Proxy 是組合關系(HAS-A),內部有一個IBinder對象mRemote,Stub是繼承關系(IS-A),直接實現了IBinder介面。

transact是個native方法,最終還會回掉JAVA層的onTransact方法。

onTransact根據調用號(每個AIDL函數都有一個編號,在跨進程的時候,不會傳遞函數,而是傳遞編號指明調用哪個函數)調用相關函數;在這個例子裡面,調用了Binder本地對象的querryGameById方法;這個方法將結果返回給驅動,驅動喚醒掛起的Client進程裡面的線程並將結果返回。於是一次跨進程調用就完成了。

***Please accept mybest wishes for your happiness and success ! ***

③ 安卓是什麼框架,那iPhone呢框架有什麼區別

中文名:蘋果移動操作系統
外文名:iOS
開發商:蘋果(Apple)
發行商:蘋果(Apple)
發行時間:2007年6月29日
編程語言:C語言,C++, Objective-C
源碼模式:閉源(封閉源碼,開源組件)
系統家族:Mac OS X, Unix
內核類型:混合內核 (XNU,Darwin)
軟體許可:EULA(商業專有、開源組件)
最新穩定版本:iOS 7.0.6

④ android源碼里有哪些比較好的演算法或框架推薦

Android中對於圖形界面以及多媒體的相關操作比較容易實現。而且對於大多數
手機
用戶來說,他們主要也就是根據這些方面的功能來對系統那個進行修改。我們可以通過本文介紹的Android多媒體框架的源碼解讀,來具體分析一下這方面的基本知識。
Android多媒體框架的代碼在以下目錄中:external/opencore/。這個目錄是Android多媒體框架的根目錄,其中包含的子目錄如下所示:
* android:這裡面是一個上層的庫,它基於PVPlayer和PVAuthor的SDK實現了一個為Android使用的Player和Author。
* baselibs:包含數據結構和線程安全等內容的底層庫
* codecs_v2:這是一個內容較多的庫,主要包含編解碼的實現,以及一個OpenMAX的實現
* engines:包含PVPlayer和PVAuthor引擎的實現
* extern_libs_v2:包含了khronos的OpenMAX的頭文件
* fileformats:文件格式的據具體解析(parser)類
* nodes:編解碼和文件解析的各個node類。
* oscl:操作系統兼容庫
* pvmi: 輸入輸出控制的抽象介面
* protocols:主要是與網路相關的RTSP、RTP、HTTP等協議的相關內容
* pvcommon:pvcommon庫文件的Android.mk文件,沒有源文件。
* pvplayer:pvplayer庫文件的Android.mk文件,沒有源文件。
* pvauthor:pvauthor庫文件的Android.mk文件,沒有源文件。
* tools_v2:編譯工具以及一些可注冊的模塊。
Splitter的定義與初始化
以wav的splitter為例,在fileformats目錄下有解析wav文件格式的pvwavfileparser.cpp文件,在nodes目錄下有pvmf_wavffparser_factory.cpp,pvmf_wavffparser_node.h, pvmf_wavffparser_port.h等文件。
我們由底往上看,vwavfileparser.cpp中的PV_Wav_Parser類有InitWavParser(),GetPCMData(),RetrieveFileInfo()等解析wav格式的成員函數,此類應該就是最終的解析類。我們搜索PV_Wav_Parser類被用到的地方可知,在PVMFWAVFFParserNode類中有PV_Wav_Parser的一個指針成員變數。
再搜索可知,PVMFWAVFFParserNode類是通過PVMFWAVFFParserNodeFactory的CreatePVMFWAVFFParserNode()成員函數生成的。而CreatePVMFWAVFFParserNode()函數是在PVPlayerNodeRegistry::PVPlayerNodeRegistry()類構造函數中通過PVPlayerNodeInfo類被注冊到Oscl_Vector<PVPlayerNodeInfo, OsclMemAllocator> 的vector中,在這個構造函數中,AMR,mp3等node也是同樣被注冊的。
由上可知,Android多媒體框架中對splitter的管理也是與ffmpeg等類似,都是在框架的初始化時注冊的,只不過Opencore注冊的是每個splitter的factory函數。
綜述一下splitter的定義與初始化過程:
每個splitter都在fileformats目錄下有個對應的子目錄,其下有各自的解析類。
每個splitter都在nodes目錄下有關對應的子目錄,其下有各自的統一介面的node類和node factory類。
播放引擎PVPlayerEngine類中有PVPlayerNodeRegistry iPlayerNodeRegistry成員變數。
在PVPlayerNodeRegistry的構造函數中,將 AMR, AAC, MP3等splitter的輸入與輸出類型標示和node factory類中的create node與release delete介面通過PVPlayerNodeInfo類push到Oscl_Vector<PVPlayerNodeInfo, OsclMemAllocator> iType成員變數中。
當前Splitter的匹配過程
PVMFStatus PVPlayerNodeRegistry::QueryRegistry(PVMFFormatType& aInputType, PVMFFormatType& aOutputType, Oscl_Vector<PVUuid, OsclMemAllocator>& aUuids)函數的功能是根據輸入類型和輸出類型,在已注冊的node vector中尋找是否有匹配的node,有的話傳回其唯一識別標識PVUuid。
從QueryRegistry這個函數至底向上搜索可得到,在android中splitter的匹配過程如下:
android_media_MediaPlayer.cpp之中定義了一個JNINativeMethod(JAVA本地調用方法)類型的數組gMethods,供java代碼中調用MultiPlayer類的setDataSource成員函數時找到對應的c++函數
1.{"setDataSource", "(Ljava/lang/String;)V", (void *)
android_media_MediaPlayer_setDataSource},
2.static void android_media_MediaPlayer_setDataSource
(JNIEnv *env, jobject thiz, jstring path)
此函數中先得到當前的MediaPlayer實例,然後調用其setDataSource函數,傳入路徑
3.status_t MediaPlayer::setDataSource(const char *url)
此函數通過調getMediaPlayerService()先得到當前的MediaPlayerService, const sp<IMediaPlayerService>& service(getMediaPlayerService());
然後新建一個IMediaPlayer變數, sp<IMediaPlayer> player(service->create(getpid(), this, fd, offset, length));
在sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url)中
調status_t MediaPlayerService::Client::setDataSource(const char *url)函數,Client是MediaPlayerService的一個內部類。
在MediaPlayerService::Client::setDataSource中,調sp<MediaPlayerBase> MediaPlayerService::Client::createPlayer(player_type playerType)
生成一個繼承自MediaPlayerBase的PVPlayer實例。

⑤ android開發一般都使用什麼框架

目前框架使用的主要都是開源框架,都可以在github上找到:
1、volley
2、android-async-http
3、Afinal框架
4、xUtils框架
5、ThinkAndroid
6、LoonAndroid
主要有以下模塊:
(1) 自動注入框架(只需要繼承框架內的application既可)
(2)
圖片載入框架(多重緩存,自動回收,最大限度保證內存的安全性)
(3) 網路請求模塊(繼承了基本上現在所有的http請求)
(4)
eventbus(集成一個開源的框架)
(5) 驗證框架(集成開源框架)
(6) json解析(支持解析成集合或者對象)

(7) 資料庫(不知道是哪位寫的 忘記了)
(8) 多線程斷點下載(自動判斷是否支持多線程,判斷是否是重定向)
(9)
自動更新模塊
(10) 一系列工具類

⑥ android 開發框架有哪些

主要總結了7個好用的android 開發框架推薦給你:
一、 Afinal

Afinal是一個Android的ioc,orm框架,內置了四大模塊功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通過finalActivity,我們可以通過註解的方式進行綁定ui和事件。通過finalBitmap,我們可以方便的載入bitmap圖片,而無需考慮oom等問題。通過finalDB模塊,我們一行代碼就可以對android的sqlite資料庫進行增刪改查。通過FinalHttp模塊,我們可以以ajax形式請求http數據。

功能:

一個android的ioc,orm框架,內置了四大模塊功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通過finalActivity,我們可以通過註解的方式進行綁定ui和事件。通過finalBitmap,我們可以方便的載入bitmap圖片,而無需考慮oom等問題。通過finalDB模塊,我們一行代碼就可以對android的sqlite資料庫進行增刪改查。通過FinalHttp模塊,我們可以以ajax形式請求http數據。

優點:功能比較全面,文檔完善,代碼效率比較高。

缺點:沒有項目demo,框架的時間比較久,代碼冗餘比較多(這也是無可避免的),文檔比較老跟不上代碼更新進度。

二、 xUtils

xUtils:可以說是Afinal的升級版。

xUtils 包含了很多實用的android工具。

xUtils 支持大文件上傳,更全面的http請求協議支持(10種謂詞),擁有更加靈活的ORM,更多的事件註解支持且不受混淆影響...

xUitls 最低兼容android 2.2 (api level 8)

三、 ThinkAndroid

ThinkAndroid是一個免費的開源的、簡易的、遵循Apache2開源協議發布的Android開發框架,其開發宗旨是簡單、快速的進行Android應用程序的開發,包含Android
mvc、簡易sqlite orm、ioc模塊、封裝Android
httpclitent的http模塊,具有快速構建文件緩存功能,無需考慮緩存文件的格式,都可以非常輕松的實現緩存,它還基於文件緩存模塊實現了圖片緩存功能,在android中載入的圖片的時候,對oom的問題,和對載入圖片錯位的問題都輕易解決。他還包括了一個手機開發中經常應用的實用工具類,如日誌管理,配置文件管理,android下載器模塊,網路切換檢測等等工具

四、 LoonAndroid

如果你想看ui方面的東西,這里沒有,想要看牛逼的效果這里也沒有。這只是純實現功能的框架,它的目標是節省代碼量,降低耦合,讓代碼層次看起來更清晰。整個框架一部分是網上的,一部分是我改的,為了適應我的編碼習慣,還有一部分像orm完全是網上的組件。在此感謝那些朋友們。
整個框架式的初衷是為了偷懶,之前都是一個功能一個jar,做項目的時候拉進去,這樣對於我來說依然還是比較麻煩。最後就導致我把所有的jar做成了一個工具集合包。
有很多框架都含有這個工具集合里的功能,這些不一定都好用,因為這是根據我個人使用喜歡來實現的,如果你們有自己的想法,可以自己把架包解壓了以後,源碼拉出來改動下。
目前很多框架都用到了註解,除了androidannotations沒有入侵我們應用的代碼以外,其他的基本上都有,要麼是必須繼承框架裡面的activity,要麼是必須在activity的oncreat裡面調用某個方法。
整個框架式不同於androidannotations,Roboguice等ioc框架,這是一個類似spring的實現方式。在整應用的生命周期中找到切入點,然後對activity的生命周期進行攔截,然後插入自己的功能。

五、 KJFrameForAndroid

KJFrameForAndroid 又叫KJLibrary,是一個android的orm 和 ioc
框架。同時封裝了android中的Bitmap與Http操作的框架,使其更加簡單易用;

KJFrameForAndroid的設計思想是通過封裝Android原生SDK中復雜的復雜操作而達到簡化Android應用級開發,最終實現快速而又安全的開發APP。我們提倡用最少的代碼,完成最多的操作,用最高的效率,完成最復雜的功能。

功能:

一個android的orm 和 ioc 框架。同時封裝了android中的Bitmap與Http操作的框架,使其更加簡單易用;
KJFrameForAndroid開發框架的設計思想是通過封裝Android原生SDK中復雜的復雜操作而達到簡化Android應用級開發,最終實現快速而又安全的開發APP。總共分為五大模塊:UILibrary,UtilsLibrary,HttpLibrary,BitmapLibrary,DBLibrary。

六、 dhroid

dhroid 是基於android 平台,
極速開發框架,其核心設計目標是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴展.使你更快,更好的開發商業級別應用

功能:

1.Ioc容器: (用過spring的都知道)視圖注入,對象注入,介面注入,解決類依賴關系

2.Eventbus: android平台事件匯流排框架,獨創延時事件,事件管理輕松

3.Dhnet: 網路http請求的解決方案,使用簡單,減少代碼,自帶多種網路訪問緩存策略

4.adapter模塊: 數據綁定輕松,不用寫多餘的adapter,天生網路支持(一行代碼搞定載入,刷新問題)

5.DhDb: android中sqlite的最輕量orm框架(增刪改查輕松搞定)

6.Perference: android自帶Perference 升級版,讓你的Perference更強大,更方便

工具集合 JSONUtil(安全處理json),ViewUtil(數據綁定更快) ThreadWorker(非同步任務工具)...

七、 SmartAndroid

SmartAndroid是一套給
Android開發者使用的應用程序開發框架和工具包。它提供一套豐富的標准庫以及簡單的介面和邏輯結構,其目的是使開發人員更快速地進行項目開發。使用
SmartAndroid可以減少代碼的編寫量,並將你的精力投入到項目的創造性開發上。

功能:

SmartAndroid 擁有全范圍的類庫,可以完成大多數通常需要的APP開發任務,包括:
非同步網路操作相關所有功能、強大的圖片處理操作、輕量級ORM資料庫Sqlite庫、zip操作
、動畫特效、Html等解析採集、事件匯流排EventBus/Otto、Gson(Json)、AQuery、主流所有UI控制項(例如:ActionbarSherlock,SlidingMenu,BottomView,Actionbar,DragListView等10多種UI庫)等。

安卓系統是開源的,開源是啥意思

簡單的來說 ,比如谷歌開發了安卓系統最基礎的框架了,華為等手機廠家可以利用其源代碼開發修改升級匹配自身的系統,但是因為基礎源代碼來自於安卓(所以我們的手機開機時一般都會體現 POWERED BY Android )。而且開發者對於源代碼的任何改進都必須要告知開源軟體的公司,這樣也有利於開源的公司進一步提高源代碼。在這方面華為為安卓的發展壯大做出了巨大的貢獻。

早期的時候可能困難,但是以現在華為的技術水平來說,開發一個手機操作系統根本不難,但是為什麼一直不推出自己的系統呢?這是因為系統容易,生態難。

每一種操作系統都有它的運行環境,所有你在下載APP的時候,不同的操作系統是要下載不同的APP的。一個新的操作系統進來,沒有你那個系統的APP,那麼根本沒人會使用你的手機,因為它等於以前的老人機。

舉個例子 :比如華為開發了一個系統(據傳是鴻蒙),但是微信、支付寶、網路等等這些企業都不開發適用於鴻蒙系統的APP軟體,那麼鴻蒙系統將會面臨的無軟體可下載的情況,這時候,這個系統等於廢棄的一個系統。之前微軟在意識到的手機操作系統的重要性之後,也推出了Windows Phone,不過最終也敗下陣來了,因為沒有匹配的app可以下載,所以安卓並不是強大,只是它搶佔了先機而已。

PS: 很多人會說那蘋果屬於閉源系統,這些軟體開發公司是怎麼開發APP的。簡單的來說app應用是需要調取系統的許可權完成一些特定的工作,系統閉源可以簡單理解成禁止其他開發者獲取系統的代碼,但是應用需要獲取的許可權是可以賦予的,還有編寫應用的代碼也是開放的,ios雖然不讓你看源碼,但它也提供了sdk用來調用系統資源,也提供了api介面來和系統通信調度,所以微信支付寶這些公司可以開發適用於ios的app。

華為最好的解決辦法是直接開發出可以兼容安卓APP的系統,那麼關於系統的問題就全部迎然而解了,華為的回應中也說明有能力繼續發展和使用安卓生態,所以大概率預計新系統是可以兼容的。

假設華為的系統無法兼容安卓的app,那麼需要目前所有開發APP的各家企業支持,重新開發適用於華為系統的app應用,這個難度就有點大了,國內或許還好,國際就比較困難了,畢竟別人沒有義務做這件事。

一個操作系統就像一個生態圈,一旦這個生態圈穩定,其它的系統就很難進得來,電腦等其它操作系統也是如此,所以華為的困難不在與開發操作系統,而在於其生態圈的架構,最簡單的方式就是直接兼容安卓app。

開源從字面上的理解就是開放源頭,使用者可以在源代碼的基礎上進行修改和補充,形成具有特點的定製功能,很多人認為開源就是免費的,它只是對外界開放,但必須要符合原始開發公司的要求。

其中最具代表性的開源系統就是Linux,各種應用不斷完善更新都離不開它。最大的特點是開放源代碼可以自由定製,由於用戶的技術水平有限,很多的硬體和軟體廠商並沒有提供開源的功能,這就要靠使用者在選擇操作系統時根據自己的技術水平來選擇,這也說明了很少人用開源操作系統的原因。而對於專業的開發人員來說,開源系統有很大的優勢,開發應用可以隨心所欲也沒那麼復雜,因為是開放的源代碼,可以根據自己特定的需求進行修改,這對於互聯網開發人員來說,是非常重要的幫助。

像Android的系統就是開源的,基於Linux程序開發的一個Java虛擬器,然後在這個設備里運行Java。很多手機廠商在原生Android系統里添加一些定製的功能,形成獨有的系統特色,這些操作也不用谷歌授權。但有個前提,只能修改一些普通的代碼,重要的核心部分不能修改。

系統開源給了大家很多的便利,用戶也在不斷增長,對於開源的部分也是會受到一定的限制,谷歌公司可以給你空間去創新,但核心技術還是在別人手裡,只有開拓局面,掌握核心技術開發自己的操作系統才是王道。

開源,顧名思義,就是開源源代碼,但是使用者需要遵守開源規則。

安卓開源,就是說所有的廠商或者開發者都可以直接使用安卓的源代碼去開發,但是需要遵守谷歌的使用條件。

比如說,

全球所有廠商必須預裝Google全家桶(中國內地,朝鮮除外,因為谷歌已經退出該市場,服務不可用)。

而對於國內的安卓在開機時都會有一個Android的標簽,這個是在Android 4.4開始強制要求的,不然以前很多廠商改成跟自己家的系統一樣,完全不把谷歌放在眼裡。

其次是核心代碼功能不能隨意更改,必須遵守API的協議,某些廠商亂改底層導致一堆兼容性變差,谷歌被黑鍋(說得就是中國定製的Android)。

還有很多條例就不一一列舉。

但是開源必須遵守開源精神,這對作者也是一個尊重。

作為個人開發者的我,使用他人代碼依然會註明原作者信息。

歡迎在點擊右上角關註:「太平洋電腦網」,不定時放送福利哦!

開源,全稱為開放源代碼,是每個人都能看到,每個人都可以在規則之內使用,使用和開發之後需要把你的產品返回到代碼之中。

主要是為了人人為我,我為人人的精神,共同推動這個社區或者是這個系統進步。

安卓開源,那就是谷歌需要會把安卓的代碼公布公開出來,方便用戶在這個代碼的基礎上進行學習,同時也能修改,甚至可以進行商業化。

但是,你在這個基礎上開發和修改的代碼也需要公布出來,不能只索取不付出的,需要求同存異,互利共贏。

當然,這樣做的方式,是想要通過全世界的程序員的力量,把開發的工作的難度降低了,提高了程序員的工作效率,避免重復造輪子。

同時,如果你用到了別人的代碼,你需要備注代碼的作者,表示對於作者的尊重。

所以說,安卓系統是全世界的程序員的成果,因為大家在這個基礎上開發了是需要把代碼公開的,供大家使用和學習的。這也是安卓能這么快發展和進步的原因,因為這匯聚了全世界程序員的智慧。

所以,世界上沒有任何一個人能夠阻止其他人去使用安卓系統的代碼。谷歌不授權,也只不過是不能使用Google的APP,也不能使用GSM服務協議而已。當然,這個在國外影響挺大的,但是依然可以使用安卓系統的。

安卓系統開源,就是安卓系統源代碼對外開放,給你舉個例子,假如你要寫小說,小說的內容就像系統裡面的代碼,然後你發布到網上那麼其他網站就會找你合作,希望得到你的授權,那麼你同意過後才能發布,你當然希望有更多的人來看你的小說,也希望讀者能給你提提建議,那麼你肯定也會要求網站備注這個小說的作者是誰,一來防止別人修改你的小說內容,二來你可以收到讀者的建議!那麼你就會不斷的完善其小說的內容!

那麼你的小說內容對外發布,就相當於把源代碼公開,這就是系統開源,然後就是別人拿你的小說內容拍電影,它也要表明影片內容的作者及作品,這相當於把你的作品作為影片內容的框架,可能在小說的內容上修改一下,然後拍成影片發布,說到這里,是不是明白什麼是系統開。

也就是說我可以將我的系統開放給你使用,但是你只能在系統上進行創作和修改,因為這系統裡面有我的版權技術在裡面!我只是給你免費使用而已,當我不想給你使用,你必修刪除我在系統裡面的版權技術。

android (安卓)是完全開源的。

Android是一種基於Linux的自由及開放源代碼的操作系統。主要使用於移動設備,如智能手機和平板電腦,由Google(谷歌)公司和開放手機聯盟領導及開發。

尚未有統一中文名稱,中國大陸地區較多人使用「安卓」或「安致」。Android操作系統最初由Andy Rubin開發,主要支持手機。2005年8月由Google收購注資。

2007年11月,Google與84家硬體製造商、軟體開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。隨後Google以Apache開源許可證的授權方式,發布了Android的源代碼。

(7)安卓源碼框架擴展閱讀:

一、發展歷程

2003年10月,Andy Rubin等人創建Android公司,並組建Android團隊。

2005年8月17日,Google低調收購了成立僅22個月的高 科技 企業Android及其團隊。安迪魯賓成為Google公司工程部副總裁,繼續負責Android項目。

2007年11月5日,谷歌公司正式向外界展示了這款名為Android的操作系統,並且在這天谷歌宣布建立一個全球性的聯盟組織,該組織由34家手機製造商、軟體開發商、電信運營商以及晶元製造商共同組成。

並與84家硬體製造商、軟體開發商及電信營運商組成開放手持設備聯盟(Open Handset Alliance)來共同研發改良Android系統,這一聯盟將支持谷歌發布的手機操作系統以及應用軟體,Google以Apache免費開源許可證的授權方式,發布了Android的源代碼。

2008年,在GoogleI/O大會上,谷歌提出了AndroidHAL架構圖,在同年8月18號,Android獲得了美國聯邦通信委員會(FCC)的批准,在2008年9月,谷歌正式發布了Android 1.0系統,這也是Android系統最早的版本。

二、系統內核

Android 是運行於Linux kernel之上,但並不是GNU/Linux。因為在一般GNU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。

Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 為了達到商業應用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅動程序移到 Userspace,使得Linux driver 與 Linux kernel徹底分開。

Bionic/Libc/Kernel/ 並非標準的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所產生的,這樣做是為了保留常數、數據結構與宏。

Android 的 Linux kernel控制包括安全(Security),存儲器管理(Memory Management),程序管理(Process Management),網路堆棧(Network Stack),驅動程序模型(Driver Model)等。下載Android源碼之前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。

直白點就是可以改,你可以利用他轉變為自己的需要,在系統中添加自己的功能,就說一個茄子吧,你可以拿來炒拿來煮,這個茄子就是開源的,某個人把茄子炒好給你端在面前,你只能拿來吃,這盤炒好的茄子就是閉源的,像win系統所有功能都擺在哪裡你無法在系統裡面去添加功能,

意思就是隨便用,誰愛用誰用。

應該是開放源代碼!就象設計師公開了自己的工程設計圖線一樣。那樣別人就能夠拿著別人公開的這些東西進行各種仿製和在人家的基礎上做一些相應改動,從而弄成你想要要的樣子。

開源的就是開放的。不開源,就是不提供開發細節。

開源就可以讓別人掌握技術細節。不開源就不能掌握技術細節。

⑧ android開發一般都使用什麼框架

Android開發框架介紹
編輯文檔
學分 +2
開發框架方麵包含基本的應用功能開發、數據存儲、網路訪問這三大塊:
一、應用方面
一般而言一個標準的Android程序由如下4部分組成即Activity、Broadcast Intent Receiver、Service、Content Provider: 1. Activity是最頻繁、最基本的模塊,在Android中,一個Activity就是手機上一屏,相當於一個網頁一樣,所不同的是,每個Activity運行結束了,有個返回值,類似一個函數一樣。Android系統會自動記錄從首頁到其他頁面的所有跳轉記錄並且自動將以前的Activity壓入系統堆棧,用戶可以通過編程的方式刪除歷史堆棧中的Activity Instance。
Activity類中主要是跟界面資源文件關聯起來(res/layout目錄下的xml資源,也可以不含任何界面資源),內部包含控制項的顯示設計、界面交互設計、事件的響應設計以及數據處理設計、導航設計等application設計的方方面面。 2. Broadcast Intent Receiver
Intent提供了各種不同Activity進行跳轉的機制,譬如如果從A activity跳轉到B activity,使用Intent來實現如下: Intent in = new Intent(A.this, B.class); startActivity(in);
BroadcastReceiver提供了各種不同的Android應用程序進行進行進程間通訊的機制,譬如當電話呼叫來臨時,可以通過BroadcastReceiver發布廣播消息。對於用戶而言,BroadcastReceiver是不透明的,用戶無法看到這個事件,BroadcastReceiver通過NotificationManager來通知用戶這些事件發生了,它既可以在資源AndroidManifest.xml中注冊,也可以在代碼中通過Context.registerReceiver()進行注冊,只要是注冊了,當事件來臨的時候,即時程序沒有啟動,系統也在需要的時候會自動啟動此應用程序;另外各應用程序很方便地通過Context.sendBroadcast()將自己的事情廣播給其他應用程序;
3. Service,跟Windows當中的Service完全是一個概念,用戶可以通過startService(Intent service)啟動一個Service,也可通過Context.bindService來綁定一個Service.
4. Content Provider,由於Android應用程序內部的數據都是私有的,Content Provider提供了應用程序之間數據交換的機制,一個程序可以通過實現一個ContentProvider的抽象介面將自己的數據暴露出去,並且隱蔽了具體的數據存儲實現,標準的ContentProvider提供了基本的CRUD(Create,Read,Update,Delete)的介面,並且實現了許可權機制,保護了數據交互的安全性; 一個標準的Android應用程序的工程文件包含如下幾大部分: -> Java源代碼部分(包含Activity),都在src目錄當中;
-> R.java文件,這個文件是Eclipse自動生成與維護的,開發者不需要修改,提供了Android對的資源全局索引; -> Android Library,這個是應用運行的Android庫;
-> assets目錄,這個目錄裡面主要用與放置多媒體等一些文件;
-> res目錄,放置的是資源文件,跟VC中的資源目錄基本類似,其中的drawable包含的是圖片文件,layout裡麵包含的是布局文件,values目錄裡面主要包含的是字元串(strings.xml)、顏色(colors.xml)以及數組(arrays.xml)資源;
-> AndroidManifest.xml,這個文件異常重要,是整個應用的配置文件,在這個文件中,需要聲明所有用到的Activity、Service、Receiver等。

⑨ Android平台各大手機終端的UI都包含在rom里嗎還是其他的源碼框架

都在rom里。你可以試一下,你ROOT後把UI刪除後手機就黑屏了,這個時候刷一個包就正常。。。

⑩ Android開發中有沒有類似Web前端的UI框架

jQuery UI是以 jQuery 為基礎的開源 JavaScript 網頁用戶界面代碼庫。包含底層用戶交互、動畫、特效和可更換主題的可視控制項。我們可以直接用它來構建具有很好交互性的web應用程序。所有插件測試能兼容IE 6.0+, Firefox 3+, Safari 3.1+, Opera 9.6+, 和GoogleChrome。
目前,前端開發領域類似於有一下幾個:

1、jQuery EasyUI
jQuery EasyUI是一組基於jQuery的UI插件集合體,而jQuery EasyUI的目標就是幫助web開發者更輕松的打造出功能豐富並且美觀的UI界面。開發者不需要編寫復雜的javascript,也不需要對css樣式有深入的了解,開發者需要了解的只有一些簡單的html標簽。
2、Bootstrap
Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JAVASCRIPT 的,它簡潔靈活,使得 Web 開發更加快捷。 它由Twitter的設計師Mark Otto和Jacob Thornton合作開發,是一個CSS/HTML框架。Bootstrap提供了優雅的HTML和CSS規范,它即是由動態CSS語言Less寫成。Bootstrap一經推出後頗受歡迎,一直是GitHub上的熱門開源項目,包括NASA的MSNBC(微軟全國廣播公司)的Breaking News都使用了該項目。 國內一些移動開發者較為熟悉的框架,如WeX5前端開源框架等,也是基於Bootstrap源碼進行性能優化而來。
3、Boilerplate
Boilerplate是一個由 Paul Irish(Google Chrome 開發人員、jQuery 項目成員、Modernizr 作者、yayQuery 播客主持人)主導的「前端開發模版」。
HTML5 Boilerplate 是一套具有非常多先進特性的框架,其特性簡單介紹如下:
(1)由 Paul Irish 首創的在 HTML 頁面的 body 上使用 IE 條件注釋判斷瀏覽器版本,從而大大簡化了針對 IE Hack 的成本(在後來的版本中升級為在 <html> 標簽中加入條件注釋) (2)HTML5 集成,默認使用了很多 HTML5 的特性,並且使其兼容舊版本瀏覽器
(3)大量針對伺服器的默認配置,無需修改即可配置一個安全、標準的 web 伺服器
(4)完整的 JS 調試機制 —— 即使在 IE 下
(5)大量使用 CSS3 技術,並且集成了幾乎所有來自框架中和技術大牛們口頭相傳的 CSS 技巧
(6)為所有瀏覽環境做了優化,包括移動版本和列印版本
(7)默認內置 Modernizr,可以檢測瀏覽器對新特性的支持能力,方便針對舊版本瀏覽器優化
4、 jQuery Mobile
jQuery Mobile是jQuery 在手機上和平板設備上的版本。jQuery Mobile 不僅會給主流移動平台帶來jQuery核心庫,而且會發布一個完整統一的jQuery移動UI框架。支持全球主流的移動平台。jQuery Mobile開發團隊說:能開發這個項目,我們非常興奮。移動Web太需要一個跨瀏覽器的框架,讓開發人員開發出真正的移動Web網站。

熱點內容
電信光纖上傳限制 發布:2024-05-18 16:08:05 瀏覽:910
sql中的limit 發布:2024-05-18 16:05:57 瀏覽:895
啟動ug時伺服器無響應是怎麼回事 發布:2024-05-18 15:48:24 瀏覽:372
小數除法的計演算法則 發布:2024-05-18 15:36:52 瀏覽:530
安卓網卡免驅動如何實現 發布:2024-05-18 15:25:15 瀏覽:860
8加6演算法 發布:2024-05-18 15:04:25 瀏覽:738
名圖16款尊享什麼配置 發布:2024-05-18 14:55:37 瀏覽:585
我的世界怎樣刷出32k伺服器 發布:2024-05-18 14:32:32 瀏覽:565
c語言程序設計江寶釧 發布:2024-05-18 14:32:22 瀏覽:780
右擊文件夾總是轉圈圈 發布:2024-05-18 14:31:10 瀏覽:697