facebook廣告





123

2013年8月3日 星期六

JavaScript客戶端網頁開發的腳本語言介紹

JavaScript,也稱ECMAScript,是一種廣泛用於客戶端網頁開發腳本語言,最早是在HTML上使用的,用來給HTML網頁添加動態功能,然而現在JavaScript也可被用於網路伺服器,如Node.js
發展初期,JavaScript的標準並未確定,同期有網景的JavaScript,微軟的JScript和CEnvi的ScriptEase三足 鼎立。1997年,在ECMA(歐洲電腦製造商協會)的協調下,由Netscape、Sun、微軟、Borland組成的工作群組確定統一標 準:ECMA-262。
一般來說,完整的JavaScript包括以下幾個部分:
  • ECMAScript,描述了該語言的語法和基本物件
  • 文件物件模型(DOM),描述處理網頁內容的方法和介面
  • 瀏覽器物件模型(BOM),描述與瀏覽器進行互動的方法和介面
它的基本特點如下:
  • 是一種解釋性程式語言(代碼不進行預編譯)。
  • 主要用來向 HTML 頁面添加互動行為
  • 可以直接嵌入 HTML 頁面,但寫成單獨的js檔案有利於結構和行為的分離。
JavaScript常用來完成以下任務:
  • 嵌入動態文字於HTML頁面
  • 對瀏覽器事件作出響應
  • 讀寫HTML元素
  • 在資料被送出到伺服器之前驗證資料
  • 檢測訪客的瀏覽器訊息
  • 控制cookies,包括建立和修改等

歷史

它最初由網景公司Brendan Eich設計,是一種動態、弱型別、基於原型的語言,內建支援型別。JavaScript是甲骨文公司的註冊商標。Ecma國際以JavaScript為基礎制定了ECMAScript標準。JavaScript也可以用於其他場合,如伺服器端編程。完整的JavaScript實作包含三個部分:ECMAScript文件物件模型瀏覽器物件模型
Netscape在最初將其腳本語言命名為LiveScript,後來Netscape在與Sun合作之後將其改名為JavaScript。JavaScript最初受Java啟發而開始設計的,目的之一就是「看上去像Java」,因此語法上有類似之處,一些名稱和命名規範也借自Java。但JavaScript的主要設計原則源自SelfScheme。JavaScript與Java名稱上的近似,是當時網景為了行銷考慮與昇陽電腦達成協議的結果。為了取得技術優勢,微軟推出了JScript來迎戰JavaScript的腳本語言。為了互用性,Ecma國際(前身為歐洲電腦製造商協會)建立了ECMA-262標準(ECMAScript)。現在兩者都屬於ECMAScript的實作。儘管JavaScript作為給非程式人員的腳本語言,而非作為給程式人員的程式語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。

常用函式庫

特性

不同於伺服器端腳本語言,例如PHPASP,JavaScript主要被作為客戶端腳本語言在用戶的瀏覽器上執行,不需要伺服器的支援。所以在早期程式員比 較青睞於JavaScript以減少對伺服器的負擔,而與此同時也帶來另一個問題:安全性。而隨著伺服器的強壯,雖然現在的程式員更喜歡執行於伺服端的腳 本以保證安全,但JavaScript仍然以其跨平台、容易上手等優勢大行其道。同時,有些特殊功能(如AJAX)必須依賴Javascript在客戶端 進行支援。隨著引擎如V8和框架如Node.js的發展,及其事件驅動異步IO等特性,JavaScript逐漸被用來編寫伺服器端程式。

編程

JavaScript是一種腳本語言,其原始碼在發往客戶端執行之前不需經過編譯,而是將文字格式的字元代碼發送給瀏覽器由瀏覽器解釋執行。直譯語言的弱點是安全性較差,而且在JavaScript中,如果一條執行不了,那麼下面的語言也無法執行。而其解決辦法就是於使用try{}catch(){}
console.log("a");    //這是正確的
console.log("b");    //這是正確的
console.logg("c");   //這不是正確的,並會到這裡時停下來
console.log("d");    //這是正確的
console.log("e");    //這是正確的
 
/*解決辦法*/
try{console.log("a");}catch(e){}    //這是正確的
try{console.log("b");}catch(e){}    //這是正確的
try{console.logg("c");}catch(e){}   //這不是正確的,但不會停下來,而是跳過
try{console.log("d");}catch(e){}    //這是正確的
try{console.log("e");}catch(e){}    //這是正確的
Javascript被歸類為直譯語言,因為目前主流的引擎都是每次執行時載入程式碼並解譯。V8是將所有程式碼解譯後再開始執行,其他引擎則是逐行解譯(SpiderMonkey會將解譯過的指令暫存,以提高效能,稱為即時編譯),但由於V8的核心部份多數用Javascript撰寫(而SpiderMonkey是用C++),因此在不同的測試上,兩者效能互有優劣。
與其相對應的是編譯語言,例如C語言,以編譯語言編寫的程式在執行之前,必須經過編譯,將程式碼編譯為機器碼,再加以執行。

Hello World

以下是一個簡單的JavaScript Hello World
<!DOCTYPE HTML>
<html>
    <head>
    <title>簡單的JavaScript Hello World</title>
        <script type="text/javascript">
            document.write("Hello, world!");   // 於瀏覽器視窗內直接顯示
            alert("Hello, world!");            //  於alert裡顯示
            console.log("Hello, world!");      // 於console裡顯示。IE下需要先开启开发工具控制台
        </script>
    </head>
    <body>
HTML 內文……
    </body>
</html>
或是在瀏覽器的網址列(location bar)中使用javascript:,以互動方式表示:
javascript:alert("Hello world!");

版本

JavaScript 已經被 Netscape 公司送出給 ECMA 制定為標準,稱之為 ECMAScript,標準編號 ECMA-262。目前最新版為 ECMA-262 5th Edition[8]。符合 ECMA-262 3rd Edition 標準的實現有:
目前 ECMA-262 4th Edition 正在開發的過程中,與其對應的 JavaScript 的版本為 JavaScript 2.0,目前也正在開發過程中。
版本 發佈日期 基於 Netscape Navigator Mozilla Firefox Internet Explorer Opera Safari Google Chrome
1.0 1996年3月
2.0




1.1 1996年8月
3.0
3.0


1.2 1997年6月
4.0-4.05




1.3 1998年10月 ECMA-262 1st edition / ECMA-262 2nd edition 4.06-4.7x
4.0


1.4

Netscape
Server





1.5 2000年11月 ECMA-262 3rd edition 6.0 1.0 5.5 (JScript 5.5),
6 (JScript 5.6),
7 (JScript 5.7),
8 (JScript 6)
6.0,
7.0,
8.0,
9.0


1.6 2005年11月 1.5 + Array extras + Array and String generics + E4X
1.5

3.0, 3.1
1.7 2006年10月 1.6 + Pythonic generators + Iterators + let
2.0

3.2, 4.0 1.0
1.8 2008年6月 1.7 + Generator expressions + Expression closures
3.0
11.50

1.8.1
1.8 + Native JSON support + Minor Updates
3.5



