2012年3月2日 星期五

(轉) 加強PHP安全性的幾個原則




加強PHP安全性的幾個原則

作為PHP程式師,特別是新手,對於互聯網的險惡總是知道的太少,對於外部的入侵有很多時候是素手無策的,他們根本不知道駭客是如何入侵的、提交入侵、上傳漏洞、sql 注入、跨腳本攻擊等等。作為最基本的防範你需要注意你的外部提交,做好第一面安全機制處理防火牆。
  
規則 1:絕不要信任外部資料或輸入
  關於Web應用程式安全性,必須認識到的第一件事是不應該信任外部資料。外部資料(outside data) 包括不是由程式師在PHP代碼中直接輸入的任何資料。在採取措施確保安全之前,來自任何其他來源(比如 GET 變數、表單 POST、資料庫、設定檔、會話變數或Cookie)的任何資料都是不可信任的。
  例如,下面的資料元素可以被認為是安全的,因為它們是在PHP中設置的。
清單 1. 安全無暇的代碼   
$myUsername = ‘tmyer’;   
$arrayarrayUsers = array(‘tmyer’, ‘tom’, ‘tommy’);   
define(“GREETING”, ‘Hello there’ . $myUsername);   
?>  
  但是,下面的資料元素都是有瑕疵的。
清單 2. 不安全、有瑕疵的代碼   
$myUsername = $_POST['username']; //tainted!   
$arrayarrayUsers = array($myUsername, ‘tom’, ‘tommy’); //tainted!   
define(“GREETING”, ‘hello there’ . $myUsername); //tainted!   
?>  
  為什麼第一個變數$myUsername 是有瑕疵的?因為它直接來自表單 POST。使用者可以在這個輸入域中輸入任何字串,包括用來清除檔或運行以前上傳的檔的惡意命令。您可能會問,難道不能使用只接受字母 A-Z 的用戶端(Javascrīpt)表單檢驗腳本來避免這種危險嗎?”是的,這總是一個有好處的步驟,但是正如在後面會看到的,任何人都可以將任何表單下載到自己的機器上,修改它,然後重新提交他們需要的任何內容。
  解決方案很簡單:必須對$_POST['username'] 運行清理代碼。如果不這麼做,那麼在使用$myUsername的任何其他時候(比如在陣列或常量中),就可能污染這些物件。對用戶輸入進行清理的一個簡單方法是,使用規則運算式來處理它。在這個示例中,只希望接受字母。將字串限制為特定數量的字元,或者要求所有字母都是小寫的,這可能也是個好主意。
清單 3. 使用戶輸入變得安全   
$myUsername = cleanInput($_POST['username']); //clean!   
$arrayarrayUsers = array($myUsername, ‘tom’, ‘tommy’); //clean!   
define(“GREETING”, ‘hello there’ . $myUsername); //clean!   
function cleanInput($input){   $clean = strtolower($input);   
$clean = preg_replace(“/[^a-z]/”, “”, $clean);   
$clean = substr($clean,0,12);return $clean;   
}   
?>  
  
規則 2:禁用那些使安全性難以實施的PHP設置
  已經知道了不能信任用戶輸入,還應該知道不應該信任機器上配置 PHP 的方式。例如,要確保禁用 register_globals。如果啟用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替換同名的 GET POST 字串。通過禁用這個設置,PHP 強迫您在正確的名稱空間中引用正確的變數。要使用來自表單 POST 的變數,應該引用 $_POST['variable']。這樣就不會將這個特定變數誤會成 cookie、會話或 GET 變數。
  
規則 3:如果不能理解它,就不能保護它
  一些開發人員使用奇怪的語法,或者將語句組織得很緊湊,形成簡短但是含義模糊的代碼。這種方式可能效率高,但是如果您不理解代碼正在做什麼,那麼就無法決定如何保護它。例如,您喜歡下面兩段代碼中的哪一段?
