手机软件开发之Android程序开发.docx
- 文档编号:24083058
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:24
- 大小:772.34KB
手机软件开发之Android程序开发.docx
《手机软件开发之Android程序开发.docx》由会员分享,可在线阅读,更多相关《手机软件开发之Android程序开发.docx(24页珍藏版)》请在冰豆网上搜索。
手机软件开发之Android程序开发
手机软件开发之Android程序开发
1手机软件的运行环境
1.1概述
手机可以被看作袖珍的计算机。
它有CPU、存储器(flash、RAM)、输入输出设备(键盘、显示屏、USB和串口)。
它还有一个更重要的I/O设备,那就是空中接口。
手机通过空中接口协议(例如GSM、CDMA、PHS等)和基站通信,既可以传输语音、也可以传输数据。
手机的CPU一般不是独立的芯片,而是基带处理芯片的一个单元,也称作CPU核。
基带处理芯片是手机的核心,它不仅包含CPU核、DSP核这些比较通用的单元,还包含通信协议处理单元。
通信协议处理单元和手机协议软件一起完成空中接口要求的通信功能。
随着芯片技术的不断发展,越来越多的外围电路可以被集成到基带处理芯片中,例如BAP,即基带模拟处理器。
这样手机才可能越做越小、越做越便宜。
1.2单CPU和双CPU
很多手机只有一个CPU,也就是基带处理芯片中的CPU核。
在这个CPU上既要跑通信协议,又要实现用户界面(称作UI或MMI)。
当然DSP会分担一些计算量繁重的工作,例如语音编解码、安全层的各种算法等。
在市场推动下,手机功能在不断发展。
摄像头、MP3、蓝牙这些功能可以依靠硬件,对CPU的压力还不是很大,但java虚拟机、嵌入式浏览器等应用软件就会对CPU资源有较高的要求。
单CPU的首要任务是完成通信协议。
通信协议软件有着很精确的定时要求,如果这个CPU还要兼顾很多应用软件的话,就难免吃力。
于是双CPU手机应运而生。
顾名思义,双CPU手机就是有两个CPU的手机,一个CPU专心把通信协议做好,另一个CPU负责UI、java虚拟机、嵌入式浏览器等应用功能。
两个CPU可以做在一个芯片里面,也可以分开。
市场上的实际情况是,很多手机设计公司(DesignHouse)没有基带处理芯片的开发能力,他们购买国外公司的手机模块,自己在外面再加一块CPU。
模块跑通信协议,自己加的CPU跑UI和应用软件,两者通过串行口通信。
很多DesignHouse也会购买国外方案商的开发板级方案,自己做PCB、软件上改改UI和外设驱动。
市场上的智能手机基本上全是双CPU方案,什么WindowsCE、SmartPhone、WindowsMobile、Symbian、嵌入式Linux全是运行在第二块CPU上的。
这些商业操作系统无法和无线通信协议软件集成到一块CPU上。
双CPU的手机功能比较多,但它们一般体积大,耗电多,成本高。
现在市场上的大部分手机还是单CPU的。
目前的大部分手机应用,例如Java、BREW、WAP、邮件、摄像头、闪存、MP3、蓝牙,在单CPU方案里都能实现。
我认为不管3G、4G如何发展,小巧、实用、低成本的单CPU方案总会占据较大的市场份额。
微软在单CPU方案的手机市场还没有立足之地,又怎么谈的上什么引领方向呢?
本文主要介绍单CPU手机,大多数论述也适用于双CPU方案的通信CPU。
1.33G和4G
3G和4G是指第三代、第四代无线通信技术,对手机而言,它们改进的是空中接口的效率,空中接口能以更大的带宽传送数据。
通过手机无线上网的速度会更快。
这和话音业务、手机应用软件没有直接的联系。
当然,手机的嵌入式数据业务由于更高的带宽,会产生更多的可能性。
不过这些可能性的实现还是会受到手机输入慢、显示屏小等条件的制约。
2手机软件的组成
2.1概述
手机软件和PC机软件一样从中断向量表开始,因为比较小,看上去更加清晰。
中断向量表的第一个跳转指令当然是跳到复位的处理程序,后面是中断处理、错误处理的跳转指令。
一上电,手机就跳转到复位的处理程序,开始检查内存、初始化C运行环境,然后创建第一个任务。
这个任务会按顺序创建、启动其它任务。
绝大多数手机程序都是多任务的,但也有一些小灵通的协议栈是单任务的,没有操作系统,它们的主程序轮流调用各个软件模块的处理程序,模拟多任务环境。
手机软件可以粗略地分成启动模块、操作系统、协议栈、数据业务、本地存储、驱动程序、用户界面和其它应用。
启动模块前面已经说过了,下面简单介绍其它部分。
2.2操作系统
操作系统在手机软件只占很小一部分。
它的主要功能就是提供多任务调度、通信机制。
有的操作系统会提供动态内存分配,定时函数,但这些都不是必须的。
例如需要动态内存分配的模块,可以自己管理一个内存池,这样更易于隔离模块和预测内存需求。
大多数手机的操作系统都是一个很小的内核,例如REX、HIOS等。
高通REX的源代码连C代码加汇编也不过一千多行,编译后不过是2、3K的代码量。
而一般手机软件有几百到上千个源文件、超过一百万行的代码。
2.3协议栈
协议栈是手机软件最复杂的部分,它的复杂性在于它和基带处理芯片的设计密切相关。
只有具备芯片设计能力的企业才可能开发协议栈。
协议栈会使用基带处理芯片的所有资源。
2.4数据业务
数据业务主要有两种:
在前一种,手机相当于一个调制解调器,PC机通过手机上网,网络协议全在PC机上,手机提供数据链路。
另一种就是嵌入式数据业务,手机内部包含TCP/IP/PPP等协议,有时还要实现HTTP和嵌入式浏览器。
2.5本地存储
手机都有本地存储功能,存储电话本、短消息、用户设定等。
一般手机都有一个基于flash的文件系统。
早期的手机存储是基于EEPROM的。
2.6驱动程序
硬件驱动一般指外设驱动,不过有的外设已经被集成到基带处理芯片中了。
驱动程序包括键盘、电源管理模块、LCD、flash、RTC、串口、USB、SIM卡或UIM卡、射频驱动等。
2.7用户界面
用户界面(UI)又称作人机界面(MMI),它负责和用户的交互,在必要的时候调用其它模块的功能。
除了手机的必备功能外,用户界面也可能包含一些相对独立的应用程序,例如日程表、游戏等。
2.8其它应用
其它应用包括Java虚拟机、WAP浏览器、邮件软件等,是一些比较大,又相对独立的应用模块。
基本上讲完了。
大家肯定看得挺没意思吧。
这些程序和微软的longhorn、metedata有什么关系呢?
手机程序绝大部分是用C语言写的。
但对于做应用软件的程序员要求具备面向对象、设计模式的思维能力,然后用C语言实现出来。
高通的BREW就是用C语言硬生生地模仿C++,弄出很多奇怪的宏。
一般应用软件的开发不用这么死板,但对各种软件设计方法的了解还是必要的。
3手机的核心技术
手机的核心技术是芯片和协议栈,两者是密不可分的。
芯片设计需要协议栈来验证,协议栈必须充分发挥出芯片的功能。
芯片的CPU核、DSP核都可以买到现成的单元,但通信协议部分就需要自己设计了。
手机比较难做好的是耗电量、恶劣信号环境的性能等。
4第三方软件
4.1原理
“第三方软件”这个词的含义比较宽泛。
本文用它来指代不是硬编码在手机里,而是可以通过数据线或网络下载到手机上,可以装载、运行,也可以删除的软件。
前面讲到的软件都是完整程序的各个部分。
这些部分会被放到一起编译,产生一个二进制文件,通过JTAG口(升级时可以用串口)下载到手机的flash中。
手机一上电,就会从指定地址开始运行。
这个地址的内容就是跳转到复位处理程序的跳转指令。
哈哈,又讲回头了。
第三方软件是指手机可以通过数据线或者网络下载一些可执行文件到文件系统中。
然后有一个装载器可以执行这些文件。
这样第三方就可以开发一些应用程序,下载到手机中来扩充手机功能。
这些可执行文件现在主要有两种格式:
java程序和BREW程序。
java程序需要java虚拟机装载运行。
BREW程序是一个很奇怪的东西,它实际就是用与编译手机程序相同的编译器编译出来的目标代码。
这些目标代码必须是可以重新定位的,即不能包含全局和静态变量。
装载器将程序将执行权传给给BREW程序,一种听上去更安全的说法是调用BREW程序的入口函数。
这个入口函数的位置在文件中是固定的。
装载器在调用BREW程序的入口函数时会传入一个地址。
通过这个地址,BREW程序能够顺藤摸瓜,找到系统提供的各种API的地址,它通过这些API访问手机的显示、通信等功能。
java程序基本上是平台无关的,针对各种平台设计的java虚拟机隔离了平台的大部分特性,除了厂家特意提供的一些OEM功能。
BREW程序显然是平台相关,换一个CPU,就不认识原来的目标码了。
4.2其它
除了java、BREW外,WindowsCE、SmartPhone、WindowsMobile、Symbian、嵌入式Linux这些商业操作系统当然可以提供各种创建第三方程序的方法。
在这些环境写程序和在PC平台写程序很相近,基本上体会不到嵌入式编程的特点,只是屏幕小一些,输入麻烦一些。
这些第三方软件不是必需的。
手机在3G的市场中只占了一个较小的部分,网络是大头。
而第三方软件相对于手机来说,所占的份额就更小了。
《程序员》有一个嵌入式移动开发的专栏,总在讲这些手机第三方软件的开发手机软件只是嵌入式软件的一部分。
第三方软件在嵌入式移动开发中又能占到多少比重呢?
5结束语
需要说明:
关于以后的市场究竟以单CPU手机为主,还是以双CPU手机为主的问题,我倾向于单CPU手机,但这只是我个人观点。
实际市场会怎么发展,殊难预料。
对于一个芯片两个CPU核的方案,从软件角度看我是很赞成的。
将应用软件和协议软件分开,协议软件可以更加稳定,应用软件可以自由发展,使用大量在PC环境已经成熟的技术。
Android程序开发初级教程
(一)开始HelloAndroid
平台简介
令人激动的Google手机操作系统平台-Android正式发布了,这是一个开放源代码的操作系统,内核为Linux.作为开发者,我们所关心的是这个平台的架构以及所支持的开发语言。
下面是这个平台的架构模型:
这个平台有以下功能:
+Applicationframework:
可重用的和可替换的组件部分,在这个层面上,所有的软件都是平等的。
+Dalvikvirtulmachine:
一个基于Linux的虚拟机。
+Integratedbrowser:
一个基于开源的WebKit引擎的浏览器,在应用程序层。
+Optimizedgraphics:
包含一个自定义的2D图形库和基于OpenGLES1.0标准的3D实现。
+SQLite:
数据库
+Mediasupport:
通用的音频,视频和对各种图片格式的支持(MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)
+GSMTelephony:
GSM移动网络,硬件支持。
+Bluetooth,EDGE,3G,andWiFi:
都依赖于硬件支持。
+Camera,GPS,compass,andaccelerometer:
都依赖于硬件支持。
+ Richdevelopmentenvironment:
包含一套完整的开发工具集,方便跟踪调试,内存检测和性能测试,而且提供了Eclipse的插件。
下面我们就来亲身体验一下Android程序的开发之旅。
先介绍一下开发环境,下面是对系统及相关软件的版本要求:
操作系统:
WindowsXPorVista
MacOSX10.4.8orlater(x86only)
Linux(testedonLinuxUbuntuDapperDrake)
SupportedDevelopmentEnvironments
Eclipse
Eclipse3.2,3.3(Europa)
AndroidDevelopmentToolsplugin(optional)
OtherdevelopmentenvironmentsorIDEs
JDK5orJDK6(JREaloneisnotsufficient)
NotcompatiblewithGnuCompilerforJava(gcj)
ApacheAnt1.6.5orlaterforLinuxandMac,1.7orlaterforWindows
我使用Eclipse3.3+JDK1.6.+Ant1.7的组合。
还有两个重要的就是:
AndroidSDK以及Android用于Eclipse中的插件。
AndroidSDK的下载链接:
如果你是第一次使用这些软件,请注意安装顺序和设置好环境变量。
一般的顺序是先安装JDK然后解压ant压缩包,然后设置java环境变量和ant环境变量,然后是解压AndroidSDK,再设置AndroidSDK的环境变量。
总之就是把JDK,ANT,AndroidSDK的路径添加到path里。
Androidforeclipseplugin在安装过程很简单,通过网络安装插件就可以了,这个是URL:
https:
//dl-
具体的配置过程,可以查看:
以下为一个helloAndroid的开发步骤:
创建一个项目:
创建一个新项目是很简单的,只要你安装了Eclipse插件,并且你的Eclipse软件版本在3.2或3.3,你就可以开始开发了。
首先,看一下要创建"Hello,World"程序从高级层面上有哪些步骤:
1,通过 File->New->Project菜单,建立新项目"AndroidProject"
2,填写新项目各种参数。
3,编辑自动生成的代码模板。
尽此而已,我们通过下面的详细说明来完成每个步骤。
1, 创建一个新的Android项目
启动Eclipse,选择 File->New->Project菜单,如果你安装好了Android的Eclipse插件,你将会在弹出的对话框中看到"AndroidProject"的选项。
选择“AndroidProject”,点击 Next按钮。
2,填写项目的细节参数.
下面的对话框需要你输入与项目有关的参数:
这个表格中详细介绍了每个参数的含义:
ProjectName:
包含这个项目的文件夹的名称。
PackageName:
包名,遵循JAVA规范,用包名来区分不同的类是很重要的,例子中用到的是"com.google.android",你应该按照你的计划起一个有别于这个的路径的名称。
ActivityName:
这是项目的主类名,这个类将会是Android的Activity类的子类。
一个Activity类是一个简单的启动程
序和控制程序的类。
它可以根据需要创建界面,但不是必须的。
ApplicationName:
一个易读的标题在你的应用程序上。
在"选择栏"的 "Usedefaultlocation"选项,允许你选择一个已存在的项目。
3,编辑自动生成的代码。
当项目创建后,你刚才创建的HelloAndroid就会是包含下面的代码.
publicclassHelloAndroidextendsActivity
{
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(Bundleicicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
}
}
下面我们开始修改它
[构建界面]
当一个项目建立好以后,最直接的效果,就是在屏幕上显示一些文本,下面是完成后的代码,稍后我们在逐行解释。
publicclassHelloAndroidextendsActivity{
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(Bundleicicle){
super.onCreate(icicle);
TextViewtv=newTextView(this);
tv.setText("Hello,Android");
setContentView(tv);
}
}
注意你还需要添加importandroid.widget.TextView;在代码开端处。
在Android程序中,用户界面是由叫做Views类来组织的。
一个View可以简单理解为可以绘制的对象,像选择按钮,一
个动画,或者一个文本标签(这个程序中),这个显示文本标签的View子类叫做TextView.
如何构造一个TextView:
TexiViewtv=newTextView(this);
TextView的构造参数是Android程序的Context实例,Context可以控制系统调用,它提供了诸如资源解析,访问数据库等
等。
Activity类继承自Context类,因为我们的HelloAndroid是Activity的子类, 所以它也是一个Context类,所以我们能用"this"在TextView构造中。
当我们构造完TextView后,我们需要告诉它显示什么:
tv.setText("Hello,Android");
这个步骤很简单,当我们完成了这些步骤以后,最后要把TextView显示在屏幕上。
setContentView(tv);
Activity的setContentView()方法指示出系统要用哪个View作为Activity的界面,如果一个Activity类没有执行这个方法,将会没有界面并且显示白屏。
在这个程序中,我们要显示文本,所以我们传入已创建好的TextView。
好了,程序代码已经写好,下面看看运行效果。
运行代码:
Hello,Android
使用Android的Eclipse插件就可以很轻松的运行你的程序,选择Run->OpenRunDialog。
你将会看到下面的对话框
下一步, 高亮"AndroidApplication"标签,然后按下左上角的图标(就是像一片纸带个小星星那个), 或者直接双击 "AndroidApplication"标签,你将会看到一个新的运行项目,名为"New_configuration".
取一个可以表意的名称,比如"Hello,Android",然后通过Browser按钮选取你的项目(如果你有很多个项目在Eclipse中,确保你选择要运行的项目),然后插件会自动搜索在你的项目中的Activity类并且将所有找到的添加在"Activity"标签的下拉列表中。
我们只有"Hello,Android"一个项目,所以它会作为默认选择。
点击"Apply"按钮,下图
到这里,已经完成了,你只需要点击"Run"按钮,然后Android的模拟器将会启动,你的应用程序就会被显示出来。
下次继续介绍如何把界面的布局用XML表示以及使用命令行进行编译和运行Android程序。
将界面实现用XML编排
你刚刚完成的"Hello,World"例子我们称之为”程序化”的界面编排。
意思就是说构建你的应用程序界面是直接使用的源代码。
如果你已经完成过很多界面程序,你大概熟悉像此类的方式是多么脆弱:
一个对布局小小的修改会对源代码造成很头疼的事情。
如果忘掉与View的紧密结合,这个导致代码出错和浪费你的调试时间的界面问题也会很简单。
这就是为什么Android提供了一种可替换的界面构建方式:
基于XML的布局文件。
最简单的解释这个概念的方式就是展示一个例子。
我们就用刚才创建的项目来进行演示,达到相同的界面效果。
xmlversion="1.0"encoding="utf-8"?
>
android=" android: layout_width="fill_parent" android: layout_height="fill_parent" android: text="Hello,Android"/> AndroidXML布局文件的大体的结构很简单。 它是一个标签的树,任何一个标签就是View类的名字。 在这个例子中,它是一个很简单的只有一个元素的树,一个TextView。 你可以使用任何继承自View类的名字作为标签的名字。 包括在你的代码中自定义的View类。 这个结构可以很容易的构建界面,它比你在源代码中使用的结构和语法更简单。 这个模式的设计灵感来自于Web开发。 就是可以将界面和应用程序逻辑分离的模式。 在这个例子中,也有些是XML的属性,下面是他们的含义: 属性 含义 xmlns: android 这是XML命名空间的声明,它是告诉Android的工具,你将要涉及到公共的属性已被定义在XML命名空间。 在每一个Android的布局文件的最外边的标签必须有这个属性。 android: layout_width 这个属性定义了在屏幕上这个View可用的宽度是多少。 android: layout_height 这个属性定义了在屏幕上这个View可用的高度是多少。 android: text 设置TextView所包含的文本内容,当前设置为”Hello,Android”信息 以上就是一个XML布局文件的样子,但是你需要放在哪里? 它要放在你的项目目录的res/文件夹下。 “res”是”resources”的缩写,它是存放所有非代码资源的文件夹,包含象图片,本地化字符串和XML布局文件。 这些Eclipse的插件已经给你创建好了,在我们上面的例子中,我们没有使用它。 在包浏览器中,展开res目录的layout.并且编辑main.xml,替换掉那个文本内容,然后保存。 现在,在包浏览状态,打开在代码文件夹中名为R.java的文件,你将看到下面的内容: publicfinalclassR{ publicstaticfinalclassattr{ }; publicstaticfinalclassdrawable{ publicstaticfinalinticon=0x7f020000; }; publicstaticfinalclasslayout{ publicstaticfinalintmain=0x7f030000; }; publicstaticfinalcla
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手机软件 开发 Android 程序