1.8.2 2009年6月22日 1.8.1 + Minor updates
3.6



1.8.5 2010年7月27日 1.8.1 + ECMAScript 5 Compliance
4 9 11.60


比較

ECMA
版本 說明 實現
ECMA v1 標準化了JavaScript1.1的基本特性,並添加了一些新特性。沒有標準化switch語句和正則表達式。 由Netscape 4.5和IE 4實現。
ECMA v2 ECMA v1的維護版本,只添加了說明。 由Netscape 4.5和IE 4實現。
ECMA v3 標準化了switch語句、異常處理和正則表達式。 由Mozilla、Netscape 6和IE 5.5實現。














   

文章出處:http://zh.wikipedia.org/wiki/JavaScript

Java程式語言基本介紹(二)

語言特性

Java之所以被開發,是要達到以下五個目的:
  • 應當使用物件導向程式設計方法學
  • 應當允許同一程式在不同的電腦平台執行
  • 應當包括內建的對電腦網路的支援
  • 應當被設計成安全地執行遠端程式碼
  • 應當易於使用,並借鑒以前那些物件導向語言(如C++)的長處。
Java技術主要分成幾個部分:Java語言、Java執行環境、類別庫。一般情況下說Java時並不區分指的是哪個部分。
Java在1.5版本時,做了重大改變,昇陽公司並1.5版本重新命名為Java 5.0

物件導向

Java的特點之一就是物件導向, 是程式設計方法的一種。「物件導向程式語言」的核心之一就是開發者在設計軟體的時候可以使用自訂的型別和關聯操作。程式碼和資料的實際集合體叫做「物 件」。一個物件可以想像成繫結了很多「行為(程式碼)」和「狀態(資料)」的物體。對於資料結構的改變需要和程式碼進行通訊然後操作,反之亦然。物件導向 設計讓大型軟體工程的計劃和設計變得更容易管理,能增強工程的健康度,減少失敗工程的數量。
物件導向設計另外一個標的就是能產生很多的有關聯的類,可以讓軟體的再開發變得簡單。舉例來說,很多軟體工程都有同樣的功能,尤其是很多應用了同一 原理組織的軟體工程。軟體的二次開發者想自己為軟體開發外掛模組以增強功能的時候,絕對不想看到混亂的開發程式碼和管理計劃。物件導向的目的就是不生產難 懂且難以使用的程式碼,為軟體各個功能群之間建立有效的通訊通道。很多開源軟體社群正在計劃給軟體作者提供更多的類來讓軟體的二次開發變得簡便。

跨平台性

Java語言的第二個特性就是跨平臺性,也就是說使用Java語言編寫的程式可以在編譯後不用經過任何更改,就能在任何硬體裝置條件下執行。這個特性經常被稱為「一次編譯,到處執行」。
執行Java應用程式必須安裝Java Runtime Environment(JRE),JRE內部有一個Java虛擬機器(Java Virtual Machine,JVM)以及一些標準的類別庫(Class Library)。透過JVM才能在電腦系統執行Java應用程式(Java Application),這與.Net Framework的情況一樣,所以電腦上沒有安裝JVM,那麼這些程式將不能夠執行。
實作跨平台性的方法是大多數編譯器在進行Java語言程式的編碼時候會生成一個用位元組碼寫成的「半成品」,這個「半成品」會在Java虛擬機器(解釋層)的幫助下執行,虛擬機器會把它轉換成當前所處硬體平台的原始程式碼。之後,Java虛擬機器會開啟標準庫,進行資料(圖片、執行緒和網路)的存取工作。主要注意的是,儘管已經存在一個進行程式碼翻譯的解釋層,有些時候Java的位元組碼程式碼還是會被JIT編譯器進行二次編譯。
有些編譯器,比如GCJ,可以自動生成原始程式碼而不需要解釋層。但是這些編譯器所生成的程式碼只能應用於特定平台。並且GCJ目前只支援部分的Java API。
甲骨文公司對於Java的許可是「全相容的」,這也導致了微軟和昇陽關於微軟的程式不支援RMI和JNI介面、並且增加特性為己所用的法律爭端。昇陽最終贏得了官司,獲得了大約兩千萬美元的賠償,法院強制要求微軟執行昇陽公司關於Java的許可要求。作為回應,微軟不再在Windows系統中捆綁Java,最新的Windows版本,Windows Vista和Internet Explorer 7.0版本也不再提供對於Java應用程式和控制項的支援。但是昇陽公司和其他使用Java執行時系統的公司在Windows作業系統下對使用者提供無償的第三方外掛模組和程式支援。
Java語言使用解釋層最初是為了輕巧性。所以這些程式的執行效率比C語言和C++要低很多,使用者也對此頗有微詞。很多最近的調查顯示Java的程式執行速度比幾年前要高出許多,有些同樣功能的程式的效率甚至超過了C++和C語言編寫的程式[來源請求]
Java語言在最開始應用的時候是沒有解釋層的,所有需要編譯的程式碼都直接轉換成機器的原始程式碼。這樣做的後果就是獲得了最佳的效能,但是程式臃腫異常。從JIT技術開始,Java的程式都經過一次轉換之後才變成機器碼。很多老牌的第三方虛擬機器都使用一種叫做「動態編譯」的技術,也就是說虛擬機器即時監測和分析程式的執行行為,同時選擇性地對程式所需要的部分進行編譯和最佳化。所有這些技術都改善了程式碼的執行速度,但是又不會讓程式的體積變得失常。
程式的輕便性事實上是軟體編寫很難達到的一個標的,Java雖然成功地實作了「一次編譯,到處執行」,但是由於平台和平台之間的差異,所編寫的程式 在轉換程式碼的時候難免會出現微小的、不可察覺的錯誤和意外。有些程式設計師對此非常頭疼,他們嘲笑Java的程式不是「一次編譯,到處執行」,而是「一 次編譯,到處偵錯」。以Java AWT 為例,早期Java AWT 內提供的按鈕、文字區等均是以電腦系統所預設的樣式而顯示。這令Java程式在有些沒有提供圖案的電腦系統產生錯誤(在Microsoft Windows設有視窗管理員,在一些Linux distribution則沒有)。後來SUN公司針對Java AWT一些問題而推出Java Swing。
平台無關性讓Java在伺服器端軟體領域非常成功。很多伺服器端軟體都使用Java或相關技術建立。

自動垃圾回收(Garbage Collection)

