概述及环境搭建
前言
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-libraryandroid:name="android.test.runner"/>,它必须位于<application>元素体内。是<application>的子元素。
2.
3. <instrumentationandroid:name="android.test.InstrumentationTestRunner"
4.
5. android:targetPackage="cn.itcast.action"android:label="TestsforMyApp"/>
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. <?xmlversion="1.0"encoding="utf-8"?>
2.
3.
4.
5. <resources>
6.
7. <stringname="hello">HelloWorld,FileRW!</string>
8.
9. <stringname="app_name">文件读写</string>
10.
11. <stringname="file_name">文件名</string>
12.
13. <stringname="file_content">文件内容</string>
14.
15. <stringname="button_file_save">保存</string>
16.
17. <stringname="button_file_read">读取</string>
18.
19. <stringname="file_save_success">保存文件成功</string>
20.
21. <stringname="file_save_failed">保存文件失败</string>
22.
23. <stringname="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状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。
一款应用应该根据自身提供的功能,要求合理的权限。用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。如一款应用是不带广告的单机版,也没有任何附加内容需要下载,那么它要求访问网络的权限就比较可疑。