android開(kāi)發(fā)除了linux kernel之外的每一層都與java息息相關(guān)。
java簡(jiǎn)介
Java語(yǔ)言是SUN(Stanford University Network侮东,斯坦福大學(xué)網(wǎng)絡(luò)公司)公司1995年推出的一門(mén)高級(jí)編程語(yǔ)言蜡峰,起初主要應(yīng)用在小型消費(fèi)電子產(chǎn)品上沈自,后來(lái)隨著互聯(lián)網(wǎng)的興起元媚,Java語(yǔ)言迅速崛起(Java applet 可以在瀏覽器中運(yùn)行)断盛,成為大型互聯(lián)網(wǎng)項(xiàng)目的首選語(yǔ)言疼蛾。
2009年04月20日肛跌,美國(guó)甲骨文公司74億美元收購(gòu)Sun,取得java的版權(quán)察郁。
Java 是面向?qū)ο蟮恼Z(yǔ)言衍慎,沒(méi)有面向?qū)ο缶幊探?jīng)驗(yàn)的讀者需要花費(fèi)不少時(shí)間來(lái)了解面向?qū)ο蟮母拍睢⒄Z(yǔ)法和編程思想皮钠,有不能理解的地方請(qǐng)大家一定要堅(jiān)持稳捆,多花時(shí)間編寫(xiě)代碼自然會(huì)豁然開(kāi)朗,從面向過(guò)程到面相對(duì)象需要一個(gè)適應(yīng)期麦轰。
Java 不只是一種編程語(yǔ)言乔夯,它是一個(gè)完整的平臺(tái),擁有龐大的庫(kù)款侵,將諸如圖形繪制末荐、Socket連接、數(shù)據(jù)庫(kù)存取等復(fù)雜操作進(jìn)行了最大程度的簡(jiǎn)化新锈。
Java 是跨平臺(tái)的甲脏,一次編譯,到處運(yùn)行妹笆,在 Windows 上編寫(xiě)的代碼可以不加修改的移植到 Linux 上块请,反之也可以。
android中的java
Android應(yīng)用程序是用Java(TM)語(yǔ)言寫(xiě)成的拳缠,使用JDK的javac(或等效工具墩新,例如ECJ)來(lái)編譯。這個(gè)過(guò)程產(chǎn)生標(biāo)準(zhǔn)的Java字節(jié)碼(.class文件)脊凰。這些文件再轉(zhuǎn)化成Android的.dex文件抖棘,從使用的角度來(lái)看茂腥,它就是一種不同格式的Java class文件。不錯(cuò)切省,這是一種更優(yōu)秀的格式最岗;對(duì)Sun自從1994年以來(lái)的設(shè)計(jì)有了很大的改進(jìn)。但就如你可以把一個(gè)GIF格式的圖片轉(zhuǎn)換成更高級(jí)的完美的完全等效的PNG格式朝捆,盡管它們的字節(jié)流完全的不同般渡。
等效的文件格式在細(xì)節(jié)的實(shí)現(xiàn)上非常的不同,主要是為了優(yōu)化芙盘。就好比驯用,如果我們簡(jiǎn)單的滿足于低效率的視頻數(shù)據(jù)流,沒(méi)有采用高端的儒老、跨不同框架的壓縮技術(shù)蝴乔,那我們就可以避免跟MPEGLA視頻解碼專利做斗爭(zhēng)的麻煩了。
Android特異的classfile設(shè)計(jì)有好幾種動(dòng)機(jī)驮樊;而為了避免和Sun的知識(shí)產(chǎn)權(quán)保護(hù)沖突顯然是一個(gè)主要的因素薇正。不管怎樣,Google并沒(méi)有走的離Java足夠遠(yuǎn)囚衔。兩種文件格式非常的類似挖腰。它們?cè)谔囟ǖ牡讓訑?shù)據(jù)結(jié)構(gòu)上有區(qū)別,但這些結(jié)構(gòu)體在語(yǔ)法上一致的练湿,存儲(chǔ)完全相同的信息猴仑。我相信在JavaSE或JavaME VM里可以輕易的在它們的系統(tǒng)classloader里添加一個(gè).dex分析器來(lái)加載”Android classes”。
Android SDK 依賴于.java -> .class -> .dex 轉(zhuǎn)換的事實(shí)情況既微不足道也毫無(wú)損失肥哎×伤祝“毫無(wú)損失”的事實(shí)很重要:當(dāng)GIF = PNG 時(shí),跟受損的JPG文件就不等了 —— 它解碼不出完全相同的信息贤姆。如果JVM和Dalvik都各自獨(dú)立榆苞,你很難寫(xiě)出一個(gè)相對(duì)簡(jiǎn)單的工具將一種編譯過(guò)的代碼轉(zhuǎn)換成另一種 —— 而且不做任何妥協(xié):不丟失信息稳衬,不使用冗余來(lái)補(bǔ)償某種特征在一種VM中是first-class而在另一種中卻不是的情況霞捡,不需要額外的runtime層 上在一種VM中實(shí)現(xiàn)另一種VM的核心API。
(我知道dx轉(zhuǎn)換器有多么的復(fù)雜薄疚。我看過(guò)它的源代碼碧信。那個(gè)字節(jié)碼轉(zhuǎn)換器是一個(gè)巨大的,全功能的反編譯/重編譯器街夭,通 過(guò)SSA構(gòu)造完成砰碴。但是這個(gè)轉(zhuǎn)換器在概念上仍然是無(wú)足輕重的;從Java字節(jié)碼到Dalvik字節(jié)碼的映射在設(shè)計(jì)上是很平滑的板丽。堆棧相對(duì)于寄存器架構(gòu)中細(xì) 節(jié)上進(jìn)行了優(yōu)化呈枉;而重要的東西趁尼,例如VM層的類型系統(tǒng)是完全一致的。)
?Dalvik 和 JVM 的相當(dāng)也是很容易看清楚的猖辫。并不只是源代碼或字節(jié)碼格式上的問(wèn)題:它們的runtime對(duì)等物上也一樣酥泞。一但一個(gè)”Android class”被加載到Dalvik VM里,它就會(huì)像Java class一樣運(yùn)行啃憎,像Java class一樣工作芝囤。 如果你懂得Java編程(深入到高級(jí)的,底層的細(xì)節(jié))辛萍,你也就懂得Android編程悯姊。你只需要學(xué)一些新的API和框架概念。他們是對(duì)等的系統(tǒng)贩毕。
? ? Android使用了一個(gè)相當(dāng)大的JavaSE APIs子集赤炒。這些APIs (來(lái)自于Harmony項(xiàng)目)都是全新的實(shí)現(xiàn),但它們是以JavaSE為模子蹲诀。如果不是因?yàn)門(mén)CK許可證問(wèn)題禁悠,Harmony完全可以取得JavaSE認(rèn) 證。但這并沒(méi)有改變這樣的一個(gè)事實(shí):Harmony 和 JavaSE APIs是 完全的等效的 —— 這是特意的睛藻,不是偶然的启上。就像Charles Nutter——有名的JRuby人物——最近寫(xiě)道:
Android支持一個(gè)不完整的(但相當(dāng)大的)Java 1.5 類庫(kù)子集。這個(gè)子集大到一個(gè)復(fù)雜的JRuby項(xiàng)目幾乎不經(jīng)任何修改就能在Android上運(yùn)行店印,很少有限制情況冈在。
看起來(lái)Dalvik對(duì)JVM是如此的接近,它不得不完全兼容大部分的JVM規(guī)范按摘,包括完全詳細(xì)的JMM (就像Android支持Java風(fēng)格的線程和并發(fā)包券,已經(jīng)深入到了高級(jí)的java.util.concurrent包里了)§畔停可為什么有如此多的”Dalvik是個(gè)新VM“或”Dalvik不能運(yùn)行Java類“的說(shuō)法呢(90%的討論這場(chǎng)訴訟的論壇和博客都持這種觀點(diǎn))溅固。
每種平臺(tái)都有自己一些獨(dú)特的API,當(dāng)然兰珍,Android是一個(gè)完整的操作系統(tǒng)侍郭,包括一個(gè) Linux-based的內(nèi)核,圖形系統(tǒng)和電信堆棧掠河,等等亮元。很顯然,我只是談?wù)撈渲凶畛S玫牟糠郑篔ava為中心的用戶使用區(qū)/依賴于Java源代碼唠摹、 Java classes(切不管什么格式)爆捞、Java APIs(包括成千上萬(wàn)的常用JavaSE APIs)和出色的類Java的虛擬機(jī)的應(yīng)用框架。對(duì)于Android和其它的Java平臺(tái)之間的關(guān)系有個(gè)準(zhǔn)確的說(shuō)法勾拉,就是使用版本的概念煮甥。
學(xué)習(xí)java的相關(guān)書(shū)籍
1.《Java編程思想》
2.《Agile Java》中文版
4.《JAVA開(kāi)發(fā)實(shí)戰(zhàn)經(jīng)典》
5.《java for android》
7.《Java并發(fā)編程實(shí)戰(zhàn)》等
android開(kāi)發(fā)環(huán)境的搭建