C++語言被用戶詬病的原因之一是大多數C++編譯器不支援垃圾收集機制。通常使用C++編程的時候,程式設計師於程式中初始化對象時,會在主機記憶體堆疊上分配一塊記憶體與位址,當不需要此對象時,進行解構或者刪除的時候再釋放分配的記憶體位址。如果對象是在堆疊上分配的,而程式員又忘記進行刪除,那麼就會造成記憶體洩漏(Memory Leak)。長此以往,程式執行的時候可能會生成很多不清除的垃圾,浪費了不必要的記憶體空間。而且如果同一記憶體位址被刪除兩次的話,程式會變得不穩 定,甚至崩潰。因此有經驗的C++程式員都會在刪除之後將指標重置為0,然後在刪除之前先判斷指標是否為0。
C++中也可以使用「智慧指標」(Smart Pointer)或者使用C++託管擴展編譯器的方法來實現自動化記憶體釋放,智慧指標可以在標準類庫中 找到,而C++託管擴展被微軟的Visual C++ 7.0及以上版本所支援。智慧指標的優點是不需引入緩慢的垃圾收集機制,而且可以不考慮線程安全的問題,但是缺點是如果不善使用智慧指標的話,效能有可能 不如垃圾收集機制,而且不斷地分配和釋放記憶體可能造成記憶體碎片,需要手動對堆進行壓縮。除此之外,由於智慧指標是一個基於模板的功能,所以沒有經驗的 程式員在需要使用多態特性進行自動清理時也可能束手無策。
Java語言則不同,上述的情況被自動垃圾收集功能自動處理。對象的建立和放置都是在記憶體堆疊上面進行的。當一個物件沒有任何參照的時候,Java的自動垃圾收集機制就發揮作用,自動刪除這個物件所佔用的空間,釋放記憶體以避免記憶體洩漏。
注意程式設計師不需要修改finalize方法,自動垃圾收集也會發生作用。但是記憶體洩漏並不是就此避免了,當程式員疏忽大意地忘記解除一個物件不應該有的參考的時候,記憶體洩漏仍然不可避免,例如以下的程式:
// ...
String str = "這是一段字串";
System.out.println(s);
 
for(int i){
    // 無關緊要的迴圈
    System.out.println("Hello World"+i);
}
// ...
在迴圈開始之前,字串str已經不會再用到了,但未將這個參考指向null,因此字串str無法被gc所回收。這種記憶體洩漏必須等到一個函式結束之後才會被系統取回,只不過發生的機率要比不啟用垃圾收集機制的C++程式少很多。但是總體來講,自動垃圾收集機制要安全和簡單許多。
不同廠商、不同版本的JVM中的記憶體垃圾回收機制並不完全一樣,通常越新版本的記憶體回收機制越快,IBM、BEA、SUN等等開發JVM的公司都曾宣稱過自己製造出了世界上最快的JVM[來源請求],JVM效能的世界紀錄也在不斷的被打破並提高。
IBM有一篇有關Java記憶體回收機制比不啟用垃圾收集機制的C++記憶體處理快數倍的技術文章[8],而著名的Java技術書籍《Java編程思想》(Thinking in Java)也有一段論述Java記憶體及效能達到甚至超過C++的章節[9]

介面和類別

Java內建了建立介面的類別,可以這樣使用:
 public interface Deleteable {
    void delete();
 }
這段程式碼的意思是任何實作(implement)Deleteable介面的類別都必須實作delete()方法。每個類別對這個方法的實作可以自行客製。由此概念可以引出很多種使用方法,下面是一個類別的例子:
 public class Fred implements Deleteable {
     // 必須實作 Deleteable 介面中的 delete 方法
     @Override public void delete() { 
         // 實作的程式碼
     }
 
     // 這個類別也可以包含其他方法
     public void doOtherStuff() {
     }
 }
在另外一個類別中,可以使用這樣的程式碼:
 public void deleteAll (Deleteable [] list) {
     for (int i = 0; i < list.length; i++) {
          list[i].delete();
     }
 }
因為佇列中所有的物件都可以使用delete()方法。Deleteable佇列中包含Fred物件的參照,而這個類別和其他Deleteable類別在使用deleteAll()方法時候不需要進行任何改變。
之所以這樣做就是為了在介面的執行和其程式碼之間進行區別。舉例來說,一個名叫Collection的介面可以包含任何物件所需要的引入、轉換和儲存資料的方法,其他的類都可以使用這個介面。但是這個介面可以是一個可重定義大小的佇列、一個連結串列或者是其他功能的集合。
這種特性其實是一種折中的辦法。Java的設計者們不想讓Java有多重繼承的特性,因為C++的多重繼承顯示了這種特性的困難。Java的介面功能可以提供同樣的功能,但是又不會很複雜。

應用程式開發介面

在Java語言中,應用程式介面(API)化身成類別,並且分組成為套件。每個包中包含有相關的介面和類。對於不同的平台,Java提供了不同版本的包。API的設定由sun公司和其他公司透過JCP(Java社群程式)決定。任何公司和個人都可以參與這個工程,對API進行設計。2004年IBMBEA公司準備聯合對官方的Java開源軟體工程進行支援,但是2005年初,sun公司拒絕了這個支援。

Hello World

下面這個程式顯示「Hello, world!」然後結束執行,注意java.lang套件是自動載入的,所以不需要在程式之前加入import java.lang.*;
public class HelloWorld 
{
    public static void main(String args[]) 
    {
        System.out.println("Hello, World!");
    }
}

用途

關於Java的批評


JavaOne研討會發言紀念戒指,側面刻有昇陽字樣
Java試圖通過新的方式解決軟體編寫的複雜性。很多人認為Java語言做到了它承諾的一切。但是Java並不是一門完美的語言。

整體性問題

並不是所有的工程和環境需要企業等級的複雜性,比如一個簡單的個人網站或者獨自編程的程式師所寫的程式。這些程式師會發現Java的複雜管理對於自己要做的程式來說過於強大了。一些人覺得Java在物件導向上面做的沒有RubySmalltalk純粹。但是最新出現的用Java實現的語言Groovy解決了這些問題。
作為一種已經建立的新技術,Java顯然綜合了很多語言的特性,比如C++、C語言、Python等等。一些對於Java的評論認為Java的不變性在動搖。

語言問題

有些程式師不喜歡原始類型(primitive type)和型別(class)的分離,尤其是那些曾經使用過SmalltalkRuby的程式師。Java的代碼相對於其他的代碼來說過於冗長,這與它的輕便化聲明相違背。
Java是一種單層繼承的語言。這也導致了程式師在試圖使用多重繼承時候的不便,而很多語言都可以使用這個特性。但是Java可以使用介面類,把多重繼承可能導致的風險減少到最小。Java不支援運算符重載,這是為了防止運算符重載使得代碼的功能變得不清晰。但是用Java實現的語言Groovy可以進行運算符重載。過去Java對於文字的操作和其他語言,比如PerlPHP相比差的較多,但Java在1.4版本時候引入了正規表式
至Java 1.7為止,Java語言不支援閉包(closure)和混入(mixin)特性。預計這兩項特性將在Java 1.8中加入。

類庫問題

使用Swing平臺編寫的帶有GUI(圖形用戶介面)的程式和其他原始程式非常不同。選用AWT工 具包編寫程式的程式師看到的都是原始介面,而且也無法獲得先進的GUI編程支援,如果使用的話,就要提供每個平臺上面所需的API,這將是一項龐大的工 程。Swing則是完全用Java語言所寫的程式,避免了介面元素重複的問題,只使用所有平臺都支援的最基本的繪圖機制。但是很多用戶不知道如何在 Java風格和Windows風格之間進行轉換,結果造成了Java程式的介面在很多程式中非常特殊。蘋果電腦已經提供了優化過的Java執行時程式,包含了Mac OS X的經典Aqua介面風格。
在IBM捐贈給Eclipse基金會的SWT介面框架中,使用者會看到熟悉的本地風格介面。但這又引起了不同喜好的開發人員之間的爭論。

