
摘要:近几年来,Android慢慢成为便携设备上的要紧操作系统。2020年Android在全世界的市场份额第一次超过塞班系统,跃居全世界第一。本文要紧通过论述Android的要紧思想、进展状况和核心技术来使读者对Android有一个初步的熟悉。
关键词:Android、linux、NDK、google
这学期咱们开设了《Android应用程序开发》这门课程。这么课程开始的时候同窗们都很兴奋。因为Android在此刻是最为流行的操作系统。同窗们大部份用的电话都是Android操作系统。因此对它的名字超级熟悉,可是对它的真正意义和具体是如何实现Android应用程序却十分陌生。同窗们都希望了解到自己的电话上的应用程序究竟是如何实现其功能的。因此对这门课程产生了极大的爱好。
这门课程要紧给咱们介绍了Android开发环境、应用程序、生命周期、用户界面、组件通信与广播信息、后台效劳、数据存储与访问、位置效劳与地图应用、Android NDK开发这9个方面的内容。让咱们对Android有一个初步的认知。这本书上的内容仅仅是Android程序开发的一小部份,是引导咱们正确看待Android。在尔后的学习中还需要咱们多看关于Android的书籍,关注Android各方面的消息,多做关于Android的实验和课题。如此才能进一步了解那个现今全世界最为流行的操作系统。
一、Android简介
Android是一种以linux为基础的开放源代码操作系统,要紧利用于便携设备。目前尚未有统一中文名称,中国地域较多人利用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初要紧支持电话。2005年由google收购注资,并组建开放电话联盟开发改良,慢慢扩展到平板电脑及其他领域上。Android的要紧竞争对手是苹果公司的iOS和RIM的Blackberry OS。2020年第一季度,Android在全世界的市场份额第一次超过塞班系统,跃居全世界第一。 2021年2月数据,Android占据全世界智能电话操作系统市场%的份额,中国市场占有率为%。
Android的系统架构和其它操作系统一样,采纳了分层的架构。android分为四个层,从高层到低层别离是应用程序层、应用程序框架层、系统运行库层和linux核心层。
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#作为编程语言来开发应用程序。另外,谷歌还在2020年专门发布了针对初学者的Android Simple语言,该语言类似Basic语言。而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。
二、应用程序
初期的Android应用程序开发,通常通过Android SDK(Android软件开发包)下利用Java作为编程语言来开发应用程序,但通过不同的软件开发包,那么利用的编程语言也不同。
例如开发者能够通过Android NDK(Android Native开发包)利用C语言或C++语言来作为编程语言开发应用程序。同时谷歌还推出了适合初学者编程利用的Simple语言,该语言类似微软公司的Visual Basic语言。另外,谷歌公司还推出了Google App Inventor开发工具,该开发工具能够快速地构建应用程序,方便新手开发者。
3、Java开发方面
Android支持利用Java作为编程语言来开发应用程序,而Android的Java开发方面从接口到功能,都有层出不穷的转变。考虑到Java虚拟机的效率和资源占用,谷歌从头设计了Android的Java,以便能提高效率和减少资源占用,因此与J2ME等不同。
4、C/C++开发方面
初期的Android开发只支持Java作为编程语言开发应用程序,因此使得其他语言开发者只能望而却步。2020年4月,谷歌正式对开发者发布了Android NDK,NDK许诺开发者利用C/C++作为编程语言来为Android开发应用程序,第一版的NDK使得开发者看到了C/C++在Android开发中的希望。
可是,当前版本的NDK在功能上还有很多局限性:NDK并无提供对应用程序生命周期的保护;NDK也不提供对Android系统中大量系统事件的支持;关于作为应用程序交互接口的UI API,当前版本的NDK中也没有提供。可是相关于第一版的NDK,此刻的NDK已经进行了许多重大的功能改良。
由此可见,NDK仍然需要完善和进展,相信以后随着NDK的进展,NDK能够做得更多更好。
4.1硬件抽像层
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,就能够够取得操作函数。
4.2系统内核
Android 是运行于 Linux kernel之上,但并非是GNU/Linux。因为在一样GNU/Linux 里支持的功能,Android 多数没有支持,包括Cairo、X1一、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 所产生的,如此做是为了保留常数、数据结构与宏。
4.3平安权限机制
Android本身是一个权限分立的操作系统。在这种操作系统中,每一个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。系统的各部份也别离利用各自的识别方式。Linux确实是如此将应用与应用,应用与系统隔离开。
系统更多的平安功能通过权限机制提供。权限能够某个特定进程的特定操作,也能够每一个URI权限对特定数据段的访问。
Android平安架构的核心设计思想是,在默许设置下,所有应用都没有权限对其他应用、系统或用户进行较大阻碍的操作。这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。
安装应历时,在检查程序签名提及的权限,且通过用户确认后,软件包安装器会给予应用权限。从用户角度看,一款Android应用通常会要求如下的权限:
拨打、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取状态或识别码、精准的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、对互联网的完全访问、查看网络状态,查看WiFi状态、幸免电话待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动操纵、拍照图片等。
一款应用应该依照自身提供的功能,要求合理的权限。用户也能够分析一款应用所需权限,从而简单判定这款应用是不是平安。如一款应用是不带广告的单机版,也没有任何附加的内容需要下载,那么它要求访问网络的权限就比较可疑。
编辑本段系统组件
Android开发四大组件别离是:活动(Activity): 用于表现功能。效劳(Service): 后台运行效劳,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商(Content Provider): 支持在多个应用中存储和读取数据,相当于数据库。
4.3.1、 Activity
Android 中,Activity 是所有程序的全然,所有程序的流程都运行在Activity 当中,Activity能够算是开发者碰到的最频繁,也是Android 当中最大体的模块之一。在Android的程序当中,Activity 一样代表电话屏幕的一屏。若是把电话比作一个阅读器,那么Activity就相当于一个网页。在Activity 当中能够添加一些Button、Check box 等控件。能够看到Activity 概念和网页的概念相当类似。
一样一个Android 应用是由多个Activity 组成的。这多个Activity 之间能够进行彼此跳转,例如,按下一个Button 按钮后,可能会跳转到其他的Activity。和网页跳转略微有些不一样的是,Activity 之间的跳转有可能返回值,例如,从Activity A 跳转到Activity B,那么当Activity B 运行终止的时候,有可能会给Activity A 一个返回值。如此做在很多时候是相当方便的。
4.3.2 、Service
Service 是android 系统中的一种组件,它跟Activity 的级别差不多,可是他不能自己运行,只能后台运行,而且能够和其他组件进行交互。Service 是没有界面的永生命周期的代码。Service 是一种程序,它能够运行很长时刻,可是它却没有效户界面。这么说有点枯燥,来看个例子。打开一个音乐播放器的程序,那个时候假假想上网了,那么,咱们打开Android 阅读器,那个时候尽管咱们已经进入了阅读器那个程序,可是,歌曲播放并无停止,而是在后台继续一首接着一首的播放。其实那个播放确实是由播放音乐的Service进行操纵。固然那个播放音乐的Service也能够停止。
4.3.3 、注册BroadcastReceiver有两种方式:
(1)在进行注册。这种方式有一个特点即便你的应用程序已经关闭了,但那个BroadcastReceiver仍然会同意广播出来的对象,也确实是说不管你那个应用程序时开仍是关都属于活动状态都能够同意到广播的事件;
(2)在代码中注册广播。
第一种俗称静态注册,第二种俗称动态注册,这两种注册BroadcastReceiver的区别:
动态注册较静态注册灵活。实验证明:当静态注册一个BroadcastReceiver时,不论应用程序是启动与否。都能够同意对应的广播。
动态注册的时候,若是不执行unregisterReceiver();方式取消注册,跟静态是一样的。可是若是执行该方式,当执行过以后,就不能同意广播了。
4.4.4、 Content Provider
Content Provider 是Android提供的第三方应用数据的访问方案。
在Android中,对数据的爱惜是很周密的,除放在SD卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不许诺其他直接访问的。
五、心得体会
通过这一学期对Android的学习加上平常查阅的一些Android资料对Android有了一个大致的了解。开始接触Android感觉到它很成心思,在界面开发上和web也能够形成了相通的架构,加倍方便,视觉上也是超级的酷,这十分符合此刻人们的需求,专门是年轻人。Android的进展前景是毋庸置疑的,早一点的迈入那个领域,就能够够更早的体验Android的乐趣。
通过Android的学习,在咱们毕业之前又把握了一项新的前沿开发技术,也有了更多的进展方向,这在以后的找工作的进程中无疑为咱们增加了筹码,也能够成为咱们的爱好爱好,能够依照咱们自己的需求设计一些小的程序。学习Android让我取得了很多东西,提高了自己的编程技术和方式。这对即将毕业的咱们是一次十分宝贵的充电。
六、参考文献
《Android应用程序开发》 清华大学出版社
《Android技术黑幕:系统卷》 机械工业出版社
《Android系统原理及其开发要点详解》 电子工业出版社
《Android基础教程(第3版)》 人民邮电出版社
7、参考网站
