Android软件开发

云起智控物联科技(武汉)有限公司
2022-10-05

定义

Google公司在2007年11月5日正式公布这个操作系统,2008年,Patrick Brady于Google I/O演讲“Anatomy & Physiology of an Android”,并提出的Android HAL架构图。HAL以*.so档的形式存在,可以把Android framework与Linux kernel隔开。Android拥有功能强大的API,出色的文档,茁壮成长的开发人员社区,而且不需要为开发或发布支付费用。随着移动设备的日益普及,不管在怎样的开发背景下,使用Android软件开发新颖的手机应用程序都是一个令人为之振奋的良机。 [1]


特性

应用程序框架支持组件的重用与替换 ·Dalvik虚拟机专门为移动设备做了优化 ·内部集成浏览器该浏览器基于开源的WebKit 引擎 ·优化的图形库 包括2D和3D图形库,

3D图形库基于OpenGL ES 1.0 (硬件加速可选) ·#SQLite 用作结构化的数据存储·多媒体支持 包括常见的音频、视频和静态印象文件格式(如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) ·GSM电话 (依赖于硬件) ·蓝牙Bluetooth, EDGE, 3G, and WiFi (依赖于硬件) ·照相机,GPS,指南针,和加速度计 (依赖于硬件) ·丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件。


架构

应用程序

Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个 Activity 类(class)负责创建视窗(window),一个活动中的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。

应用程序的运行

在模拟器上运行

仿真是虚拟设备(AVD),我们需要配置来运行我们的Android应用程序。

步骤1、开放的AVD管理

步骤2、新的按钮,点击添加新设备,并配置您的设备设置。

步骤3、会有一个结果窗口显示所有已配置你上一屏幕选择。

步骤4、按“确定”,你将会看到你的设备列在有你可以关闭此窗口。

步骤5、运行你的Android应用程序项目从Eclipse,如果只有一个AVD配置,它会自动部署的应用程序也会出现一个窗口,选择你的图片。 仿真器将开始。

在设备上运行

Android应用程序可以直接部署在Android设备上,这几个配置所需要的。

步骤1、在调试模式的设置可以设置应用程序:Android的<应用程序>元真可调试属性。ADT 8这是默认的。

步骤2、您的设备上启用USB调试:Android 3.2或以上转至设置>应用程序>开发和启用USB调试。

在Android 4更新,这是开发商选择设置>。

注:在Android 4.2更新,开发者选项是默认隐藏。可以,去设定>android的版本号。返回先前屏幕找到开发商选择。

步骤3、安装USB驱动程序为您的设备,计算机识别你的设备。

步骤4、一旦设置和您的设备通过USB连接,从Eclipse菜单栏安装您的应用程序在设备上选择运行>运行(或运行>调试)。

中介软件

操作系统与应用程序的沟通桥梁,并用分为两层:函数层(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 Managemeat),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等。下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo 是 Android 用来辅助Git工作的一个工具。


就业前景

发展

Android在中国的前景十分广阔,首先是有成熟的消费者,在国内,Android社区十分红火,这些社区为Android在中国的普及做了很好的推广作用。国内厂商和运营商也纷纷加入了Android阵营,包括中国移动,中国联通,中兴通讯,华为通讯,联想等大企业,同时不仅仅局限于手机,国内厂家也陆续推出了采用Android系统的MID产品,比较著名的包括由Rockchip和蓝魔推出的同时具备高清播放和智能系统的音悦汇W7和2010年推出的原道N5,我们可以预见Android也将会被广泛应用在国产智能上网设备上,将进一步扩大Andorid系统的应用范围。另一方面,由于国内政策的限制,导致Android的部分功能(如Android market)在国内无法正常使用,常用的解决方法是使用VPN服务来访问。

Gartner预计,到2016年底,将有23亿部计算机、平板电脑和智能手机使用Android,而Windows设备数量为22.8亿部。相比之下,到年底,Windows设备数量将达到15亿部,而Android设备数量为6.08亿部。

Android操作系统2008年才上市,随后迅速成为主导性的智能手机平台,市场份额达到了2/3。与此同时,在快速发展的平板电脑市场,Android份额也位居第二。虽然Android是一款免费软件,但它却推动了谷歌核心的搜索业务增长。

由于越来越多的用户转向平板电脑和智能手机,第三季度全球PC出货量同比下滑8%,为2001年来的最大降幅。虽然微软Windows长期统治PC市场,但在智能手机市场,微软的份额仅约为3%。