效能問題

由於Java編譯器和虛擬機的不同對Java代碼的效能影響比語言本身的影響大的多,所以統一討論Java的程式的效能經常是有誤導性的。據IBM的資料,在同樣的硬體上2001年時的IBM JDK版本的效能是1996年的JDK版本的十倍左右。見IBM東京研究院的資料: http://www.is.titech.ac.jp/ppl2004/proceedings/ishizaki_slides.pdf 而即使是在同一時期,不同公司的JDK和JRE的效能也不一樣,比如SUN、IBM、BEA等公司都有自己開發的JDK和JRE
Java語言的一些特性不可避免的有額外的效能代價,例如陣列範圍檢查、執行時類型檢查等等。Java程式的效能還會因為不同的動態複雜性和垃圾處 理機制使用的多少而各有不同。如果JVM的實現比較優化的話,那麼這些功能甚至可以增加記憶體分配的效能。這和總是使用STL或者託管C++的程式的情況 類似。
儘管如此,仍然有許多人認為Java的效能低。這部分歸因於Sun公司最初的JVM實現使用未優化的解釋機制來執行位元組碼。一些新版本的JVM使用Just-In-Time(JIT) 編譯器,在載入位元組碼的時候將其編譯成針對執行環境的本地代碼來實現一些本地編譯器的優化特性。Just-In-Time機制和本地編譯的效能比較仍舊 是一個有爭議的話題。JIT編譯需要很多時間,對於執行時間不長或者代碼很多的大型程式並不適宜。但是不算JIT編譯階段的話,程式的執行效能在很多 JVM下可以和本地編譯的程式一爭短長,甚至在一些計算比較密集的數值計算領域也是這樣。目前,Java已經使用更先進的HotSpot技 術來代替JIT技術,Java的效能有了更進一步的提升。另外,在使用-server選項執行Java程式時,也可以對Java進行更深入的優化,比如在 執行時將調用較多的方法內聯(inline)到程式中來提高執行速度,這就是所謂的「動態優化」,而本地編譯器是無法做到這一點的;這也是一些Java代 碼比對應用C/C++等語言編寫的本地代碼執行的更快的原因之一。微軟的.NET平臺也使用JIT編譯器,所以也有類似問題。
Java的設計目的主要是安全性和可攜性,所以對於一些特性,比如對硬體架構和記憶體位址訪問的直接訪問都被去除了。如果需要間接調用這些底層功能的話,就需要使用JNI(Java 本地介面)來調用本地代碼,而間接訪問意味著頻繁調用這些特性時效能損失會很大,微軟的.NET平臺也有這樣的問題。所以到目前為止,效能敏感的代碼,例 如驅動程式和3D視頻遊戲,還是大多使用本地編譯,甚至直接以不直接支援物件導向的C語言或機器碼編寫。但最近已經有了許多用純Java編寫的3D遊戲, 其效果與用C語言編寫的不相上下,例如「合金戰士」(英文名:Chrome)。這主要是因為新版的Java 3D技術已經能像C++一樣調用硬體加速,也就是使用顯示卡來加速,無論是C++還是Java語言寫的3D遊戲都是使用顯示卡及GPU來處理,從而使得CPU可以專注於其他方面的工作。

文章出處:https://zh.wikipedia.org/wiki/Java

Java程式語言基本介紹(一)

Java 
    是一種電腦程式設計語言,擁有跨平台物件導向泛型程式設計的特性,廣泛應用於企業級Web應用開發和行動應用開發。
    任職於昇陽電腦的詹姆斯·高斯林等人於1990年代初開發Java語言的雛形,最初被命名為Oak,目標設定在家用電器等小型系統的程式語言,應用在電視機電話鬧鐘烤麵包機等家用電器的控制和通訊。由於這些智慧型家電的市場需求沒有預期的高,Sun公司放棄了該項計劃。隨著1990年代網際網路的發展,Sun公司看見Oak在網際網路上應用的前景,於是改造了Oak,於1995年5月以Java的名稱正式發行。Java伴隨著網際網路的迅猛發展而發展,逐漸成為重要的網路程式語言。
     Java程式語言的風格十分接近C++語言。繼承了C++語言物件導向技術的核心,Java捨棄了C++語言中容易引起錯誤的指標,改以參照取代,同時移除原C++與原來運算子多载,也移除多重繼承特性,改用介面取代,增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型程式設計型別安全的列舉、不定長參數和自動裝/拆箱特性。Sun公司對Java語言的解釋是:「Java程式語言是個簡單、物件導向、分布式、解釋性、健壯、安全與系統無關、可移植、高效能、多執行緒和動態的語言」
Java不同於一般的編譯語言直譯語言。它首先將原始碼編譯成位元組碼,然後依賴各種不同平台上的虛擬機器來解釋執行位元組碼,從而實作了「一次編譯、到處執行」的跨平台特性。在早期JVM中,這在一定程度上降低了Java程式的執行效率。但在J2SE1.4.2發行後,Java的執行速度有了大幅提升。
與傳統型態不同Sun公司在推出Java時就將其作為開放的技術。全球數以萬計的Java開發公司被要求所設計的Java軟體必須相互相容。「Java語言靠群體的力量而非公司的力量」是Sun公司的口號之一,並獲得了廣大軟體開發商的認同。這與微軟公司所倡導的注重精英和封閉式的模式完全不同,此外,微軟公司後來推出了與之競爭的.NET平台以及模仿Java的C#語言。後來Sun公司甲骨文公司併購,Java也隨之成為甲骨文公司的產品。
到2013年6月19日為止,Java的最新版本為7u25(開發人員習慣稱為1.7.25)。

歷史

早期的Java 

    語言最開始只是Sun電腦(Sun MicroSystems)公司在1990年12月開始研究的一個內部項目。Sun電腦公司的一個叫做派屈克·諾頓的工程師被公司自己開發的C++和C語言編譯器搞得焦頭爛額,因為其中的API極其難用。派屈克決定改用NeXT,同時他也獲得了研究公司的一個叫做「Stealth計劃」的項目的機會。

 「Stealth計劃」後來改名為「Green計劃」,詹姆斯·高斯林麥克·舍林丹也加入了派屈克的工作小組。他們和其他幾個工程師一起在加利福尼亞州門羅帕克沙丘路的一個小工作室裡面研究開發新技術,瞄準下一代智慧家電(如微波爐)的程式設計,Sun公司預料未來科技將在家用電器領域大顯身手。團隊最初考慮使用C++語言,但是很多成員包括Sun的首席科學家比爾‧喬伊,發現C++和可用的API在某些方面存在很大問題。
  工作小組使用的是內嵌類型平台,可以用的資源極其有限。很多成員發現C++太複雜以至很多開發者經常錯誤使用。他們發現C++缺少垃圾回收系統,還有可移植的安全性、分佈程式設計、和多執行緒功能。最後,他們想要一種易於移植到各種設備上的平台。
  根據可用的資金,喬伊決定開發一種集C語言Mesa語言大成的新語言,在一份報告上,喬伊把它叫做「未來」,他提議Sun公司的工程師應該在C++的基礎上,開發一種物件導向的環境。最初,高斯林試圖修改和擴展C++的功能,他自己稱這種新語言為C++ ++ --,但是後來他放棄了。他將要創造出一種全新的語言,被他命名為「Oak」(橡樹),以他的辦公室外的橡樹命名。
   就像很多開發新技術的秘密工程一樣,工作小組沒日沒夜地工作到了1992年的夏天,他們能夠演示新平台的一部分了,包括Green操作系統,Oak的程式設計語言,類庫及其硬體。最初的嘗試是面向一種類PDA設備,被命名為Star7,這種設備有鮮豔的圖形介面和被稱為「Duke」的智慧代理來幫助用戶。1992年12月3日,這台設備進行了展示。
