Android简介
2014-5-20
本文以android官方文档为主要参考,而写本文的初衷在于经过差不多一年时间的android学习和使用,发现自己依然是个菜鸟,而又重新看了一些书,发现实在对自己难以提高。
本文内容来自http://developer.android.com/guide/index.html及其扩展内容。
Android是一个丰富的应用程序开发框架,在此框架上可以为移动设备开发创新性的应用程序和游戏。Android框架(android framework)基于linux内核。
Android Apps 提供多个程序进行点。Android程序是由多个不同的组件联合在一起构成的,这些组件都可以单独的调用。例如一个activity提供一个单独的用户界面,一个service则在后台独立的运行。在一个组件内,你可以使用一个intent来启动另外一个组件。甚至你可以启动一个来自非自己app的组件,如你可以在你自己的app中启动打电话程序的界面(一个activity)。这个模型给一个app提供了多个入口,而且,对于一个其他app可能调用(invoke)的action,任何app都表现得像它本身的行为一样。
Android app 可以适配不同的设备。Android提供了一个具有适应性的app framework,其允许你对不同的设备提供唯一的一套资源。例如,你可以为不同屏幕尺寸的设备提供不同的xml布局文件,系统将根据当前的设备决定使用哪个布局文件。
如果你的app需要某些特殊的硬件支持,如摄像头,那么你可以在运行时查看它的可用性。如果有必要的话,你可以在androidManafest文件中声明你所需要的硬件支持,app market 如google play store 会在用户安装的时候进行筛选。
基础
Android app 使用java语言编写,当编译的时候,代码,所有数据和资源文件都被打包为APK文件:android package,他其实是压缩文件。Apk 包含了android app 的所有内容,且是安装时需要的文件。
一旦app安装到一个设备上,每个app都运行在自己的安全沙箱中。主要是以下四点:
- android 操作系统是一个多用户linux操作系统,每个app都是一个不同的用户。
- 默认情况下,系统为每一个app分配一个唯一的Linux User ID(这个id归系统拥有,对app是透明的。)系统为这个app中的所有文件设置权限,来保证只有被分配这个user ID 的app 可以访问这些文件。
-
每个进程都拥有自己的JVM,所以在运行期间一个app的程序代码和其他app是隔离的。
-
默认情况下,每个app都在自己的进程中运行。当一个app的任何组件需要被运行的时候,系统开启这个进程;当此进程再也不被需要或者系统为其他app的运行回收内存的时候,结束进程。
基于以上几点,android 系统实现了最小权限原则。即,默认情况下,每个app只能访问那些它需要完成其功能所需要的组件。这就创造了非常安全的环境,一个app它不能访问那些它没有被授权的系统权限。
然而,当然有不同app间共享数据和访问系统服务的方法。
首先,可以使不同的app共享一个相同的linuxUser ID,这样就可以相互访问自己的各自的文件。为了保护系统资源,具有相同linux user ID 的apps在同一个进程和jvm中运行(他们必须使用相同的签名)。
其次,app可以请求系统权限来访问设备数据,如联系人,短信,SD卡,相机,蓝牙等等。这些权限必须在安装的时候授予。