清單 4. 使代碼容易得到保護   
//obfuscated code   
$input = (isset($_POST['username']) ? $_POST['username']:”);   
//unobfuscated code   
$input = ”;   
if (isset($_POST['username'])){   
$input = $_POST['username'];   
}else{   
$input = ”;   
}  
  在第二個比較清晰的程式碼片段中,很容易看出 $input 是有瑕疵的,需要進行清理,然後才能安全地處理。
  
規則 4縱深防禦是新的法寶
  本教程將用示例來說明如何保護線上表單,同時在處理表單的 PHP 代碼中採用必要的措施。同樣,即使使用 PHP regex 來確保 GET 變數完全是數位的,仍然可以採取措施確保 SQL 查詢使用轉義的用戶輸入。縱深防禦不只是一種好思想,它可以確保您不會陷入嚴重的麻煩。既然已經討論了基本規則,現在就來研究第一種威脅:SQL 注入攻擊。
  防止SQL注入攻擊
  在SQL注入攻擊中,用戶通過操縱表單或 GET 查詢字串,將資訊添加到資料庫查詢中。例如,假設有一個簡單的登錄資料庫。這個資料庫中的每個記錄都有一個用戶名欄位和一個密碼欄位。構建一個登錄表單,讓用戶能夠登錄。
<html>  
<head>  
<title>Login</title>  
</head>  
<body>  
<form action=”verify.php” method=”post”>  
<p><label for=’user’>Username</label>  
<input type=’text’ name=’user’ id=’user’/>  
</p> <p><label for=’pw’>Password</label>  
<input type=’password’ name=’pw’ id=’pw’/>  
</p> <p><input type=’submit’ value=’login’/></p>  
</form>  
</body>  
</html>  
  這個表單接受使用者輸入的用戶名和密碼,並將使用者輸入提交給名為verify.php的文件。在這個檔中,PHP處理來自登錄表單的資料,如下所示:
清單 5. 不安全的 PHP 表單處理代碼   
<?php  
$okay = 0;   
$username = $_POST['user'];   
$pw = $_POST['pw'];   
$sql = “select count(*) as ctr from users where username=’
”.$username.”‘ and password=’”. $pw.”‘ limit 1;   
$result = MySQL_query($sql);   
while ($data = mysql_fetch_object($result)){   
if ($data->ctr == 1){   
//they’re okay to enter The application!   
$okay = 1;   
}   
}   
if ($okay){   
$_SESSION['loginokay'] = true;   
header(“index.php”);   
}else{   
header(“login.php”);   
}   
?>  
  這段代碼看起來沒問題,對嗎?世界各地成百(甚至成千) PHP/MySQL 網站都在使用這樣的代碼。它錯在哪裡?好,記住不能信任用戶輸入。這裡沒有對來自使用者的任何資訊進行轉義,因此使應用程式容易受到攻擊。具體來說,可能會出現任何類型的SQL注入攻擊。例如,如果用戶輸入 foo 作為用戶名,輸入 or 1=1 作為密碼,那麼實際上會將以下字串傳遞給 PHP,然後將查詢傳遞給 MySQL
<?php  
$sql = “select count(*) as ctr from users where username=
’foo’ and password=” or ’1=’1 limit 1;   
?>  
  這個查詢總是返回計數值 1,因此 PHP 會允許進行訪問。通過在密碼字串的末尾注入某些惡意 SQL,駭客就能裝扮成合法的用戶。解決這個問題的辦法是,將 PHP 的內置 mysql_real_escape_string() 函數用作任何使用者輸入的包裝器。這個函數對字串中的字元進行轉義,使字串不可能傳遞撇號等特殊字元並讓 MySQL 根據特殊字元進行操作。清單7展示了帶轉義處理的代碼。
清單7展示了帶轉義處理的代碼   
<?php     
$okay = 0;     
$username = $_POST['user'];     
$pw = $_POST['pw'];     
$sql = ”select count(*) as ctr from users where username=’”.mysql_real_
_string($username).”‘ and password=’”. mysql_real_escape_string($pw).”‘
 limit 1;      
