概述及環境搭建
前言
1> 搭建Android開發環境
2> 創建與啓動手機模擬器
屏幕分辨率
HVGA:320×480
QVGA:240x320
WQVGA400:240X400
WQVAG432:240X432
WVGA800: 480X800
WVGA854: 480X854
3> 學習使用ANDROID操作系統
桌面、電話拔號器、聯繫人(通信錄)、
4> 開發與運行(卸載)第一個ANDROID應用
5> 項目的目錄結構
src/ java原代碼存放目錄
gen/ 自動生成目錄
gen 目錄中存放所有由Android開發工具自動生成的文件。目錄中最重要的就是R.java文件。 這個文件由Android開發工具自動產生的。Android開發工具會自動根據你放入res目錄的xml界面文件、圖標與常量,同步更新修改R.java文件。正因爲R.java文件是由開發工具自動生成的,所以我們應避免手工修改R.java。R.java在應用中起到了字典的作用,它包含了界面、圖標、常量等各種資源的id,通過R.java,應用可以很方便地找到對應資源。另外編繹器也會檢查R.java列表中的資源是否被使用到,沒有被使用到的資源不會編繹進軟件中,這樣可以減少應用在手機佔用的空間。
res/ 資源(Resource)目錄
在這個目錄中我們可以存放應用使用到的各種資源,如xml界面文件,圖片或數據。具體請看ppt下方備註欄。
Drawable:可以在其中放置一個圖片查看R文件中是否發生變化,生成了新文件的資源信息。
Values:放置程序中使用到的字符串,一般放在strings.xml中,但是也可以寫自己的文件,只有遵循對應的約束即可。這樣可以更方便的實現國際化和代碼複用,節約內存。
演示創建新的字符串資源,觀察R.java文件變化。
Layout:MVC架構中的V層,類似於web項目中的html等
6> 項目清單文件分析
AndroidManifest.xml 功能清單文件
這個文件列出了應用程序所提供的功能,在這個文件中,你可以指定應用程序使用到的服務(如電話服務、互聯網服務、短信服務、GPS服務等等)。另外當你新添加一個Activity的時候,也需要在這個文件中進行相應配置,只有配置好後,才能調用此Activity。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.life" <!-- 當前應用所在包 --> android:versionCode="1" android:versionName="1.0">
<!-- @:次標記可以理解爲讀取R.java中的資源 --> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!-- 用以描述一個activity .MainActivity中的“.”意思是當前包路徑下的MainActivity,此時可以省略 必須是上面package中所生明的路徑,或其下面的子路徑 如果是多級路徑,“.”不能省略,如.sub.MainActivity --> <activity android:name=".MainActivity" android:label="@string/app_name"> <!-- 意圖過濾器:安裝android應用時系統讀取此信息 下面的信息用以聲明當前應用的啓動activity,它會被系統顯示在程序菜單欄中 , 如果是其它意圖,可以修改爲別的內容 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
<!-- 另外兩個activity --> <activity android:name=".OtherActivity" /> <activity android:name=".ThreeActivity" android:theme="@android:style/Theme.Dialog"/> </application> <uses-sdk android:minSdkVersion="8" /> </manifest> |
default.properties 項目環境信息,一般是不需要修改此文件
開發android時,控制檯只能查看軟件安裝期間發生的問題或信息,軟件運行時的信息需要通過日誌查看。
演示日誌查看器的使用,解釋log級別,及日誌過濾器的添加刪除
Android screen monitor:實現真機屏幕與pc同步
在文檔中查看權限:reference——android——Manifest.permission
短信發送亂碼:模擬器bug
佈局:dev guid —————common layout
Android的單元測試
一、Android的單元測試
所以首先應該學習Android的單元測試。在Android工程中添加單元測試的方法:
1.向androidManifest.xml加入:
Java代碼:
Java代碼
1. <uses-library android:name="android.test.runner" />,它必須位於<application>元素體內。是<application>的子元素。
2.
3. <instrumentation android:name="android.test.InstrumentationTestRunner"
4.
5. android:targetPackage="cn.itcast.action" android:label="Tests for My App" />
6.
7. </application> 與<application>元素並列,是<application>元素的兄弟元素。這裏的targetPackage必須是我們創建工程時指定的包名。
2.單元測試類
我們的單元測試類,必須繼承自AndroidTestCase類。
3.單元測試方法
單元測試方法必須以test開頭
4.方法拋出異常
方法要throws Throwable異常,Throwable是Exception的父類,單元測試框架捕獲Throwable。
5.調用測試
在outline面板或方法名上右鍵,Run AS Android Junit Test。
6.打印信息
在android中不能使用System.out.println()打印信息,但我們可以使用Android爲我們提供的Log類來打印信息。可以使用Log.i打開info信息、使用Log.e打印error信息、使用Log.d打印調試信息...。
7.查看打印的信息
因爲我們安裝了ADT插件,所以選擇菜單windows->Show View->Other...->Android->LogCat,打開 LogCat面板。在這個面板中我們可以看到Android輸出的所有信息。
但我們只想查看我們自己輸出的信息怎麼辦呢?面板的右上角有個+號,使用它可以創建一個過濾器。比如我們輸入一個info信息調用Log.i(tag,”Hello Android!”),tag是信息的標籤,一般使用類名。創建過濾器,將Filter Name和by Log Tag都設置爲我的們的tag ,OK。它爲我們創建了一個新的以tag名稱的分頁,在這個分頁中我們可以查看過濾出來的信息。
在LogCat面板中還有V、D、I、W、E五個選擇按鈕,從右向左依次包含。比如我們選擇D,那麼下面的面板將只顯示D、I、W這三類信息。
編輯strings.xml文件內容:
Java代碼:
複製到剪貼板 Java代碼
1. <?xml version="1.0" encoding="utf-8"?>
2.
3.
4.
5. <resources>
6.
7. <string name="hello">Hello World, FileRW!</string>
8.
9. <string name="app_name">文件讀寫</string>
10.
11. <string name="file_name">文件名</string>
12.
13. <string name="file_content">文件內容</string>
14.
15. <string name="button_file_save">保存</string>
16.
17. <string name="button_file_read">讀取</string>
18.
19. <string name="file_save_success">保存文件成功</string>
20.
21. <string name="file_save_failed">保存文件失敗</string>
22.
23. <string name="file_read_failed">讀取文件失敗</string>
24.
25. </resources>
android
百科名片
Android
Android是一種以Linux爲基礎的開放源碼操作系統,主要使用於便攜設備。目前尚未有統一中文名稱,中國大陸地區較多人使用安卓(非官方)或安致(官方)。Android操作系統最初由Andy Rubin開發,最初主要支持手機。2005年由Google收購注資,並組建開放手機聯盟開發改良,逐漸擴展到平板電腦及其他領域上。Android的主要競爭對手是蘋果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。 2011年11月數據,Android佔據全球智能手機操作系統市場52.5%的份額,中國市場佔有率爲58%。
|
|
目錄
1.命名規則
2.發行版本
1.應用程序(部分)
2.中介軟件
3.硬件抽像層
4.內核
5.安全權限機制
1.命名規則
2.發行版本
1.應用程序(部分)
2.中介軟件
3.硬件抽像層
4.內核
5.安全權限機制
展開
Android一詞最早出現於法國作家利爾亞當(Auguste Villiers de l'Isle-Adam)在1886年發表的科幻小說《未來夏娃》(L'ève future)中。他將外表像人的機器起名爲Android。
谷歌移動服務(英文:Google Mobile Service)是谷歌的一項服務,該服務簡稱“GMS”,指在讓用戶利用移動電話或其他移動設備使用谷歌搜索、谷歌地圖、Gmail、YouTube、Android Market等谷歌服務產品。
谷歌將谷歌移動服務(GMS)內嵌到Android手機系統中,並且對android手機生產商給予不同程度的授權。
GMS是Android操作系統的靈魂,大部分用戶使用Android手機,其實就是爲了使用谷歌服務。
開放手持設備聯盟(Open Handset Alliance)是美國Google公司於2007年11月5日宣佈組建的一個全球性的聯盟組織。這一聯盟將支持Google發佈的手機操作系統或者應用軟件,共同開發Android系統的開放源代碼。開放手持設備聯盟包括手機制造商、手機芯片廠商和移動運營商。
Android 用甜點作爲它們系統版本的代號的命名方法開始於 Andoird 1.5 發佈的時候。作爲每個版本代表的甜點的尺寸越變越大,然後按照26個字母數序:紙杯蛋糕,甜甜圈,鬆餅,凍酸奶,薑餅,蜂巢,冰激凌三明治
版本 |
備註 |
Android1.1 |
2008 年9月發佈的Android第一版 |
Android 1.5
|
2009年4月30日,官方1.5版本(Cupcake 紙杯蛋糕)的Android發佈。主要的更新如下: |
Android 1.6
|
2009年9月15日,1.6(Donut 甜甜圈)版本軟件開發工具包發佈。主要的更新如下:
|
Android2.0/2.0.1/2.1 |
2009年10月26日,2.0(Eclair 鬆餅)版本軟件開發工具包發佈。主要的更新如下: |
Android 2.2/2.2.1
|
2010年5月20日,2.2(Froyo 凍酸奶)版本軟件開發工具包發佈。主要的更新如下: |
Android 2.3
|
2010年12月7日,2.3(Gingerbread 薑餅)版本軟件開發工具包發佈。主要的更新如下: |
|
2011年2月2日, 3.0(Honeycomb 蜂巢)版本主要更新如下: |
Android 3.1
|
2011年5月11日在Google I/O開發者大會宣佈發佈,版本主要更新如下: |
|
2011年7月13日發佈,版本更新如下: |
|
2011年10月19日 在香港發佈, |
|
繼“冰激凌三明治”之後的下一版Android系統。 |
2005年事件
Google收購了成立僅22個月的高科技企業Android。
2007年事件
11月5日,Google公司正式向外界展示Android操作系統。
11月5日,Google與34家手機制造商、軟件開發商、電信運營商和芯片製造商共同創建開放手持設備聯盟。
2008年事件
5月28日,Patrick Brady於Google I/O大會上提出Android HAL架構圖。
8月18日,Android獲得美國聯邦通信委員會的批准。
9月22日,谷歌正式對外發布第一款Android手機——HTC G1。
9月23日,谷歌發佈Android1.0。
9月24日,全球業界都表示不看好Android操作系統,並且聲稱最多1年,Android就會被Google關閉。
2009年事件
4月30日,Android1.5正式發佈。
5月10日,HTC G1和HTC G2市場大賣,成爲僅次於iPhone的熱門機型。
9月25日,Android1.6正式發佈。
9月29日,HTC Hero G3廣受歡迎,成爲全球最受歡迎的機型。
10月28日,Android 2.0 智能手機操作系統正式發佈。
11月10日,由於Android的火熱,Android平臺出現第一個惡意間諜軟件:Mobile Spy,該程序會自動記錄用戶所輸入的任何信息併發送到黑客的郵箱中,還可以視頻錄下用戶的所有操作過程。
2010年事件
1月7日,Google發佈了旗下第一款自主品牌手機:Nexus one(HTC G5)。
1月,谷歌與Linux基金會就谷歌修改了Linux內核而產生了矛盾。
2月3日,Linux內核開發者Greg Kroah-Hartman將Android的驅動程序從Linux內核“狀態樹”上除去,從此,Android與Linux開發分道揚鑣。
5月19日,Google正式對外發布Android2.2智能操作系統。
5月20日,Google對外正式展示了搭載Android系統的智能電視-Google TV,該電視爲全球首臺智能電視。
7月1日,Google宣佈正式與雅虎、亞馬遜合作,並且在Android上推出多項Kindle服務和雅虎服務。
7月9日,美國NDP集團調查顯示,Android系統已佔據了美國手機市場28%的份額,全球17%的市場份額。
8月12日,Android平臺出現第一個木馬病毒:Trojan-SMS.AndroidOS.FakePlayer.a,該木馬病毒會僞裝成應用程序,當用戶不小心安裝之後,它便會瘋狂地發送短信,使用戶的手機開通高額的收費服務。
9月,Android應用數量超過9萬個。
9月21日,Google對外公佈數據,每日銷售的Android設備的新用戶數達到20萬。
10月26日,Google宣佈Android達到第一個里程碑:電子市場上的Android應用數量達到10萬個。
12月7日,Google正式發佈Android2.3操作系統。
2011年事件
1月,Android應用數量超過20萬。
1月,Google對外公佈數據,每日Android設備的新用戶數達到30萬。
2月2日,Android3.0正式發佈。
6月,Android在日本的智能手機操作系統市場佔有率達到57%。
7月,Android在歐洲的智能手機操作系統市場佔有率達到了22.3%
7月,Google對外公佈數據,Android每天的新用戶達到55萬,Android設備用戶總數達1.35億。
8月,谷歌收購摩托羅拉移動。
8月2日,Android手機已佔據全球智能機市場48%的份額,並在亞太地區市場佔據統治地位,終結了Symbian(塞班系統)的霸主地位,躍居全球第一。
8月,Android在韓國的智能手機操作系統市場佔有率達到了95%。
8月,Android系統在35個國家市場佔有率第一,平均市場佔有率達到48%。
8月,Android系統成爲亞太地區第一大系統,市場佔有率爲亞太地區第一大。
9月,數據顯示,Android應用數目已經達到48萬。
9月,Android在美國的智能手機操作系統市場佔有率達到43%。
10月19日,谷歌正式發佈Android 4.0操作系統。
11月15日,Android在中國大陸的智能手機操作系統市場佔有率達到了58%。
11月18日,美國NPD數據顯示,Android和iOS平臺上的遊戲佔有率都首度超過任天堂的DS掌機和索尼的PSP掌機,手機遊戲玩家也超過了掌機玩家,遊戲開發商更傾向於向Android和iOS手機上開發遊戲。
11月18日,谷歌報告顯示,通過谷歌服務器激活的Android設備用戶總數已經超過2億,每天通過谷歌服務器激活的新用戶數超過55萬,而這僅僅是通過谷歌服務器激活的用戶設備數。
Android是以Linux爲核心的手機操作平臺,作爲一款開放式操作系統,隨着Android的快速發展,如今已允許開發者使用多種編程語言來開發Android應用程序,而不再是以前只能使用Java開發Android應用程序的單一局面,因而受到衆多開發者的歡迎,成爲真正意義上的開發式操作系統。
在Android中,開發者可以使用Java作爲編程語言來開發應用程序,也可以通過NDK使用C/C++作爲編程語言來開發應用程序,也可使用SL4A來使用其他各種腳本語言進行編程(如:python、lua、tcl、php等等),還有其他諸如:Qt(qt for android)、Mono(mono for android)等一些著名編程框架也開始支持Android編程,甚至通過MonoDroid,開發者還可以使用C#作爲編程語言來開發應用程序。另外,谷歌還在2009年特別發佈了針對初學者的Android Simple語言,該語言類似Basic語言。而在網頁編程語言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已經支持Android開發。
而在Android系統底層方面,Android使用C/C++作爲開發語言。
Java開發方面
Android支持使用Java作爲編程語言來開發應用程序,而Android的Java開發方面從接口到功能,都有層出不窮的變化。考慮到Java虛擬機的效率和資源佔用,谷歌重新設計了Android的Java,以便能提高效率和減少資源佔用,因而與J2ME等不同。
Android結構
其中Activity等同於J2ME的MIDlet,一個 Activity 類(Class)負責創建視窗(Windows),一個活動中的Activity就是在 foreground(前景)模式,背景運行的程序叫做Service。兩者之間通過由ServiceConnection和AIDL連結,達到複數程序同時運行的效果。如果運行中的 Activity 全部畫面被其他 Activity 取代時,該 Activity 便被停止(Stopped),甚至被系統清除(Kill)。
View等同於J2ME的Displayable,程序人員可以通過 View 類與“XML layout”檔將UI放置在視窗上,Android 1.5的版本可以利用 View 打造出所謂的 Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout,HTC的Android Hero手機即含有大量的widget。至於ViewGroup 是各種layout 的基礎抽象類(abstract class),ViewGroup之內還可以有ViewGroup。View的構造函數不需要再Activity中調用,但是Displayable的是必須的,在Activity 中,要通過findViewById()來從XML 中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關,兩者之間通過Listener 結合在一起,每一個View都可以註冊一個event listener,例如:當View要處理用戶觸碰(touch)的事件時,就要向Android框架註冊View.OnClickListener。另外還有Image等同於J2ME的BitMap。
C/C++開發方面
早期的Android開發只支持Java作爲編程語言開發應用程序,因而使得其他語言開發者只能望而卻步。2010年4月,谷歌正式對開發者發佈了Android NDK,NDK允許開發者使用C/C++作爲編程語言來爲Android開發應用程序,初版的NDK使得開發者看到了C/C++在Android開發中的希望。
但是,當前版本的NDK在功能上還有很多侷限性:NDK並沒有提供對應用程序生命週期的維護;NDK也不提供對Android系統中大量系統事件的支持;對於作爲應用程序交互接口的UI API,當前版本的NDK中也沒有提供。但是相對於初版的NDK,現在的NDK已經進行了許多重大的功能改進。
由此可見,NDK仍然需要完善和發展,相信未來隨着NDK的發展,NDK可以做得更多更好。
操作系統與應用程序的溝通橋樑,應用分爲兩層:函數層(Library)和虛擬機(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到屏幕上。Android使用工具鏈(Toolchain)爲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類(Column)取得共用數據庫。
Android的中間層多以Java 實現,並且採用特殊的Dalvik 虛擬機(Dalvik Virtual Machine)。Dalvik虛擬機是一種“暫存器型態”(Register Based)的Java虛擬機,變量皆存放於暫存器中,虛擬機的指令相對減少。
Dalvik虛擬機可以有多個實例(instance), 每個Android應用程序都用一個自屬的Dalvik虛擬機來運行,讓系統在運行程序時可達到優化。Dalvik 虛擬機並非運行Java字節碼(Bytecode),而是運行一種稱爲.dex格式的文件。
Android 的 HAL(硬件抽像層)是能以封閉源碼形式提供硬件驅動模塊。HAL 的目的是爲了把 Android framework 與 Linux kernel 隔開,讓 Android 不至過度依賴 Linux kernel,以達成 kernel independent 的概念,也讓 Android framework 的開發能在不考量驅動程序實現的前提下進行發展。
HAL stub 是一種代理人(proxy)的概念,stub 是以 *.so 檔的形式存在。Stub 向 HAL“提供”操作函數(operations),並由 Android runtime 向 HAL 取得 stub 的 operations,再 callback 這些操作函數。HAL 裏包含了許多的 stub(代理人)。Runtime 只要說明“類型”,即 module ID,就可以取得操作函數。
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工作的一個工具。
Android本身是一個權限分立的操作系統。在這類操作系統中,每個應用都以唯一的一個系統識別身份運行(Linux用戶ID與羣組ID)。系統的各部分也分別使用各自獨立的識別方式。Linux就是這樣將應用與應用,應用與系統隔離開。
系統更多的安全功能通過權限機制提供。權限可以限制某個特定進程的特定操作,也可以限制每個URI權限對特定數據段的訪問。
Android安全架構的核心設計思想是,在默認設置下,所有應用都沒有權限對其他應用、系統或用戶進行較大影響的操作。這其中包括讀寫用戶隱私數據(聯繫人或電子郵件),讀寫其他應用文件,訪問網絡或阻止設備待機等。
安裝應用時,在檢查程序簽名提及的權限,且經過用戶確認後,軟件包安裝器會給予應用權限。從用戶角度看,一款Android應用通常會要求如下的權限:
撥打電話、發送短信或彩信、修改/刪除SD卡上的內容、讀取聯繫人信息、讀取日程信息,寫入日程數據、讀取電話狀態或識別碼、精確的(基於GPS)地理位置、模糊的(基於網絡獲取)地理位置、創建藍牙連接、對互聯網的完全訪問、查看網絡狀態,查看WiFi狀態、避免手機待機、修改系統全局設置、讀取同步設定、開機自啓動、重啓其他應用、終止運行中的應用、設定偏好應用、震動控制、拍攝圖片等。
一款應用應該根據自身提供的功能,要求合理的權限。用戶也可以分析一款應用所需權限,從而簡單判定這款應用是否安全。如一款應用是不帶廣告的單機版,也沒有任何附加內容需要下載,那麼它要求訪問網絡的權限就比較可疑。