许多人发私信给我,说想继续看muiscplayer的教程,但是我想先暂停一段日子,给自己重新定位下,然后再重新努力,毕竟我是入门级新手,今天翻译APP基础,http://developer.android.com/guide/components/fundamentals.html。
首先我们看下图
这是不是大家刚开始入门的时候看到android框架,是不是又有一点不一样,我参照《android系统原理及开发要点详解》给系统划分了四层,Android的第一层由C实现,第二层由C和C++实现,第三层和第四层才是我们擅长的java层面。
第一层和第二层之间,从Linux系统的角度看,是由内核空间与用户空间的分界线分割的,第一层运行于内核空间,第二层,第三层,第四层都是运行于用户空间。
第二层和第三层之间,是本地代码层和java代码层的接口
第三层和第四层之间,是Android的系统API的接口,对于APP来说,第三层以下的内容是不可见的。
android的核心系统服务依赖于Linux2.6内核,包括安全性,内存管理,进程管理。Linux内核也同时作为硬件和软件栈之间的抽象层,android也适合使用Linux的标准驱动作为系统与硬件的接口。
android包含了一些C/C++库,这些库能被android系统中不同的组件使用,它们通过android应用程序框架为开发者提供服务。
系统C库:一个从BSD继承来的标准C系统函数库(libc),它是专门为基于嵌入式Linux的设备定制的库。
多媒体库:基于PacketVideo的OpenCore,该库支持多种常用的音频、视频格式回放和录制,支持多种媒体格式的编码解码格式。
SurfaceManager:显示子系统的管理器,并且为多个应用程序提供2D和3D图层的无缝融合
LibWebCore:一个最新的Web浏览器引擎,支持Android浏览器以及一个可嵌入的Web视图
SGL:Skia图形库,底层的2D图形引擎
3D libraries:基于OpenGL ES 1.0 API的实现,该库可以使用硬件3D加速或者使用高度优化的3D软加速
FreeType:位图Bitmap和矢量Vector显示
Dalvik是android中使用的java虚拟机,,每一个android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例,Dalvik虚拟机执行扩展名为.dex的Dalvik可执行文件,该格式文件针对小内存使用做了优化,同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中的"dx"攻击转化成.dex格式由虚拟机执行。由此可知Android的java运行环境包括Dalvik虚拟机和Java基础库
最后到api网页上面的app基础。
Android 使用Java语言开发。Android SDK 工具编译代码—以及任意数据并连同相关资源打包进一个Android 包内,它是一个以.apk
为后缀的压缩文件。 一个 .apk
文件中的 所有代码就是一个程序。这个.apk文件就用于在Android设备上安装这个程序
Android操作系统是一个多用户的Linux系统,其中的每一个应用程序都是一个独立的用户。
默认地,系统会为每一个应用程序分配一个唯一的Linux用户ID(这个ID只能被系统使用,并且对于应用程序来说,这个ID是未知的)。系统为一个应用程序的所有文件设置了权限,所以,只有分配给这个应用程序的用户ID可以访问它们。
每一个进程有它主机的虚拟机 (VM), 所以一个应用程序的代码会独立与其它的应用程序运行。
默认地,每一个应用程序在它自己的Linux进程中运行。Android会在一个应用程序的任何一个组件需要被调用的时候启动这个进程。然后,当没有任何组件被调用或者系统需要为其它应用程序回收内存的时候,就会关闭这个进程。
通过这种方式,Android 系统实现了最少特权原则。就是说,每一个应用程序,默认地,都只能调用它所需要的工作组件。这就创造了这样一种非常安全的环境,在这个环境中,一个应用程序不能访问没有被授予其权限的系统部分。
尽管如此,也有很多途径可以让一个应用程序和其它的应用程序共享数据,也可以让一个应用程序去调用系统服务:
为两个应用程序分配同一个Linux用户ID是可行的,这样它们就能访问对方的文件。为了节约系统资源,拥有相同用户ID的应用程序也可以被运行于相同的Linux进程并且共享VM(它们必须用相同的证书签名)。
应用程序可以通过请求权限来访问设备数据,例如联系人,SMS信息,可插拔存储(SD卡),相机,蓝牙,等等。所有的应用程序权限必须在安装的时候由用户授予。
后面的四大组件我会每天翻译一点,就不在这里翻译了。