$result = mysql_query($sql);     
while ($data = mysql_fetch_object($result)){         
       if ($data->ctr == 1){          //they’re okay to enter the 
application!             
       $okay = 1;          
       }     
      }     
       if ($okay){         
           $_SESSION['loginokay'] = true;         
           header(“index.php”);     
           }   
        else{         
        header(“login.php”);     
      }     
?>  
  使用 mysql_real_escape_string() 作為用戶輸入的包裝器,就可以避免用戶輸入中的任何惡意 SQL 注入。如果使用者嘗試通過 SQL 注入傳遞畸形的密碼,那麼會將以下查詢傳遞給資料庫:
select count(*) as ctr from users where username=’foo’ and password=
’’ or ’1’=’1 limit 1 

自由轉載,轉載請注明: 轉載自WEB開發筆記 www.chhua.com

本文來源於WEB開發筆記 http://www.chhua.com , 原文地址: http://www.chhua.com/web-note1413 


2012年2月29日 星期三

(轉) 揭開密碼破譯的神秘面紗

密碼學之前應該先看看這篇文章。
原文網址如下:
http://www.360doc.com/content/11/0920/07/1769601_149652902.shtml

翻譯為繁體版:

查看個人電子郵箱,需要密碼;進入單位局域網,需要密碼;使用電話卡要密碼;借記卡、信用卡更要設置密碼。可以說,密碼已經滲透到我們日常生活的方方面面。

去年年底,因為近年接連破譯MD5、SHA-1,把中國的密碼學研究推向了世界巔峰的山東大學數學與系統科學學院信息安全研究所所長王小雲及其女子解碼團隊走進公眾視線。王小雲的研究成果表明:從理論上講,電子簽名是可以偽造的——必須及時添加限制條件,或重新選用更為安全的密碼標準,否則難保電子商務的安全。於是,對密碼學的關注和興趣立即超越了數學家的界限……

MD5、SHA-1是當前國際通行的密碼標準,前者由國際著名密碼學家、圖靈獎獲得者兼公鑰加密算法RSA的創始人設計,SHA-1是由美國專門制定密碼算法的標準機構——美國國家標準技術研究院與美國國家安全局設計。這兩大算法是目前國際電子簽名及許多其他密碼應用領域的關鍵技術,廣泛應用於金融、證券等電子商務領域。其中,SHA-1早在1994年便為美國政府採納,是目前美國政府廣泛應用的計算機密碼系統。

據英國《獨立報》近日報導,在一個瞬息萬變的全球化通訊時代,編譯或破譯秘密信息的能力從來沒有像現在這般顯得如此之重要。二戰時期,英國布萊切利公園的密碼專家們成功破譯了納粹德國的Enigma密碼,從而加速了希特勒的覆滅。時至今日,密碼仍未失去其重要性,編碼員和破譯員之間的鬥爭也將繼續下去。

●密碼重要性至今猶存 

密碼同語言的歷史一樣悠久。有了語言,你可以同每一個人交流,而安全可靠的密碼則能讓你選擇你所希望傳遞的任何信息。從有史料記載的歷史開始,我們便發現人們通過密碼交流的眾多案例,令人好奇又驚訝。密碼在21世紀並未喪失其重要性。

我們將在近期看到一部根據密碼在現實生活中捉弄人和操縱人的實例改編的電影。這部電影就是《十二宮殺手》,講述了一個連環殺手的故事,此人在作案後,總借密碼信息捉弄警方,宣稱只要破譯了密碼就能揭示他的真實身份,由於技術方面的原因,警方面對兇手的挑釁束手無策。然而,當警方終於破譯了部分密碼信息後,他們發現其中並未揭示殺手的身份,只是表明此人思想病態。 

實際上,《十二宮殺手》並不是近年來第一部以密碼挑戰為主題的影片——《達芬奇密碼》是另一個典型案例——但它可能卻是表明密碼為何如此重要的最佳例證。「十二宮殺手」的一舉一動均涉及「密碼術」,密碼術即隱瞞信息真正含義的藝術。設置密碼的人讓你知道他正在傳遞信息,但除非你擁有解開密碼的鑰匙,否則任憑你絞盡腦汁,也別想搞清楚其中含義。 

