深入浅出api——android的系统框架及基础

  许多人发私信给我,说想继续看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卡),相机,蓝牙,等等。所有的应用程序权限必须在安装的时候由用户授予。

后面的四大组件我会每天翻译一点,就不在这里翻译了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android_tv_metro是一款安卓版TV Metro框架和服务器APIAPI和数据结构专辑和显示项目:Metro风格是由两个元素构成专辑可以包含多张专辑和显示项目显示项目可以被定义为视频,游戏,应用程序,音乐等您可以从显示项目中删除你自己的游戏/应用/视频详细条目主页也被定义为专辑。API风格API描述http://host/v1/ns/type/?id=res_id NS:命名空间,资源类型类型:项目或项目列表ID:后端服务器系统的资源ID详细信息http://host/game(video/app)/item?id=12346 return item list专辑http://host/game(video/app)/album?id=6464 return album类别http://host/game(video/app)/category?id=123456 return album注意:专辑和类别接近同一概念。选项卡“应用程序/游戏”选项卡“视频”选项卡“视频类别”首页JSON定义首页JSON示例服务器API定义请看:https://github.com/XiaoMi/android_tv_metro/raw/master/server/TVMarketAPI.md首页显示数据{    "data": [        {            "items": [display items],            "images": {},            "name": "TAB 1",            "id": "recommend",            "type": "album",            "ns": "video"        },        {            "items": [display item],            "images": {},            "name": "TAB 2",            "id": "recommend",            "type": "album",            "ns": "video"        }    ] }显示项目:{    "target": {        "type": "item"    },    "images": {        "back": {            "url": "",            "ani": {},            "pos": {}        }    },    "name": "Display Name)",    "times": {        "updated": 1409202939,        "created": 1409202939    },    "_ui": {        "layout": {            "y": 2,            "x": 3,            "w": 1,            "h": 1        },        "type": "metro_cell_banner"    },    "id": "987722",    "type": "item",    "ns": "video" }专辑{ "data": [     {         "items": [display items],         "images": { },         "name":"game tab name",         "times": {             "updated": 0,             "created": 0         },         "_ui": {             "type": "metro"         },         "id": "recommend",         "type": "album",         "ns": "game"     },     {         "items": [display items],         "images": { },         "name": "game tab Name",         "times": {             "updated": 0,             "created": 0         },         "_ui": {             "type": "metro"         },         "id": "categories",         "type": "album",         "ns": "game"     },     {         "items": [dispay items],         "images": { },         "name": "video tab name",         "times": {             "updated": 0,             "created": 0         },         "_ui": {             "type": "metro"         },         "id": "recommend",         "type": "album",         "ns": "video"     },     {         "items": [display items],         "images": { },         "name": "video tab name",         "times": {             "updated": 0,             "created": 0         },         "_ui": {             "type": "metro"         },         "id": "categories",         "type": "album",         "ns": "video"     } ], "preload": {     "images": [] }, "update_time": 0 }显示项目{ "target": {     "type": "item" }, "images": {     "text": {         "url": "",         "ani": {},         "pos": {}     },     "icon": {         "url": "",         "ani": {},         "pos": {}     },     "back": {         "url": "http://xxx/fffff.png",         "ani": {},         "pos": {}     },     "spirit": {         "url": "",         "ani": {},         "pos": {}     } }, "name": "name", "times": {     "updated": 1404466152,     "created": 1404454443 }, "_ui": {     "type": "metro_cell_banner",     "layout": {         "y": 1,         "x": 1,         "w": 1,         "h": 2     } }, "id": "180", "type": "item", "ns": "game" }TV Metro库和APIandroid库:提供一个建立sw540dp metro布局的框架API:服务器API和数据结构。该框架能够帮助您轻松构建一个TV metro UI风格的应用程序。至于具体的业务数据定义,你需要自己处理。android库:用于专辑的RecommendCardView Card浏览GenericSubjectLoader Loader(选项卡是专辑的一个实例)如何集成Android库?你只需要继承MainActivity并执行选项卡装载。请参阅TVMetroSample应用如何运行自己的服务器?1.定义你的主页数据2.执行您的详细资料/列表API下载测试APK下载测试APK,你可以在Android平板或电视运行点击下载设计文档:https://github.com/XiaoMi/android_tv_metro/raw/master/design/app_api.ppt 标签:Android
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值