同年11月,Green計劃被轉化成了「FirstPerson有限公司」,一個Sun公司的全資子公司,團隊也被重新安排到了帕洛阿爾托。FirstPerson團隊對建造一種高度互動的設備感興趣,當時代華納發佈了一個關於電視機頂盒的徵求提議書時(Request for proposal),FirstPerson改變了他們的目標,作為對徵求意見書的響應, 提出了一個機頂盒平台的提議。但是有線電視業界覺得FirstPerson的平台給予用戶過多的控制權,因此FirstPerson的投標敗給了SGI。與3DO公司的另外一筆關於機頂盒的交易也沒有成功,由於他們的平台不能在電視工業產生任何效益,公司被併回Sun公司。

Java和網際網路

1994年6月7月間,在經歷了一場歷時三天的腦力激盪的討論後,約翰·蓋吉詹姆斯·高斯林比爾·喬伊派屈克·諾頓韋恩·羅斯因埃里克·斯庫米,團隊決定再一次改變了努力的標的,這次他們決定將該技術應用於全球資訊網。他們認為隨著Mosaic瀏覽器的到來,網際網路正在向同樣的高度互動的遠景演變,而這一遠景正是他們在有線電視網中看到的。作為原型,派屈克·諾頓寫了一個小型全球資訊網瀏覽器,WebRunner,後來改名為HotJava

Java和「Java」

由於商標搜尋顯示,Oak已被一家顯示卡製造商註冊。於是同年,Oak被改名為Java。當使用十六進制編輯器開啟由Java原始碼編譯出的二進制檔案(.class檔案)的話,最前面的32位元將顯示為CA FE BA BE,即片語「CAFE BABE」(咖啡屋寶貝)。

Java和瀏覽器

1994年10月HotJava和Java平台為公司高層進行演示。1994年,Java 1.0a版本已經可以提供下載,但是Java和HotJava瀏覽器的第一次公開發布卻是在1995年3月23日SunWorld大會上進行的。昇陽公司的科學指導約翰·蓋吉宣告Java技術。這個發行是與網景公司的執行副總裁馬克·安德森的驚人發行一起進行的,宣布網景將在其瀏覽器中包含對Java的支援。1996年1月,昇陽公司成立了Java業務集團,專門開發Java技術。

Java近況

一套Java編輯器軟體
J2SE環境與CDC的關連
JVM的所在角色
JSPX網頁的概念
   在流行幾年之後,Java在瀏覽器中的地位被逐步侵蝕。它在簡單互動性動畫方面的用途已經完全被Adobe公司的Flash排擠,2005年Java傾向只被用於雅虎遊戲那樣的更為複雜的應用程式。Java同時遭受到來自微軟的反對,他們決定在新版本的Internet ExplorerWindows中不再附帶Java平台。
與此相反。在全球資訊網的伺服器端和手持裝置上,Java變得更加流行。很多網站在後端使用JSP和其他的Java技術。
在桌面系統上,獨立的Java程式還是相對少見,這是因為Java平台的執行開銷較大,而許多人的電腦上沒有安裝Java,由於網路頻寬在以前較 小,下載Java曾經是個耗時的事情。但是隨著電腦計算能力、網路頻寬在10年中取得了很大的進步,同時虛擬機器和編譯器的品質得到了提高,許多應用程式 得到了廣泛的使用,包括:
開源軟體
商業軟體
還有許多用Java寫的軟體,可以在http://www.java.com 找到。 在以下網頁可以看到非常多用Java寫的程式: http://java.sun.com/products/ 下面有大量用Java Swing開發的桌面Java程式 http://java.sun.com/products/jfc/tsc/sightings/ 目前Java提供以下三個版本:

Java開放原始碼項目

2006年SUN在JavaOne公佈Java 開放原始碼項目,並推出OpenJDK計畫。[6] Java虛擬機、Java編譯器和Java類庫以GNU通用公共許可證公開。

版本歷史

 <待續>

文章出處:https://zh.wikipedia.org/wiki/Java

2013年8月2日 星期五

Android系統的基本介紹(二)

硬體支援 

  由於Android作業系統的開放性和可移植性,它可以被用在大部分電子產品上。包括:智慧型手機,上網本,平板電腦,個人電腦,筆記本電腦,電 視,機頂盒,MP3播放器,MP4播放器,掌上遊戲機,家用主機,電子手錶,電子收音機,耳機,汽車設備,導航儀,CD機,VCD機,DVD機,機頂盒以 及其他設備。

Android作業系統大多搭載在使用了ARM架構的硬體設備上。但是同樣也有支援X86架構的Android作業系統,比如Google的Google TV就是使用一個特別定製的X86架構版本的Android操作系統。

同樣,蘋果公司的iOS設備,比如iPhone、iPod Touch以及iPad產品都可以安裝Android作業系統,並且可以通過雙系統啟動工具OpeniBoot或者iDroid來執行Android作業 系統。微軟的Windows Mobile、Windows Phone產品也一樣可以。另外Android亦已成功移植到搭載WebOS系統HP TouchPad以及搭載Meego系統的Nokia N9等裝置。

世界上第一部真正意義上使用Android作業系統的設備是2008年10月22日發布的HTC Dream

Android可以像用電腦上網一樣,使用任何服務。Android對手有蘋果公司iOS作業系統諾基亞SymbianMicrosoftWindows Phone 7RIM使用的BlackBerry OS系統。

 

應用程式

Google Play


Google Play logo

Google play store