●隱寫術英國盛行一時 

密碼術還存在另外一個完整分支——隱寫術,即以掩蓋信息本身意思的方式傳遞真實信息。隱寫的信息看起來並不難,但從中發現真正的意思卻比登天還難。這一類別包括我們並不稱之為密碼的「聰明詭計」,儘管我們可能都對它們的獨創性大為吃驚。在古希臘,希斯泰烏斯為了安全地把指令傳送給米利都的阿里斯塔格魯斯,慫恿他起兵反叛波斯人,想出一個絕妙的主意:他剃光送信人的頭,在頭頂上寫下密信,一待他的頭髮重新長出來,就立即將他派往米利都。 

更快速、更常見的一種隱寫術是將信息隱藏在看似普通的文字當中,如在書中所選字母下面紮孔,它們可以拼出完整的信息內容。在英國,這種做法曾盛行一時,當時寄信在英國價格不菲,但郵局寄送報紙卻是免費的,於是,一些家庭通過在報紙紮上肉眼幾乎看不到的針孔來傳遞信息。另一種方法是,如果你在原始文本上寫字,你可以在文字本身隱藏信息內容。 

英國著名記者斯蒂芬•波拉德曾因其寫的一本傳記而使就業和養老金大臣戴維•布蘭基特的前程毀於一旦,而他本人的光明前途也險些葬送在自己的一條隱寫術信息上。六年前,在作為《每日快報》首席作者的最後歲月裡,波拉德寫了一篇構思精巧的社論,第一個句子的第一個字以字母「f」開頭,第二個句子的第一個字又以字母「u」開頭,明白人一看就知道其中奧妙。這其實是針對《每日快報》老闆理查德•德斯蒙德不懷好意的告別。然而,不幸的是,波拉德的新僱主《泰晤士報》未能發現其有趣之處,結果取消了同他的合約。


●莎翁生日也被拿來做文章 

此類密碼傳遞信息的方式有時也存在令人拍案叫絕的案例,例如隱含在詹姆斯王欽定版《聖經》中信息。詹姆斯王欽定版《聖經》詩篇46中第46個字是「shake」。從詩篇46末尾向後數的第46個字是「spear」。聖詹姆斯版本的《聖經》於1610年出版,那一年是英國大文豪威廉姆•莎士比亞的46歲生日。當時,負責翻譯這部《聖經》的英格蘭知名學者均被要求在書中增加插圖,以向一貫遭到輕視的英格蘭國王詹姆斯一世表示尊重。顯然,有些學者決定將他們對一個真正敬重之人的欽佩之情隱藏在書中。 

另外,愛丁堡南郊羅斯林教堂也同隱寫術有關,據稱雕塑品密碼破譯者宣稱在教堂中發現了一篇加密樂譜。同使用加密謎語相比,古人用隱藏信息的理由更多。一條語序混亂的信息、數字或符號,都會引起懷疑,使一個人陷入麻煩,即便其中秘密未被拆穿。十七世紀英國大作家塞繆爾•佩皮斯就借用加密代碼寫日記,他並不擔心有人發現是在寫日記,不過,確實不希望懷有好奇心的無聊之人知道其中的奧秘。 

●《波拉特》戲耍俄羅斯人 

密碼術隨著無線電的發明而誕生。從第一次世界大戰開始,指揮官主要通過經廣播傳遞的信息與部下聯絡,但敵人輕而易舉便會截獲廣播信號,知道聯絡內容。編碼員的使命便是確保信息能夠為合法接收者快速、輕易地理解。由此,編碼員和破譯員之間產生了新形式的戰鬥,而這種戰鬥總是以破譯員的勝利而告終。 

最常見的密碼術形式是替代法,即字母按照一種秘密形式亂七八糟地排列起來。這通常被證明是男人的一種活動,儘管《卡瑪箴言集》或《印度愛經》建議女性應該予以瞭解,如此一來,便能神不知鬼不覺地行魚水之歡的妙事。無數觀眾在欣賞荒誕電影《波拉特》的時候,清晰地見識了替換密碼術的奇特案例。參與者們用英語高歌之時,出現的卻似乎是俄文字幕,即便對俄羅斯人而言,這些文字也顯得莫名其妙,異常深奧。 