就业前景和行业需求

随着移动互联网的到来和迅猛发展,移动互联网开发人员的需求也是与日俱增。比如说android市场,国外Android市场正在如日中天的扩展,据市场研究公司IDC发布研究报告称,预计中国智能手机市场在全球市场上所占份额将会从18.3%上升至26.5%,而美国市场所占份额则将从21.3%下降至17.8%。相信在不久的将来会有更多的用户选择Android系统的手机或是无线终端设备。

中国拥有世界上最大的手机用户群,再加上3G的推出对整个行业的巨大推动作用,全世界所有大中小型手机制造商几乎都在招聘Android工程师。然而每天有超过16万台的Android设备出货,一年后全球可能会有超过1亿台的Android设备,以后将超越iphone成为智能手机平台的旗舰。


开发大会

AndroidWorld Global Developers Conference 安卓全球开发者大会(英文简称:AndroidWorld)是IDG美国国际数据集团旗下的知名展会品牌。主要针对基于Android系统平台的商业模式探讨、技术交流、移动应用推广的大会,是一次很好的探索和寻求共同发展、合作共赢的契机。AndroidWorld代表着未来移动互联网产品和应用服务类型的发展趋势。


语言特点

Android应用的开发语言用的是Java语言,并且在Android中也用到了Java核心类库的大量的类,因此,在学习Android开发之前,可以先把Java基本语法和Java SE的基础类库好好学习一下。Android应用程序开发是以Java语言为基础的,所以没有扎实的Java基础知识,只是机械的照抄别人的代码,是没有任何意义的。 建议在安卓课程前期的java学习阶段中,需要用心的学好。

3G梦工场android培训认为培训学员分为两类,一是针对入门级的学员,计算机专业出身或者至少有编程思想,经过培训能掌握一部分基础的java技术和an-droid系统的框架,再学习开发环境的搭建和编程软件的使用后,就可以快速上手开发上层应用;另一类是针对有一定java技术基础,想转行进行An-droid开发的人员,他们有扎实的java技术和编程思想作基础,经过培训能加深对android系统的架构和特点的认识,这类人员经过培训之后能接受针对An-droid系统更深层次开发的任务。

一款完整的安卓软件开发,需要掌握相关的android开发语言、开发软件、安卓开发环境配置,安卓开发框架以及有关的android app开发技术,当中涉及到的一些比如算法、数据库开发、网络协议等,也是需要去学习的。下面就针对以上提及的安卓app开发技术做一下简单的分析:

一、android开发语言
主流安卓app开发语言有Java、C++、Kotlin。开发安卓app不限于一种语言,可以多种语言组合使用。如果是app应用开发,我们主要学习java,如果是底层开发,我们就学习C语言,也可以作为ndk 开发(ndk是工具列的集合,NDK提供了一系列的工具,帮助开发人快速学习开发C/C++的动态库,并能自动将so和java应用打成apk包。
二、安卓软件开发工具
安卓系统app开发有几种类型的工具。目前,android studio和Eclipse是主流。Eclipse之前很流行,后来谷歌公司推出了android   studio,推荐初学者先使用android studio。android studio是谷歌推出的安卓app开发工具,是专门为Android系统设计的。android studio是一个基于IntelliJ思想的IDE,同时为开发和调试提供了一个集成的环境。开发前做好准备,除了安装android studio,还需安装JRE、JDK、Java开发环境,包括环境变量设置、模拟器配置等。

Eclipse也是一款程序员使用较多的android app开发工具,Eclipse支持很多插件。与其他固定IDE软件相比,Eclipse跨平台开发的自主性和灵活性更高。

三、安卓开发环境配置
Android 开发环境搭建

首先,你可以在以下的操作系统开始 Android 应用程序开发:

Microsoft Windows XP 或更高版本。

带有英特尔芯片的 Mac OS X10.5.8或更高版本。

包括 GNU C 库2.7或更高版本的 Linux 系统。

第二,开发 Android 应用程序所需的所有工具都是免费的,可以从网上下载。以下是开始开发 Android 应用程序需要用到的软件列表。

Java JDK5 或 以后版本

Android SDK

Java运行时环境(JRE)

Android Studio

(可选的)Java开发者使用的Eclipse IDE

(可选的)Android开发工具(ADT)Eclipse插件

最后两个组件是可选的,如果是在 Windows 机器上工作,这些组件将方便于开发基于 Java 的应用程序。因此,让我们来看看如何来设置所需的环境。

安装 Java 开发工具包(JDK)

你可以从 Oracle 的 Java 网站:JDKJava SE下载下载最新版本的 Java 。在下载的文件中找到安装JDK的说明文档,按照给定的说明来安装和配置设置。最后设置 PATH 和 JAVA_HOME 环境变量来引用包含 javac 和 java的目录,通常分别为 java_install_dir/bin 和 java_install_dir。

如果运行的是 Windows,把 JDK 安装在 C:\jdk1.6.0_15,在 C:\autoexec.bat 文件添加以下内容:

set PATH=C:\jdk1.6.0_15\bin;%PATH%set JAVA_HOME=C:\jdk1.6.0_15

你也可以右键单击"我的电脑",选择"属性"=》"高级"=》"环境变量",然后通过按下"确定"按钮来更新 PATH 值。

在 Linux 上,如果 SDK 安装在 /usr/local/jdk1.6.0_15 下,并且使用的是 C shell,把下面的代码到写入 .cshrc 文件。

setenv PATH /usr/local/jdk1.6.0_15/bin:$PATHsetenv JAVA_HOME /usr/local/jdk1.6.0_15

如果你使用集成开发环境 Eclipse,那么它自动知道 Java 已安装在哪里。

Android IDE

有许多复杂而精巧的技术来开发 Android 应用程序。目前主要使用且相似的技术主要是以下两种:

Android Studio

Eclipse ID

四、安卓开发框架

目前安卓app开发框架主要有三种:WebApp、Native App、Hybrid App。其中,Native App是用Android,iOS平台官方语言、开发类库,工具进行开发。安卓用的是Java语言、苹果用的是object-c语言,采用原生app开发方式开发出来的app,不管是应用性能还是交互体验都是非常不错的。安卓app开发框架详细介绍:

现在市面上比较流行的移动app开发框架有三种:网页、混合、原生,这三种框架形式,都有自己适用的范围,无所谓好坏。企业可以根据自身业务的需求和条件,选择对应的安卓app开发框架。下面,就对这三种app开发框架做一个大致的介绍:

一、网页WebApp
WebApp与传统Web的主要区别,在于前端框架,特别是V-DOM框架的应用。此类前端框架使得WebApp与nativeapp在机理上已经没有任何区别了。在众多的前端框架中, React、Vue和Angular是有竞争力的选择。
1、ReactV-Dom技术的开创者,主流框架中的为数不多。React的贡献都是开创性的,在它基础上,也有很多兼容框架,比如Anu,Nerv。用以解决React在性能或IE兼容性上的问题。
主流技术方案:
React + Redux + ReactRouter + Material-UI/AntD/Semantic-UI
2、Vue由国人创建,在中国拥有大量使用者,也有很多配套的开源项目。它的是要特点是学习成本低,容易上手。
主流技术方案:
Vue + Vuex + Vue-Router + Vuetify/Quasar/vux/ Mint-UI
3、Angular大而全型的框架,为大型项目所推崇,深度整合Typescript和Rxjs。
主流技术方案:

Angular + Typescript

二、原生NativeApp
由于操作系统的限制,原生应用只有那么几种。对于原生应用,架构是基础,框架是核心,加上海量的UI组件。
1、IOSios开发已经从OC比较全面转向Swift,较新的架构VIPER基本上可以视为MMVPP。
主流技术方案:
VIPER + RxSwift + Moya + Alamofire + SwiftyJSON/ObjectMapper
2、Androidandroid开发语言从Java更换为Kotlin。编译时依赖注入框架Dagger也成为不二法宝。
主流技术方案:
MVP + Dagger + RxKotlin + Retrofit + OkHttp + Kotson(Gson)
三、混合HybridApp
HybridApp的关键不在本身,而在WebApp。好的WebApp改为HybridApp很容易。所以混合应用框架实际是指WebApp的基础设施库,有Cordova(PhoneGap)就足够了。
CordovaPhoneGap开源而来。

原生app、webapp、混合app的优缺点

原生APP原生APP用Android,iOS平台官方语言开发,开发类库,工具进行开发。比如安卓的java语言,iOS的object-c语言。在应用性能和交互体验上非常不错。
一般来说原生开发就像盖房子一样。先打基础,然后是房梁,房子的结构,一砖一瓦,钢筋混凝土,电路方向都是精心设计的。原生APP也是如此:每一页,每一个功能,每一个效果,每一个逻辑,每一个步骤都写在代码,每一层,每一段都写在代码。
优点:1、可以接入所有功能(如GPS、摄像头等)的手机,并能实现功能的完整性和流畅性;
2、速度快,性能高,优秀的用户体验;
3、支持大量的图形动画和重新发现,无干扰,反应快。
4、快速使用设备端提供的接口,在处理速度上有优势。
5、兼容性高,每个代码都是程序员精心设计的,一般不会有闪退,还能防止病毒和漏洞的出现;
缺点:1、开发时间长,快则3个月左右完成,慢则5个月左右;
2、制作费用高,成本高;
3、可移植性比较差。原生App,Android和IOS应该各自开发,同样的逻辑和界面应该分两套写;
4、内容限制(App   Store限制);
5、新版本需再次下载应用更新。
Web   APPWeb   APP是Webapp   (HTML5)开发,HTML5应用开发,是利用Web技术制作的app开发。Web技术本身需要浏览器的支持来显示和与用户交互,所以使用的主要技术有HTML5,Java脚本,CSS等等。本质是浏览器功能的叠加,由浏览器以常见的Web 开发语言开发运行。
优点:1、支持的设备范围很广,可以跨越平台。写好的代码可以同时运行在Android、IOS和Windows上;
2、开发成本低,周期短;
3、没有内容限制;
4、适用于显示文字段落较大的页面(如新闻、攻略等)。)和丰富的格式(如加粗多样的字体);
5、用户可以直接使用新版本(自动更新,无需手动更新)。
缺点:由于Web技术本身的限制,H5移动应用无法直接访问硬件和离线存储,因此在体验和性能上有很大的局限性;对网络的要求很高,离线没办法做到;
1、功能有限;
2、运行速度慢,页面不能承载太多东西;
3、图片和动画支持度不高;
4、用户体验常识差;
5、无法调用手机硬件(摄像头、麦克风等)。
混合(Hybrid)APP即使用原生APP的开发技术和HTML5的开发技术,是原生和HTML5技术的混合应用。混合比例不限。Hybrid 开发采用原生代码,同时使用Web View插件或其他框架为H5提供容器。程序的主要业务实现和界面的显示都是利用与H5相关的web技术实现的。例如,京东, 淘宝,今日头条和其他应用程序是通过混合开发模式制作的。
优点:1、开发效率高,节省时间。同一套代码Android和IOS基本可以用;
2、便于更新和部署。每个升级版本只需要在服务器端升级,不再需要上传到App   Store审核;
3、代码易于维护,版本更新快,节约产品成本;
4、比网页版多实现了功能;
5、可以离线运行;
6、多平台兼容;
缺点:1、功能/界面不能自定义:所有内容都是固定的,界面不能更改或增加功能;
2、加载慢/网络要求高:所有混合的app数据都需要从服务器中检索,每个页面都需要重新下载,所以打开速度慢,网络占用高,缓冲时间长,容易被用户重新发送;
3、用户体验不如local 应用;

