Android的那些轮子
整个AOSP代码,包天包地,从kernel,libc,gui,net……简直包括了绝大多普通程序员职业生涯涉及的整个领域。其实,开源界早已经遇到并且解决了Android的很多问题,不过google讨厌GPL说起,或者说,google为了照顾更多的商业公司,以一已之力,重造了很多轮子。下面缩缩。
glibc <---->bionic
首先标准c的api必不可少。另外android构建于linux之上,linux实现的那套posix api,linux专有的系统调用,也得封装一套出来。gnu开发了glibc,google开发bionic。
glib<---->system/core/libcutils+libsparse
c语言缺乏标准的数据结构实现,类似链表,哈希表,动态数组之类的数据结构在并没有在标准c中做任何规则。gtk组织开发了glib做为自己的图形库的支持,android自然也不能落后,也要来一套,并且增加了,稀疏矩阵这种数据结构。
stl/boost<--->system/core/libutils
android的framework底层是用c++实现的,要用c++,什么智能指针,thread,string,vector,hashmap,list等基础数据结构,得首先准备好。stl/boost实现的那套,android这次没有原样来一套,原则是,用多少实现多少,实现精简的stl/boost。
busybox<--->system/core/sh + toolbox + rootdir
有了linux os,终端(shell)同样是必不可少的组件。我们需要shell脚本解释器,各种常用cmd,以及文件系统构建。busybox的工作,同样要再做一遍。
udev<--->system/vold
要处理设备的热插拔,比如sd卡,u盘等。我们要处理用户空间也内核的通信,我们有netlink socket。开源界给出的选择是udev,google给出的选择是void。
xinetd<--->system/netd
xinetd linux下的网络守护进程,处理各种网络服务。android给了另外一套netd.
com/dbus/cobra<--->binder
其实idl来描述接口,都是long long ago的事了。比如微软的com组件,unix的cobra,进程间通信的组件何其多也,无论你是用内核虚拟设备驱动,还是socket domain,前扑后继,大家为了跨越进程,做了太多努力了。
Android的那些轮子的更多相关文章
- Android入门教程之我见
真正的从安卓入门学习到实际工作也差不多一年时间了,也做了几个项目.在这期间经历了一开始学习Android的基本知识后仍旧无从下手,不知道如何开始开发一个app,到现在也开始学会注意Android架构的 ...
- 如何成为Android高手
要成为Android 高手并不是一件容易的事情.并不是很多人想象的 能够飞快的写出几行漂亮的代码去解决一些困难的问题 就是Android 高手了.真正的Android 高手需要考虑的问题远远不是写些漂 ...
- GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。
1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...
- Android开源项目和轮子
推荐查看Github最全面的Android开源项目汇总 功能框架 数据库 ORMLite框架 greenDaoMaster框架 Xutils的DButils ORMLitehe和greenDaoMas ...
- Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子。加快开发速度
Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子.加快开发速度 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 在使用 A ...
- 【轮子】发现一个效果丰富酷炫的Android动画库
没有什么比发现一个好轮子更让人开心的了. 这个库分分钟提高交互体验 :AndroidViewAnimations 一张图说明一切 配置和使用也相当简单 GitHub地址
- Android 开发如何选择轮子(转)
一个项目的开发,我们不可能一切从0做起,如果真是这样,那同样要哭瞎.因此,善于借用已经做好的 "车轮" 非常重要,如: 网络访问框架:OKHttp.retrofit.android ...
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
- 【腾讯Bugly干货分享】Android Patch 方案与持续交付
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a31921ac3a1fb613dd40f3 Android 不仅系统版本众多 ...
随机推荐
- Redhat YUM U盘源配置
Redhat YUM U盘源配置 1)在U盘创建目录 #mkdir /yum/Server 并从光盘Server.Packages 目录的所有文件拷贝到/yum/Server 2)安装 creater ...
- 转载---SQL Server XML基础学习<2>之--FOR XML AUTO/RAW
本文主要介绍FOR XML 的 AUTO 模式和 RAW 模式 --AUTO 模式将查询结果以嵌套 XML 元素的方式返回.这不能较好地控制从查询结果生成的 XML 的形式. --如果要生成简单的层次 ...
- java新手笔记3 运算符&循环
1.包 2.运算符 public class Operator { public static void main(String[] args) { int a = 5; System.out.pri ...
- Eclipse使用Maven创建Web项目
一.Maven插件下载.jdk下载 1.maven下载地址: http://maven.apache.org/download.cgi 2.jdk下载地址: http://www.oracle.com ...
- PAT_1016 部分A+B
问题描述: 正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6. 现给定A.DA.B ...
- Object-API-NSLog
NSLog中的基础数据类型 输出格式: NSLog("") char: %c short int: %hi %hx %ho unsigned short int: %hu %hx ...
- jQuery实现购物车多物品数量的加减+总价+删除计算
<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- React组件三
<script> <!-- getDefalutPros 设置组件的默认值--> <!--var Mytitle=React.createClass({ getDefau ...
- MySql中常用语句
1.查询语句: SELECT 查询字段 FROM 表名 WHERE 条件 查询字段可以使用 通配符* 字段名 别名(把长的名字命名一个别名,比较短的) 通配符:SELECT * FROM ' ...
- PHP小记录
正的framework(大量使用) thinkphp(部分使用) cakephpyii(极少使用) [一]函数 1:函数的声明:每个函数的第一行都是函数开头,有声明函数的关键 ...