Get it on Google play
Google Play,前身為Android Market,目前沒有規範的中文名,中國大陸地區大多使用「電子市場」以及「Google市場」來稱呼,因Android Market的LOGO像菜市場用的袋子,所以部分中國使用者又稱之為「菜市場」。
2009年2月,Google推出Android Market線上應用程式商店,使用者可在該平台網頁尋找、購買、下載及評級使用智慧型手機應用程式及其他內容。 第三方軟體開發商和自由開發者則可以通過Android Market發布其開發的應用程式。截止至2011年10月,Android Market上已有超過30萬個應用程式,並且在2011年12月,Android Market上的應用程式下載量超過100億次。同時,全球已有1億3千萬部Android設備在Android Market即現在的Google Play上下載過軟體。
只有通過Google許可並且認證的廠家才能在其產品設備上安裝Google服務框架和Google Play。同時受到部分地區和國家的政策影響,Google根據部分地區和國家的政策對Google Play上的內容進行了過濾,因此各地區和國家看到的內容不一樣。此外,受到部分地區和國家的電信運營商的影響,Google Play在部分地區和國家可能不可使用。
Google Play內的付費程式在許多國家與地區內提供,如美國英國瑞典德國斯里蘭卡泰國越南香港台灣等。由於受到Google結束中國事件影響,目前Google Play的服務還沒有擴展到中國大陸地區,但大陸用戶仍可通過國際信用卡和相關的免費軟體來完成購買。需要注意的是,通過這種方法購買的軟體可能不會得到當地承認的發票(Invoice)。
除了Google的Google Play之外,還有其他公司的應用程式市場,如亞馬遜公司的Amazon Appstore,它們都提供在線的APK程式的安裝和下載。

程式開發

在早期的Android應用程式開發中,通常通過在Android SDK(Android軟體開發包)中使用Java作為編程語言來開發應用程式。開發者亦可以通過在Android NDK(Android Native開發包)中使用C語言或者C++語言來作為編程語言開發應用程式。同時Google還推出了適合初學者編程使用的Simple語言,該語言類似微軟公司的Visual Basic語言。此外,Google還推出了Google App Inventor開發工具,該開發工具可以快速地構建應用程式,方便新手開發者。

應用程式安全機制

Android作業系統使用了沙箱(sandbox)機制,所有的應用程式都會先被簡單地解壓縮到沙箱中進行檢查,並且將應用程式所需的權限送出給 系統,並且將其所需權限以列表的形式展現出來,供用戶檢視。例如一個第三方瀏覽器需要「連接網路」的權限,或者一些軟體需要撥打電話,發送簡訊等權限。用 戶可以根據權限來考慮自己是否需要安裝,用戶只有在同意了應用程式權限之後,才能進行安裝。

惡意程式與病毒

由於Android作業系統的開放和自由性,一些惡意程式和病毒也隨之出現。2010年8月,卡巴斯基病毒實驗室報告稱發現了Android作業系統上首個木馬程式,並將其命名為「Trojan-SMS.AndroidOS.FakePlayer.a」,這是一個通過簡訊方式感染智慧型手機的木馬,並且已經感染了一定數量的Android設備。除了簡訊感染方式,這些Android木馬還可以偽裝成一些主流的應用程式,並且還可以隱藏在一些正規的應用程式之中。
儘管Google通過定期的檢查撤除這些存在於 Google Play 上的惡意程式和病毒,但是這並不能完全阻止其他病毒通過第三方網路的方式產生並且傳播。
目前Android作業系統上已經擁有防病毒程式來防止設備中毒,例如 AvastF-SecureKasperskyTrend MicroSymantec金山毒霸等防護軟體也已經發布了Android版本。
某些病毒,目前經過Cross-Compile的測試,證實在Linux上他們無法正常運作。

盜版問題

由於第三方市場流行,Android用戶大多不願意付費購買應用,轉而直接下載已被駭客破解的軟體檔,對應用開發者造成嚴重損失。有遊戲開發者針對其作品的調查指出,97%亞洲玩家、70%歐洲玩家及47%北美玩家都下載盜版。

SEAndroid

美國國家安全域在2012年1月發布SEAndroid開源項目和程式碼,使Android系統支援強制存取控制(Mandatory Access Control)以增加系統安全性。

 

市場佔有率

2009年第二季度,根據市場研究公司Canalys的數據顯示,Android佔據全球智慧型手機作業系統市場2.8%的份額,這個數字在2010年第四季度的全球份額中增長到了33%,Android作業系統也因此擊敗了諾基亞的Symbian系統成為了全球第一大智慧型手機作業系統。2012年5月,根據市場調查公司的數據顯示,Android作業系統在全球智慧型手機作業系統中的份額已經過半,達到了60%,全球有一半的智慧型手機使用Android作業系統。
2010年5月的數據顯示,Android作業系統在2010年第一季度的銷量超過了對手iOS平台,成為美國最大的智慧型手機作業系統。
根據本土市場研究公司ComScore的數據顯示,2009年11月時,Android在美國的智慧型手機作業系統市場的佔有率為5.2%,在2010年2月時,這個數字變成了9.0%,而在2010年第三季度末時,Android已經佔據了美國市場的21.4%的份額。截止至2011年6月,Google表示,每日通過Google服務器啟用的Android設備達到了55萬部,並且以每週4.4%的速度增長。2011年8月1日,Canalys的數據顯示,Android已佔據美國48%的智慧型手機市場佔有率。2011年10月13日,Google表示,全球市場上有1.9億部Android設備通過Google認證,而在2011年11月16日,全球市場上已有2億部Android設備通過Google認證。但是,搭載Android作業系統的平板電腦卻只有1.9%的份額,只有380萬Android蜂巢平板被賣出,遠遠低於蘋果公司的iPad的銷量。2012年6月,Google在2012 Google I/O大會上表示全球市場上有4億部Android設備被啟動,每天啟動一百萬台
2013年5月,Android在中國的佔有率有71.5%,超過其主要競爭對手蘋果公司約50%。世界佔有率亦有近70%。

使用者使用系統版本比例


Android作業系統版本的用戶比例(2013年6月3日)
截止至2013年6月3日,不同的Android作業系統版本的用戶比例。
版本名稱 API level 用戶分佈
4.2.x Jelly Bean 果凍豆 17 4.0%
4.1.x Jelly Bean 果凍豆 16 29.0%
4.0.x Ice Cream Sandwich 冰淇淋三明治 14-15 25.6%
3.x.x Honey Comb 蜂巢 11-13 0.1%
2.3.x Ginger Bread 薑餅 9-10 36.5%
2.2 Froyo 霜凍優格 8 3.2%
2.1 Eclair 閃電泡芙 7 1.5%
1.6 Donut 甜甜圈 4 0.1%

版本

Android作業系統曾有兩個內部版本,分別是阿童木Astro)和發條機器人Bender),在這兩個版本之後,Google為了避免商標問題,將Android作業系統的代號由機器人系列轉變為了現在的甜點系列。[69]而現時Android系統以差不多每半年一次的步伐進行升級,比如1.5版叫做Cupcake紙杯蛋糕)、1.6版為Donut甜甜圈)、2.0/2.1版為Éclair閃電泡芙,一種法式奶油夾心甜點)、2.2版為Froyo霜凍優格)、2.3版為Gingerbread薑餅)、3.0版為Honeycomb蜂窩)、4.0版為Ice Cream Sandwich冰淇淋三明治)、4.1/4.2/4.3版稱為Jelly Bean雷根糖)及5.0版稱為Key Lime Pie墨西哥萊姆派)。這些是以A、B、C、D、E、F、G、H、I、J、K字頭順序來排列的。
由於Android平台的高度開放和對軟體升級架構尚欠規範,導致Android產品往往因新版軟體的硬體要求過高,或致設備廠商無法保證對其產品提供最新版軟體更新,或致廠商拒絕支援而無法更新,令產品壽命週期大幅縮短及衍生俗稱「孤兒機」問題。