4、安全性低:代码是老的代码,不能很好的兼容新手机系统,安全性低。网络发展这么快,病毒这么多。如果不实时更新,容易产生漏洞,造成直接经济损失;

五、相关的计算机知识
1、算法:纯粹的算法学习不是很多,很多算法学习都融合到语言学习中。比如排序算法、过滤算法、搜索算法等等。在高级语言的列表、字典和数组类型,基本上都包含了这些算法。
2、数据库:后端程序员都需要对数据库的数据进行操作,目前中小型web项目的数据库以MySQL为多,所以建议学习MySQL,也有的公司使用sqlserver,有时间可以学一下,此外,移动端使用sqlite小型数据库,可以掌握一下。此外,数据库中的增删改查、视图、触发器、存储过程等也是需要了解的。
3、前端语言:html、css、js、jquery、jsp,虽然做的是java后端,但是在开发过程中难免会遇到看源码排查问题的情况,虽然前端知识不要做到精通,但是起码有个大概的了解,能够看懂代码的大概意思,应该是较低要求了。
掌握以上的安卓app开发技术,基本就可以接手一些软件开发的项目,一款完整的安卓app开发,除了研发是核心工作,前后的项目分工流程也是需要大致了解的。软件开发流程八个步骤:市场需求分析、APP原型图设计、APP效果图设计、UI页面设计、app前端开发、APP功能研发、测试阶段、应用市场上架。


分享