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状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。

  一款应用应该根据自身提供的功能,要求合理的权限。用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。如一款应用是不带广告的单机版,也没有任何附加内容需要下载,那么它要求访问网络的权限就比较可疑。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值