Android Application 基础

来源:互联网 发布:产品效果图制作软件 编辑:程序博客网 时间:2024/05/17 09:19

Application Fundamentals

摘要

  • Android 应用程序由一个或者多个应用程序组(component)件构成 (activities,services, content providers, and broadcast receivers)
  • 每个组件在整个app的行为中承担了不同的角色,且都能被独立的激活 (即使被激活的组件属于其他app)
  • app的manifest 文件必须声明需要用到的组件和所有app的需求,比如app所使用的最小Android版本及一些硬件配置等
  • 非代码的app资源 (images, strings, layout files, etc.),在不同的设备配置下应该各有一份(比如不同语言使用的字串、不同屏幕尺寸使用的布局文件)
Android 应用程序使用java 语言开发。Android SDK开发工具将app的代码(包括数据和资源文件)编译到一个Android package中,Android package是一个以.apk为后缀的文件。.apk文件就代表了一个应用程序,在Android 设备上安装的app的时候只需要用到相应的apk文件。
每个安装在设备上的 Android 应用程序都运行在自己的安全沙箱中(security sandbox):
  • Android 操作系统是一个多用户的linux 系统,每一个应用程序就是一个特有的用户.
  • 默认情况下,系统会为每一个app分配一个唯一linux用户ID(ID 只有系统知道,app自身并不知道ID)。系统会为app中的每一个文件都分配权限,所以只有拥有相应的app ID 才能访问这些文件。
  • 每一个进程都拥有自己的虚拟机(VM),所有各应用程序之间代码的运行是隔离的。
  • 默认情况下,每个app都运行在自己独立的linux进程之上,当需要运行app的任何一个组件时会启动这个进程,然后在不需要使用进程或者系统需要回收内存的时候会终止进程。

通过这种方式,Android系统实现了最小特权原则(principle of least privilege)。每个app默认情况下只能访问需要完成其应用程序功能的部分。这样创建了一个非常安全的app运行环境,app不能访问系统给予权限的部门。

但是,也有方法可以可以让应用程序之间共享数据,也可以让app访问系统服务:

  • 安排让两个app共享同一个linux User ID是可能,这样他们就能相互访问各自的文件。为了节约系统资源,拥有相同user ID的应用程序可以运行在同一个VM上(但是app的签名必须一致)
  • 一个app可以向系统请求权限来访问设备数据,比如联系人、短息、SD card、照相机、蓝牙等等,app权限必须在安装时就获得。

本文涵盖了app 如何在Android 系统中存在,文章剩余的部门会介绍:

  • 定义app的核心框架组件
  • 用来声明app组件及请求设备功能访问权限的manifest文件
  • 从Android 代码中分离出来的资源文件,让你个轻松优化app 在不同设备配置下的行为。