發佈


Android 1.1介面

Android 2.0介面

Android 2.3介面

供平板電腦使用的Android 3.0介面

Android 4.0介面

Android 4.3介面

Key Lime Pie food
1.5
(Cupcake)
基於Linux Kernel 2.6.27
2009年4月30日,官方1.5版本(Cupcake 紙杯蛋糕)的Android發行。 主要的更新如下:
  • 拍攝/播放視訊,並支援上傳到Youtube
  • 支援立體聲藍芽耳機,同時改善自動配對效能
  • 最新的採用WebKit技術的瀏覽器,支援複製/貼上和頁面中搜尋
  • GPS效能大大提高
  • 提供螢幕虛擬鍵盤
  • 主螢幕增加音樂播放器和相框widgets
  • 應用程式自動隨著智慧型手機旋轉
  • 簡訊Gmail、日曆,瀏覽器的使用者介面大幅改進,如Gmail可以批次刪除郵件
  • 相機啟動速度加快,拍攝圖片可以直接上傳到Picasa
  • 來電照片顯示
1.6
(Donut)
基於Linux Kernel 2.6.29
2009年9月15日,1.6(Donut 甜甜圈)版本軟體開發套件發佈。主要的更新如下:
  • 重新設計的Android Market
  • 手勢支援
  • 支援CDMA網路
  • 文字轉語音系統(Text-to-Speech)
  • 快速搜尋框
  • 全新的拍照介面
  • 檢視應用程式耗電
  • 支援虛擬私人網路(VPN)
  • 支援更多的螢幕解析度。
  • 支援OpenCore2媒體引擎
  • 新增面向視覺或聽覺困難人群的易用性外掛模組[77]
2.0/2.0.1/2.1
(Eclair)
基於Linux Kernel 2.6.29
2009年10月26日,2.0(Eclair 鬆餅)版本軟體開發套件發佈。主要的更新如下:
  • 最佳化硬體速度
  • "Car Home"程式
  • 支援更多的螢幕解析度
  • 改良的使用者介面
  • 新的瀏覽器的使用者介面和支援HTML5
  • 新的聯繫人名單
  • 更好的白色/黑色背景比率
  • 改進Google Maps 3.1.2
  • 支援Microsoft Exchange
  • 支援內建相機閃光燈
  • 支援數碼變焦
  • 改進的虛擬鍵盤
  • 支援藍芽2.1
  • 支援動態桌面的設計
2.2/2.2.1
(Froyo)
基於Linux Kernel 2.6.32
2010年5月20日,2.2(Froyo 冷凍優格)版本軟體開發套件發佈。主要的更新如下:
  • 支援將軟體安裝至擴充功能內存[81]
  • 整合Adobe Flash 10.1支援[82]
  • 加強軟體即時編譯的速度[83]
  • 新增軟體啟動"快速"至電話瀏覽器[84]
  • USB分享器和WiFi熱點功能[85]
  • 支援在瀏覽器上傳檔案[86]
  • 更新Market中的批次和自動更新[87]
  • 增加對Microsoft Exchange的支援(安全政策, auto-discovery, GAL look-up)
  • 整合ChromeV8 JavaScript引擎到瀏覽器
  • 加強快速搜尋小工具
  • 更多軟體能透過Market更新,類似2.0/2.1中的Map更新
  • 速度和效能最佳化
註:部分標稱為2.2的韌體仍然在使用2.6.29的核心。這種韌體可以實作大部分2.2的功能(比如flash),但效能上與2.6.32有一定差距。
2.3
(Gingerbread)
基於Linux Kernel 2.6.35
2010年12月7日,2.3(Gingerbread 薑餅)版本軟體開發套件發佈。主要的更新如下:
  • 修補UI
  • 支援更大的螢幕尺寸和解像度(WXGA及更高)
  • 系統級複製貼上
  • 重新設計的多點觸控式螢幕幕鍵盤
  • 原生支援多個鏡頭(用於視訊通話等)和更多感測器(陀螺儀、氣壓計等)
  • 電話簿整合Internet Call功能
  • 支援近場通訊NFC
  • 強化電源、應用程式管理功能
  • 新增下載管理員
  • 最佳化遊戲開發支援
  • 多媒體音效強化
  • YAFFS轉換到ext4檔案系統
  • 開放了螢幕截圖功能
  • 對黑色及白色的還原更加真實
  • Google Talk視訊功能
3.0.1/3.1/3.2
(Honeycomb)
基於Linux Kernel 2.6.36
2011年2月2日, 3.0(Honeycomb 蜂巢)版本主要更新如下:
  • 僅供平板電腦使用
  • Google eBooks上提供數百萬本書
  • 支援平板電腦大螢幕、高解析度
  • 新版Gmail
  • 3D加速處理
  • 網頁版Market(Web store)詳細分類顯示,依個人Android分別設定安裝應用程式
  • 新的快訊通知功能
  • 專為平板電腦設計的使用者介面(重新設計的通知列與系統列)
  • 加強多工處理的介面
  • 重新設計適用大螢幕的鍵盤及複製貼上功能
  • 多個標籤的瀏覽器以及私密瀏覽模式
  • 快速切換各種功能的相機
  • 增強的圖庫與快速捲動的聯絡人介面
  • 更有效率的Email介面
  • 支援多核心處理器
  • 3.2最佳化7吋平板顯示
  • 部分3.0執行的應用程式以2.3版本的顯示方式呈現(如Play 商店),為一個缺點
4.0
(Ice Cream Sandwich)
基於Linux Kernel 3.0.1
2011年10月19日,4.0(Ice Cream Sandwich 冰淇淋三明治)版本主要更新如下:
  • HOLO主題(Google力薦第三方應用使用HOLO主題並將官方應用全部覆寫為HOLO風格,但仍向下相容原來的android應用視覺樣式)
  • 相機內建全景(Panorama)模式
  • Gmail 外觀有所改動
  • 改動用戶介面,新的啟動畫面,Home 畫面右下角類似 Tray 的圖示,內有多個程式可執行
  • Google Search Bar 會設置在最上方
  • Apps/Widgets 會類似 Honeycomb 模樣
  • 系統字型由原先的Droid Sans變更為Roboto
4.1/4.2/4.3
(Jelly Bean)
基於Linux Kernel 3.4.0
2012年6月28日,Android 4.1(Jelly Bean 果凍豆)版本主要更新如下:
  • 基於Android 4.0改善
  • 「牛油」效能(Project Butter),意思是可以讓 Jelly Bean 的體驗像「牛油般順滑」(鎖定並提昇使用者頁面的速度與流暢性,對低配置的裝置效果不大)
  • 「Google Now」可在 Google 日曆內加入活動舉辦時間、地點,系統就會在判斷當地路況後,提前在「適當的出門時間給予通知」
  • 新增離線語音輸入
  • 通知中心顯示更多訊息,如支援拉開欄項以檢視詳細圖片(如截屏)
  • 更多的平板最佳化
  • 語音助理:與 S Voice 類近,相抗於 Apple Siri
  • Google Play 增加電視視訊與電影的購買
  • 提昇反應速度
  • 強化預設鍵盤
  • 大幅改變使用者介面設計
  • 更多的Google 雲端整合
  • 不會內建Flash Player,並且adobe聲明停止開發