字幕中隱含的信息最終被一名學習西方文化的莫斯科大學生解開。在俄羅斯的電腦鍵盤上,你會發現看上去像拉丁文「u」的西里爾字母,從這個字母中我們似乎會找到字母「q」若隱若現的蹤影,而字母「q」又同字母「y」有相像之處,我們從「y」中似乎又看到「w」的身影。拉丁文字母和西里爾字母就以如此匪夷所思的形式聯繫在一起。導演把一個拉丁文鍵盤安裝到具有西里爾字母書寫方式程序的電腦上,接著敲擊鍵盤,好似他們正在以英語編寫歌曲。若想破譯最終的隱含語,俄羅斯人則必須將西里爾字母鍵盤裝在編有拉丁文書寫程序的電腦上。 

●字母出現頻率是解碼關鍵 

基於字母表的任何密碼的缺點是,每個人破譯者均清楚不同字母以特定語言出現的相對頻率,在一條用英語書寫的信息中,「e」出現的頻率約為八分之一,「t」是十一分之一,「q」是千分之一。如果你掌握每個字母出現的正常頻率,那麼就能解開單碼代替密碼。 

有人曾根據羅伯特•哈里斯有關恩尼格瑪機(Enigma)的小說拍攝了一部電影。恩尼格瑪機是德國科學家研製的電腦,它並不是用一個字母表替代另一個字母表,相反是同時採用17,576替代詞。你要是擁有一台恩尼格瑪機以及提醒你當天正確設置的最新密碼本,恩尼格瑪機發送的信息就會變得淺顯易懂,兩樣東西缺一不可,否則就不可能解讀信息的正確含義。然而,英國白金漢郡的布萊切利公園的專家卻在沒有這兩樣東西的情況成功破譯了恩尼格瑪密碼。他們的成功對盟軍二戰取得勝利立下汗馬功勞。 

當今編碼員採用更為複雜的方法編寫密碼。在他們眼中,恩尼格瑪密碼同128位密碼術相比簡直就是小菜一碟。與此同時,如今的密碼破譯者們手中電腦的運行速度和運算能力也非布萊切利公園技術專家所能比擬。編碼員和破譯員之間的鬥爭仍將繼續下去。但不要擔心,你無需超級計算機也能成功破解某種密碼,你所需要的僅僅是靈活的大腦和一點兒時間。(來源:新浪科技)

Android入門教程(五)之------第一個Android工程HelloAndroid

從這一節我們將正式進入Android編程世界,希望大家多多給我留言以及提些建議.
首先我們打開Eclipse選擇左上方的菜單[File->New->Project->Android Project]雙擊後會出現新建Android工程對話框,如下圖所示:

如果你不知道為什麼這麼填的話,就先模仿我這樣寫,具體會在以後章節中提及,建完工程後,我們會發現HelloAndroid有第四節講的目錄結構如下圖:

我們不在程序裡改動一個代碼,運行這個程序看最後會是什麼樣的結果呢?,首先右擊選擇[Run as->Run Configuration...]出現如下界面:

雙擊Android Application將彈出一個對話框,在Name裡輸入AndroidApplication(隨便輸入),這裡會提示Project不能為空,我們選擇我們要運行的工程名稱,點擊Browse...按鈕,選擇HelloAndroid.然後Apply一下.

當然我們此時點擊Run按鈕時,並不能成功運行程序,這裡我們還要創建一下AVD (Android Virtual Device)任何一個android應用都必須運行在一個AVD裡.我們點擊Target標籤.如下圖所示:

點擊AVD Manager...按鈕會出現如下對話框:

按上圖所示填寫,點擊Create AVD按鈕,我們就成功的創建了一個AVD,以後我們的application程序都會在這個AVD裡跑.創建後如下圖:

AVD 創建完以後我們點擊Run按鈕,此時就會運行虛擬機了,當我等待一段時間(第一次運行虛擬機會有點慢,大家要耐心等待)後,將會出來程序運行的結果,如下圖:

好了這節就到此為止,同志們,我要去睡了,明天還得要上班,今天魏老師火氣大,都流鼻血了,應該早睡的,呵呵,希望能給大家帶來幫助,就是對我最好的回報了!lol~

Android入門教程(四)之------Android工程目錄結構介紹

當我們創建完Android工程如(HelloAndroid)後,展開"Package Explorer"窗口裡的"HelloAndroid"項名稱,可以看見如下目錄結構:

res:放置應用 程序 用到的資源 文件。其包含(Drawable,layout,values等目錄)。當這個目錄下的文件發生變化時,src目錄下面的R.java就會自動發生變化。
assets:主要放置多媒體等數據 文件 。
res/drawable:放置應用到的圖片資源。
res/layout:放置一些與UI相應的佈局文件,都是xml文件。
res/values:放置字符串,顏色,數組等常量數據。
AndroidManifest.xml:相當於應用的配置文件。在此文件裡必須聲明應用的名稱,應用所用到的Activity,Service,Reveiver等。
下一節將講述如何跑起我們的第一個HelloAndroid程序.

Android入門教程(三)之------導入現有Android工程

開啟Android工程
我們開啟Eclipse環境來,在左上方的菜單上,選擇[File->New->Project],會彈出[New Project]對話框.Eclipse是通用的剪輯環境,可根據你所安裝的不同的插件而支持許多種類的工程的創建.點擊[Android]資料夾下的[Android Project]對話框,點選"Browse.."按鈕以選擇[開啟已經存在的工程](Create project from existing source).我們現選擇F盤目錄為[F:/Android/projects]中的HelloAndroid工程[F:/Android/projects/HelloAndroid].
當我們選擇現存的工程時,[New Android Project]對話框中的諸如名稱(Project Name)以及其他內容都會被自動填寫好.這時我們可以按下[Finish]按鈕,完成從現有工程新增到Eclipse環境的動作.
導入Android工程
如果你Android工程已經位於工作環境(WorkSpace)文件夾下,想使用上述方法開啟現有Andriod工程時,會得到欲開啟的工程已在工作目錄下的警告.因此我們得用另一個方法:導入工程.
在Eclipse左上方的菜單上,選擇[File->Import]選項,會彈出[import]對話框.選擇[General->Existing Projects into WorkSpace]項目,然後按下[Next]按鈕到新一個畫面.在[Select Root Directory]欄位旁,按下右方的[Browse...]按鈕,選擇對應的工程.選擇好後,按下[Finish]按鈕完成從現在存的工作環境(WorkSpace)資料夾下的工程導入到Eclipse環境的動作.
不同SDK版本的範例工程會放在[andriod_sdk/plateforms/android-版本/samples]目錄中,請自行根據要開發的版本選擇範例.
切換SDK版本
Android在SDK1.5版之後引入了支援多個版本SDK模擬器的新特性,讓我們得以透過修改屬性設定畫面的設定,來切換用來編譯與運行這些工程的目標SDK版本.
在[Navigator]的[HelloAndroid]文件夾下點擊右鍵,選擇[properties]選項,會開啟工程屬性設定界面.
在設定畫面中先選擇左方的Android標籤,選擇後會出現可勾選的[Project Build Target]選單.
在選單中選擇適當的目標版本,選擇之後按下OK結束設定畫面,這時工程就切換成可使用目標版本編譯的狀態了.

Android入門教程(二)之------環境搭建

Android 操作系統頂著 Google 與 Open Handset Alliance 的光環,讓很多程序員在 Android 手機還沒上市之前,就開始緊追著官方文檔, Early SDK 版本更新,這是 IT 業界罕見的現象,因為大家都抱著 」 不想輸在起跑線上「 的心態,這也是手機發展的歷史,第一次有機會讓所有的程序員站在同一個起跑 開始,無論是 Java World 論壇,或是 Google 官方的 Developer Dicussion Group 都能見到相當熱烈的討論。
同志們 3G 時代到來了,對於我們來說,是一個新的機遇,所以我們也不要輸在起跑線上哦,廢話不多說了,讓我們開始搭建 Android 環境吧!


