android概述和環境搭建

 

概述及環境搭建

 

前言

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%。

中文名:

安卓、安致

外文名:

Android

開發商:

Google/開放手持設備聯盟

發行商:

Google

發行時間:

2008年9月23日

編程語言:

C/C++(底層) Java等(應用層)

源碼模式:

混合(自由免費,開放源碼)

包類型:

APK

支持平臺:

ARMMIPSx86

內核類:

整塊性核心(Linux)

目錄

名稱來源

內置服務

開放手持設備聯盟

版本記錄

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”,指在讓用戶利用移動電話或其他移動設備使用谷歌搜索、谷歌地圖GmailYouTubeAndroid 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
Cupcake
(紙杯蛋糕)

2009年4月30日,官方1.5版本(Cupcake 紙杯蛋糕)的Android發佈。主要的更新如下:
1、拍攝/播放影片,並支持上傳到Youtube
2、支持立體聲藍牙耳機,同時改善自動配對性能
3、最新的採用WebKit技術的瀏覽器,支持複製/貼上和頁面中搜索
4、GPS性能大大提高
5、提供屏幕虛擬鍵盤
6、主屏幕增加音樂播放器和相框widgets
7、應用程序自動隨着手機旋轉
8、短信、Gmail、日暦,瀏覽器的用戶接口大幅改進,如Gmail可以批量刪除郵件
9、相機啓動速度加快,拍攝圖片可以直接上傳到Picasa
10、來電照片顯示

Android 1.6
Donut
(甜甜圈)

2009年9月15日,1.6(Donut 甜甜圈)版本軟件開發工具包發佈。主要的更新如下:
1、重新設計的Android Market手勢
2、支持支持CDMA網絡
3、文字轉語音系統(Text-to-Speech)
4、快速搜索框
5、全新的拍照接口
6、查看應用程序耗電
7、支持虛擬私人網絡(VPN)
8、支持更多的屏幕分辨率。
9、支持OpenCore2媒體引擎
10、新增面向視覺或聽覺困難人羣的易用性插件

Android2.0/2.0.1/2.1
Eclair
(鬆餅)

2009年10月26日,2.0(Eclair 鬆餅)版本軟件開發工具包發佈。主要的更新如下:
1、優化硬件速度
2、"Car Home"程序
3、支持更多的屏幕分辨率
4、改良的用戶界面
5、新的瀏覽器的用戶接口和支持HTML5
6、新的聯繫人名單
7、更好的白色/黑色背景比率
8、改進Google Maps3.1.2
9、支持Microsoft Exchange
10、支持內置相機閃光燈
11、支持數碼變焦
12、改進的虛擬鍵盤
13、支持藍牙2.1
14、支持動態桌面的設計

Android 2.2/2.2.1
Froyo
(凍酸奶)

2010年5月20日,2.2(Froyo 凍酸奶)版本軟件開發工具包發佈。主要的更新如下:
1、整體性能大幅度的提升
2、3G網絡共享功能。
3、Flash的支持。
4、App2sd功能。
5、全新的軟件商店。
6、更多的Web應用API接口的開發。

Android 2.3
Gingerbread
(薑餅)

2010年12月7日,2.3(Gingerbread 薑餅)版本軟件開發工具包發佈。主要的更新如下:
1、增加了新的垃圾回收和優化處理事件
2、原生代碼可直接存取輸入和感應器事件、EGL/OpenGL ES、OpenSL ES。
3、新的管理窗口和生命週期的框架。
4、支持VP8和WebM視頻格式,提供AAC和AMR寬頻編碼,提供了新的音頻效果器
5、支持前置攝像頭、SIP/VOIP和NFC(近場通訊)
6、簡化界面、速度提升:
7、更快更直觀的文字輸入:
8、一鍵文字選擇和複製/粘帖:
9、改進的電源管理系統:
10、新的應用管理方式:


Android 3.0
Honeycomb
(蜂巢)

2011年2月2日, 3.0(Honeycomb 蜂巢)版本主要更新如下:
·優化針對平板
·全新設計的UI增強網頁瀏覽功能
·n-app purchases功能

Android 3.1
Honeycomb
(蜂巢)

2011年5月11日在Google I/O開發者大會宣佈發佈,版本主要更新如下:
Honeycomb蜂巢(改進3.0BUG)
經過優化的Gmail電子郵箱;
全面支持GoogleMaps
將Android手機系統跟平板系統再次合併從而方便開發者。
任務管理器可滾動,支持USB 輸入設備(鍵盤、鼠標等)。
支持 Google TV.可以支持XBOX 360無線手柄
widget支持的變化,能更加容易的定製屏幕widget插件。


Android 3.2
Honeycomb
(蜂巢)

2011年7月13日發佈,版本更新如下:
支持7英寸設備
引入了應用顯示縮放功能


Android 4.0
Ice Cream Sandwich
(冰激凌三明治)

2011年10月19日 在香港發佈,
4.0(Ice Cream Sandwich 冰激凌三明治)版本主要更新如下:
1、全新的ui
2、全新的Chrome Lite瀏覽器,有離線閱讀,16標籤頁,隱身瀏覽模式等。
3、截圖功能
4、更強大的圖片編輯功能
5、自帶照片應用堪比Instagram,可以加濾鏡、加相框,進行360度全景拍攝,照片還能根據地點來排序
6、Gmail加入手勢、離線搜索功能,UI更強大。
7、新功能People:以聯繫人照片爲核心,界面偏重滑動而非點擊,集成了Twitter、Linkedin、Google+等通訊工具。有望支持用戶自定義添加第三方服務。
8、新增流量管理工具,可具體查看每個應用產生的流量。
9、正在運行的程序可以像電腦一樣的互相切換
10、人臉識別功能
11、系統優化、速度更快
12、支持虛擬按鍵,手機可以不再擁有任何按鍵
13、更直觀的程序文件夾:
14、平板電腦和智能手機通用
15、支持更大的分辨率
16、專爲雙核處理器編寫的優化驅動
17、全新的18、增強的複製粘貼功能
19、語音功能
20、全新通知欄:
21、更加豐富的數據傳輸功能
22、更多的感應器支持
23、語音識別的鍵盤:
24、全新的3D驅動, 遊戲支持能力提升
25、全新的谷歌電子市場
26、增強的桌面插件自定義


Android N.n
Jelly Bean
“果凍豆”

繼“冰激凌三明治”之後的下一版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來使用其他各種腳本語言進行編程(如:pythonluatclphp等等),還有其他諸如:Qt(qt for android)、Mono(mono for android)等一些著名編程框架也開始支持Android編程,甚至通過MonoDroid,開發者還可以使用C#作爲編程語言來開發應用程序。另外,谷歌還在2009年特別發佈了針對初學者的Android Simple語言,該語言類似Basic語言。而在網頁編程語言方面,JavaScriptajax,HTML5,jquerysencha、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狀態、避免手機待機、修改系統全局設置、讀取同步設定、開機自啓動、重啓其他應用、終止運行中的應用、設定偏好應用、震動控制、拍攝圖片等。

  一款應用應該根據自身提供的功能,要求合理的權限。用戶也可以分析一款應用所需權限,從而簡單判定這款應用是否安全。如一款應用是不帶廣告的單機版,也沒有任何附加內容需要下載,那麼它要求訪問網絡的權限就比較可疑。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章