2012年10月30日,Android 4.2(Jelly Bean 果凍豆)版本主要更新如下:
  • 多重使用者帳戶
  • 通知中心裡的設定鍵
  • 照片球(球形全景拍攝)
  • Google Now 更新,除了搜尋外,現在可檢視 Gmail 與飛機航班等資料;更提供使用者購買票卷、音樂會、股票、突發新聞等
  • 手勢輸入
  • 多媒體無線傳輸 Miracast
  • 螢幕鎖定時的小工具,唯目前支援的小工具十分有限(基於開發者有無加入此功能)
  • 白日夢,類似於螢幕保護
2013年7月25日,Android 4.3(Jelly Bean 果凍豆)版本主要更新如下:
  • 支援多使用者登入,支援一台終端裝置上有多個登入帳號
  • 「藍芽低功耗」功能,開啟藍芽後,耗電量相比之前大幅降低
  • 支援OpenGL ES 3.0,將為Android遊戲帶來更出色的視覺體驗
  • DRM APIs,提供全新數位版權加密技術支援
  • 支援4K解析度,加入對640PPI(XXXHDPI)的支援
  • 提高了全景相機的校準和縫合,最佳化曝光修正
5.0
(Key Lime Pie)
2012年12月3日有報導指谷歌正在開發Android 5.0。有Google員工證實作業系統將命名為Key Lime Pie。

系統架構

應用程式

Android以Linux為核心的Android行動平台,使用Java作為程式語言,使介面到 功能,都有層出不窮的變化,其中Activity等同於J2ME的MIDlet,一個Activity類別負責建立視窗,一個活動中的Activity就 是在foreground(前景)模式,背景執行的程式叫做Service。兩者之間透過由ServiceConnection和AIDL連結,達到複數 程式同時執行的效果。如果執行中的Activity全部畫面被其他Activity取代時,該Activity便被停止,甚至被系統清除。
View等同於J2ME的Displayable,程式人員可以透過View類別與「XML layout」檔將UI放置在視窗上,並可以利用View打造出所謂的Widgets,其實Widget只是View的一種,所以可以使用xml來設計 layout。至於ViewGroup是各種layout的基礎抽象類別,ViewGroup之內還可以有ViewGroup。View的建構函式不需要 在Activity中呼叫,但是Displayable的是必須的,在Activity中,要透過findViewById()來從XML中取得 View,Android的View類的顯示很大程度上是從XML中讀取的。View與事件息息相關,兩者之間透過Listener結合在一起,每一個 View都可以註冊event listener,例如:當View要處理使用者觸碰的事件時,就要向Android框架註冊View.OnClickListener。另外還有 Image等同於J2ME的BitMap。

中介軟體

作業系統與應用程式的溝通橋樑,並用分為兩層:函式層和虛擬機器器Bionic是Android改良libc的版本。Android同時包含了Webkit,所謂的Webkit就是Google Chrome瀏覽器背後的引擎。Surface flinger是就2D或3D的內容顯示到螢幕上。Android使用工具鏈為Google自製的Bionic Libc。
Android採用OpenCORE作為基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、 PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
Android使用Skia為 核心圖形引擎,搭配OpenGL/ES。Skia與Linux Cairo功能相當,但相較於Linux Cairo, Skia功能還只是陽春型的。2005年Skia公司被Google收購,2007年初,Skia GL源碼被公開,目前Skia也是Google Chrome的圖形引擎。
Android的多媒體資料庫採用SQLite資料庫系統。資料庫又分為共用資料庫及私用資料庫。使用者可透過ContentResolver類別取得共用資料庫。
Android的中間層多以Java實作,並且採用特殊的Dalvik虛擬機器器。Dalvik虛擬機器器是一種「暫存器型態」的Java虛擬機器器,變數皆存放於暫存器中,虛擬機器器的指令相對減少。
Dalvik虛擬機器器可以有多個例項,每個Android應用程式都用一個自屬的Dalvik虛擬機器器來執行,讓系統在執行程式時可達到最佳化。Dalvik虛擬機器器並非執行Java位元組碼,而是執行一種稱為.dex格式的檔案。

硬體抽像層(HAL)

Android的硬體抽像層是能以封閉源碼形式提供硬體驅動模組。HAL的目的是為了把Android framework與Linux kernel隔開,讓Android不至過度依賴Linux kernel,以達成「核心獨立」(kernel independent)的概念,也讓Android framework的開發能在不考量驅動程式實作的前提下進行發展。
HAL stub是一種代理人的概念,stub是以*.so檔的形式存在。Stub向HAL「提供」操作函式,並由Android runtime向HAL取得stub的操作,再回撥這些操作函式。HAL里包含了許多的stub(代理人)。Runtime只要說明「型別」,即module ID,就可以取得操作函式。

程式語言

Android是執行於Linux kernel之上,但並不是GNU/Linux。因為在一般GNU/Linux裏支援的功能,Android大都沒有支援,包括CairoX11AlsaFFmpegGTKPangoGlibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android為了達到商業應用,必須移除被GNU GPL授權證所約束的部份,Android 並沒有使用者層驅動(user space driver)這種東西。所有的驅動還是在核心空間中,並以 HAL 隔開版權問題。bionic/libc/kernel/ 並非標準的核心表頭檔(kernel header files)。Android的核心表頭檔是利用工具由Linux核心的表頭檔所產生的,這樣做是為了保留常數、資料結構與巨集。
Android的內核基於Linux,除了內核之外,則是中介層、資料庫元和用C/C++編寫的API以及應用程式框架。Android的應用程式通常以Java資料庫元為基礎編寫,執行程式時,應用程式的代碼會被即時轉變為Dalvik dex-code (Dalvik Executable),然後Android作業系統通過使用即時編譯的Dalvik虛擬機來將其執行。
目前Android的Linux kernel控制包括安全、記憶體管理行程管理網路堆疊驅動程式模型等。下載Android源碼之前,先要安裝其構建工具Repo來初始化源碼。Repo是Android用來輔助Git工作的一個工具。

專利糾紛

《PC世界》雜誌網站2011年9月22日報導,Android已捲入1000多件專利訴訟。2011年8月,Google斥資125億美元收購摩托羅拉行動(Motorola Mobility)及其擁有的約2.45萬份專利組合。

命名由來

Android一詞最早出現於法國作家利爾亞當Auguste Villiers de l'Isle-Adam)在 1886 年發表的科幻小說《未來夏娃》(L'Ève future)中。他將外表像人的機器人取作 Android。

Android標誌

Android是一個全身綠色的機器人,顏色採用了PMS 376C和RGB中十六進制的#A4C639來繪製,這是Android作業系統的品牌象徵。有時候,它會以純文字的標誌展示。
Android的標誌是由Ascender 公司設計的,其中的文字使用了Ascender公司專門製作的稱之為「Google Droid字型」的字型

 

文章出處:https://zh.wikipedia.org/wiki/Android