第一步 :
準備就緒之後,就可以前往 Android 官方網站 (http://developer.Android.com/ ) 下載 Android SDK, 也可以到(http://Androidappdocs.appspot.com ) 去下載,如下圖所示。


下載後的 Android SDK 為壓縮文件, 請將它解壓到磁盤中,例如我解壓到下面的文件夾:
F:/android-sdk-1.5_r2
第二步 :
然後在環境變量中 Path 後面添加 ;F:/android-sdk-1.5_r2/tools, 如下圖所示 :

第三步 :

Eclipse 編譯 IDE 環境中,需要安裝 ADT(Android Development Tools)Plug-in, 這是 Android 的開發工具,啟動 Eclipse 後,請運行 」Help->Software Updates->Available Software->Add Site
輸入 ADT plug-in 網址後 (http://dl-ssl.google.com/android/eclipse/) ,如下圖所示 :

勾選我們所輸入的地址,然後點擊 Install 按鈕如下圖所示 :

ADT 安裝就大功告成。
第四步:
ADT 插件安裝後,選擇 Eclipse 菜單欄中 」Window->Preferences」 彈出的頁面中多了 Android 一項,我們點擊 Android 把 Android SDK 應用進來,點擊 Browse 按鈕,如下圖所示, Apply 一下, OK 完成!

下面我們就可以建立 Android 工程了, File->New->Android Project 如下圖所示:

好了今天就至此為止 ,Android 的第一個程序 HelloAndroid 將在下講進行。謝謝大家!

Android入門教程(一)之前言------Android應用開發入門五問


前言(一)之------Android應用開發入門五問

1. Android是什麼?
Android 是Google開發的基於Linux平台的開源手機操作系統。它包括操作系統、用戶界面和應用程序 —— 移動電話工作所需的全部軟件,而且不存在任何以往阻礙移動產業創新的專有權障礙。谷歌與開放手機聯盟合作開發了 Android,這個聯盟由包括中國移動、摩托羅拉、高通、宏達和 T-Mobile 在內的 30 多家技術和無線應用的領軍企業組成。
Android 作為谷歌企業戰略的重要組成部分,將進一步推進"隨時隨地為每個人提供信息"這一企業目標的實現。

2. Android用什麼語言開發的?
Android的SDK(software development kit)是Java的,將來可能有其他語言版本。

3. Android模擬器是用什麼開發的?
Android的核心是Java虛擬機,為了高效,目前來看,google是不會支持其它語言的開發的。不過,android的模擬器是用qeum開發的,它的鏡像文件分成4部分放在tools目錄下,如果我們將qeum修改一下,說不定能玩一下它的linux系統。

4. 怎麼進行Android開發
Android支持在模擬器上運行和調試應用軟件,有興趣的朋友可以下載他的SDK(software development kit)來瞭解android的界面;然後應該學習android的基本框架和應用程序的構成;最後就可以試著在sdk的API Demo的基礎上開發自己的application了。
希望剛剛瞭解軟件開發的朋友不要著急,一步一個腳印,一定會茁壯成長,開發優秀的application的。

5. 有哪些好的網絡資源可供Android學習者用的呢?
首先,最好的最基本的學習資料無疑是SDK的文檔了,也就是這個地方
http://code.google.com/intl/zh-CN/android/documentation.html )的介紹,它循序漸進的介紹了Android的各個方面。

其次,大家可能有對android文檔不太理解的地方,或者自己的想法等等,完全可以通過下面的groups進行諮詢和交流:
◆Android Beginner    http://groups.google.com/group/android-beginners
◆Developper Groups   http://groups.google.com/group/android-developers
◆Android Internals   http://groups.google.com/group/android-internals
◆Android Porting     http://groups.google.com/group/android-porting