Android程序使用Java语言编写。Android开发套件把数据、资源文件和Java代码编译到一个.以.apk为后缀名的Android压缩包中。一个单独的apk文件中的所有代码被认为是一个android应用程序,可以被安装到android设备中。

一旦被安装到设备中,每一个Android程序运行在自己的安全沙盒中:

l Android操作系统是一个多用户的Linux系统,每个程序都是一个不同的用户。

l 系统默认会为每个程序分配一个唯一的用户标识(这个标识只被系统使用,应用程序并不知道此标识的存在)。系统会为应用程序中所有的文件分配权限,因此只有分配给程序的用户标识可以访问它们。

l 每个进程都拥有自己的虚拟机(VM),所以每个应用程序的代码都独立于其他应用程序运行

l 每个应用程序默认运行在自己的Linux进程中。Android会在应用程序的任意组件需要被运行时启动这个进程,会在不再需要这个进程或者系统需要为其他程序回收内存时结束此进程。

Android系统通过这样实现最小特权原则。每个应用程序默认只能访问完成它的工作时需要的组件。这样创造了一个非常安全的环境,在这个环境中,应用程序无法访问没有被赋予权限的系统功能。

尽管如此,一个应用程序可以有许多方法和其他程序分享数据以及访问系统服务:

l 为两个不同的应用程序共享同一个Linux用户标识是可以的,这样他们就能够相互访问对方的文件。为了节省系统资源,拥有相同用户标识的应用程序也可以运行在同一个Linux进程中,并且共享同一个VM(这些应用程序必须使用同一个证书签名)。

l 一个应用程序可以请求权限来访问设备数据,比如联系人、短信、可挂载的存储(SD卡)、摄像头,蓝牙以及其他的设备数据。所有的应用程序权限必须在用户安装的时候被授予。

以上介绍了关于一个Android应用程序是怎样存在于系统中的基础。此文档的剩余部分会为你介绍:

l 组成应用程序的核心框架组件

l 为你的应用程序声明组件和请求设备特性的manifest文件

l 和应用程序代码是分开的资源,这样你的应用程序可以优雅的为各种设备配置优化它的行为

Android应用程序基础的更多相关文章

  1. Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析

    在前两文中,我们分析了Activity组件的窗口对象和视图对象的创建过程.Activity组件在其窗口对象和视图对象创建完成之后,就会请求与WindowManagerService建立一个连接,即请求 ...

  2. Android开发之 Android应用程序目录结构解析

    建立的HelloWorld的应用项目,其代码是由ADT插件自动生成的,形成Android项目特有的结构框架. 接下来让我带领大家解析一个Android程序的各个组成部分,这次我们拿一个Hello,Wo ...

  3. gdb 远程调试 android native 程序

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张原理图: 我是 Linux 和 Android 双料 0 基础,目前对 gdb 了解的很浅显.(注意 ...

  4. Android应用程序构成

    一个Android应用程序一般是由以下4个组件构成的: 活动(Activity) 意图(Intent) 服务(Service) 内容提供器(Content Provider) 这4个组件是构成andr ...

  5. Unity开发Android应用程序:调用安卓应用程序功能

    开发环境: Eclipse3.4 + adt12 + jdk6 + AndroidSDK2.2 Unity3.4 + windows7 测试设备: HTC Desire HD 本文要涉及到的几个重点问 ...

  6. 如何在Android应用程序中使用传感器模拟器SensorSimulator

    原文地址; 如何在Android应用程序中使用传感器模拟器 - 移动平台应用软件开发技术 - 博客频道 - CSDN.NET http://blog.csdn.net/pku_android/arti ...

  7. 用 Eclipse 开发 Android 应用程序

    转自:http://www.apkbus.com/android-13828-1-1.html 开始之前 本教程介绍如何在 Eclipse 环境中进行 Android 应用程序开发,包括两个示例应用程 ...

  8. Android应用程序进程启动过程的源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创 ...

  9. 解开Android应用程序组件Activity的"singleTask"之谜

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6714543 在Android应用程序中,可以配 ...

随机推荐

  1. 4.编写Java应用程序。首先,定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时、分、秒,一个构造方法用于对三个成员变量(时、分、秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义 一个主类——TestClass,在主类的main方法中创建多个时钟类的对象,使用这 些对象调用方法show()来显示时钟的时间。

    Clock package com.hanqi.test; public class Clock { int hour,minute,second; Clock(int h,int m,int s) ...

  2. PHP验证码类

    通过PHP的GD库图像处理内容,设计一个验证码类Vcode.将该类声明在文件vcode.class.php中,并通过面向对象的特性将一些实现的细节封装在该类中.只要在创建对象时,为构造方法提供三个参数 ...

  3. npm常用指令

    安装: npm install <name> npm install <name> 安装依赖包,默认安装最新版本,也可在后面加上版本号,并且将安装信息加入项目的package. ...

  4. javaScript中的一些知识

    利用js动态生成table <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http ...

  5. USB LPT 端口映射

    如何设置端口映射(以将LPT1端口映射到共享名为CutePDFW的虚拟打印机上为例),命令如下: NET USE LPT1: \\wcjxixi-d022704\CutePDFW /Persisten ...

  6. hadoop pig入门总结

    在这里贴一个pig源码的分析,做pig很长时间没做笔记,不包含任何细节,以后有机会再说吧 http://blackproof.iteye.com/blog/1769219 hadoop pig入门总结 ...

  7. ios文本框基本使用,以及所有代理方法的作用

    /* UITextField文本输入框 */ UITextField * textField = [[UITextField alloc]initWithFrame:CGRectMake(50, 50 ...

  8. windows身份验证无法登陆,错误: 18456

    升级win10后,出现这样的错误,sa可以登录,在http://bbs.csdn.net/topics/360071848中看到4#的解决办法 CREATE LOGIN [zhangzaocha-PC ...

  9. QML之使用Loader加载QML组件

    呵呵,今晚是边看<裸婚时代>边敲代码,那电影看得...!钱真他妈不是个东西. 盼望Meego火起来. QML的Loader元素经常备用来动态加载QML组件.可以使用source属性或者so ...

  10. zookeeper集群实例

    zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务, ...