Android的应用程序框架主要为应用程序提供需要的API接口;其中包含了UI程序中 所需要的各种控件例如:Views(视图组件)、lists(列表)、grids (栅格) ^ text boxes(文本框)、buttons(按钮)等。Android系统中核心应用程序的api框架设计简化了组件的重用, 任何一个应用程序都可以发布它的功能块并且提供给其它的应用程序调用;同时这种应用程 序重用机制也便于用户替换程序组件。除了 UI程序中所需要的各种控件,Android的应用程序框架还包括一系列的服务和系统,其中包括: 内容提供器(Content Providers):使得应用程序既可以访问另一个应用程序的数据,也可以共享它们自己的数据。 资源管理器(Resource Manager):提供本地字符串,图形,以及布局文件等非代码资源的访问。 通知管理器(Notification Manager):提供一个状态栏用于显示各应用程序的提示信息。 活动管理器(Activity Manager):用来管理应用程序的生命周期并提供常用的导航回退功能。 通常情况下,Android应用程序是由四种组件构造而成的:Activity、Broadcast receiver、Service、Content Provider;所有的Android应用程序都由这四个组件组合而成,但并非必须构建这4个组件。所有的应用都在文件AndroidManifest.xml中管理这些组 件: Activity:是最基本的Android应用程序组件。在Android应用程序中,一个活动通常 就是一个单独的屏幕;每一个活动都被实现为一个独立的类,并且从Android的活动基类中 继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应。Android对活 动的管理是通过堆桟进行的。 Service: 一个服务是具有一段较长生命周期且没有用户界面的程序。多数是一些后台 的监控服务,针对Wifi芯片的功能和状态管理就是基于Service设计的。 Content Provider:内容提供器类通过实现一组标准的方法,可以让其它的应用保存或 读取此内容提供器处理的各种数据类型。 Broadcast receiver:用来接收广播信息,包括系统广播和其他应用发送的广播信息。 Broadcast receivers不需要与用户交合,不过可以通过启动acitivity或者通过使用 Notif icationManager 通知用户。 Android安全架构 Android是个多进程系统,每个应用程序运行在独立的进程空间,linux操作系统在进程级别对他们进行安全控制,每个应用被赋予了不同的udi和gid,除此之外,Android系统通过权限机制控制应用进行受限或者危险的操作。 在Android安全体系中,应用程序默认没有权限对其他进程的私有数据,外部设备进行 读写操作。每一应用进程运行在沙箱中,只有申请相关权限才能脱离沙箱束缚。应用程序使 用AndroidManifest. xml文件静态申请运行所需要的权限,并且应用程序在安装的时候会提 示给用户这些权限信息,由用户决定是否安装该应用,应用程序在运行期间不能动态改变他 应用程序签名能够建立应用程序与开发者的信任关系,相同签名的不同应用程序可以共 享UID运行在相同的进程空间,也可以相互访问各自的私有数据。每个应用程序安装到 Android系统上都被赋予了唯一的UID用来进行安全控制。从进程级别进行安全控制会导致 两个不同的应用无法运行在相同的进程空间,我们可以通过在manifest文件中定义 sharedUserId属性的方法使不同的应用运行在相同的进程空间,前提条件是这两个应用必 须包含相同的签名信息。应用程序建立的文件通过本程序的uid控制。通常其他应用程序没 有权限访问该UID创建的文件,在创建文件的时候使用getSharedPreferences, openFileOutput 或者 openOrCreateDatabase,我们可以使用 MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE标志位使得创建的文件对其他应用来说具有读写权限,这可以在不 同进程间进行数据共享。 上面已经提高,在基础的安全沙箱中,应用程序享有基础的权限,为了突破沙箱限制, 必须通过在AndroidManifest.xml文件或更多的<uses-permission>标签来实现。 应用程序在安装的时候,安装程序根据声明权限来赋予应用程序相应的权限并提示给用户。应用程序在运行期间,系统会对基础沙箱服务之外的权限进程检查,如果安装时没有声 明该权限会返回SecurityException异常。 系统提供的权限列表manifest.permission中获取,一般形式如下: 〈manifest xmlns:Android="http: //schemas.jybase.net/apk/res/Android〃 package=^com.Android, app. myapp〃 > <uses-permission Android: name="Android.permission.RECEIVE_SMS^ /> 〈/manifest> 权限检查通常在以下几种操作中进行: 1.防止应用程序执行越权系统调用 |