Saturday, November 22, 2008

两只老虎

更多精彩请到 http://www.139ya.com

F re' -re Jac-ques
Fre'-re Jac-ques
Dor-mez-vous?
Dor-mez-vous?
son-nez les ma-ti-nes
son-nez les ma-ti-nes
Bim ,Bam, Bon!
Bim,Bam,Bon!
Bim Bam Bim Bam Bon!


Frère Jacques, Frère Jacques,
Dormez vous ?
Dormez vous ?
Sonnez les matines,
Sonnez les matines,
Ding, deng, dong,
Ding, deng, dong.

Thursday, November 20, 2008

GDB调试精粹及使用实例

更多精彩请到 http://www.139ya.com


一:列文件清单
1. List
(gdb) list line1,line2

二:执行程序
要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。
如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。
利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。
(gdb)set args –b –x
(gdb) show args
backtrace命令为堆栈提供向后跟踪功能。
Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数。

三:显示数据
利用print 命令可以检查各个变量的值。
(gdb) print p (p为变量名)
whatis 命令可以显示某个变量的类型
(gdb) whatis p
type = int *

print 是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,还可以包含以下内容:
l 对程序中函数的调用
(gdb) print find_entry(1,0)
l 数据结构和其他复杂对象
(gdb) print *table_start
$8={e=reference=’\000’,location=0x0,next=0x0}
l 值的历史成分
(gdb)print $1 ($1为历史记录变量,在以后可以直接引用 $1 的值)
l 人为数组
人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示:
base@length
因此,要想显示在h后面的10个元素,可以使用h@10:
(gdb)print h@10
$13=(-1,345,23,-234,0,0,0,98,345,10)

四:断点(breakpoint)
break命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式:
l break line-number 使程序恰好在执行给定行之前停止。
l break function-name 使程序恰好在进入指定的函数之前停止。
l break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。
l break routine-name 在指定例程的入口处设置断点

如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置断点,其方法如下:
(gdb) break filename:line-number
(gdb) break filename:function-name

要想设置一个条件断点,可以利用break if命令,如下所示:
(gdb) break line-or-function if expr
例:
(gdb) break 46 if testsize==100

从断点继续运行:countinue 命令
五.断点的管理

1. 显示当前gdb的断点信息:
(gdb) info break
他会以如下的形式显示所有的断点信息:
Num Type Disp Enb Address What
1 breakpoint keep y 0x000028bc in init_random at qsort2.c:155
2 breakpoint keep y 0x0000291c in init_organ at qsort2.c:168
(gdb)
2.删除指定的某个断点:
(gdb) delete breakpoint 1
该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点
(gdb) delete breakpoint
3.禁止使用某个断点
(gdb) disable breakpoint 1
该命令将禁止断点 1,同时断点信息的 (Enb)域将变为 n
4.允许使用某个断点
(gdb) enable breakpoint 1
该命令将允许断点 1,同时断点信息的 (Enb)域将变为 y
5.清除原文件中某一代码行上的所有断点
(gdb)clean number
注:number 为原文件的某个代码行的行号
六.变量的检查和赋值
l whatis:识别数组或变量的类型
l ptype:比whatis的功能更强,他可以提供一个结构的定义
l set variable:将值赋予变量
l print 除了显示一个变量的值外,还可以用来赋值

七.单步执行
l next
不进入的单步执行
l step
进入的单步执行
如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish
八.函数的调用
l call name 调用和执行一个函数
(gdb) call gen_and_sork( 1234,1,0 )
(gdb) call printf(“abcd”)
$1=4
l finish 结束执行当前函数,显示其返回值(如果有的话)

九.机器语言工具
有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器,gdb提供了目前每一台计算机中实际使用的4个寄存器的标准名字:
l $pc : 程序计数器
l $fp : 帧指针(当前堆栈帧)
l $sp : 栈指针
l $ps : 处理器状态

十.信号
gdb 通常可以捕捉到发送给它的大多数信号,通过捕捉信号,它就可决定对于正在运行的进程要做些什么工作。例如,按CTRL-C将中断信号发送给gdb,通常就 会终止gdb。但是你或许不想中断gdb,真正的目的是要中断gdb正在运行的程序,因此,gdb要抓住该信号并停止它正在运行的程序,这样就可以执行某 些调试操作。

Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:
l nostop 接收到信号时,不要将它发送给程序,也不要停止程序。
l stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)
l print 接受到信号时显示一条消息
l noprint 接受到信号时不要显示消息(而且隐含着不停止程序运行)
l pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。
l nopass 停止程序运行,但不要将信号发送给程序。
例如,假定你截获SIGPIPE信号,以防止正在调试的程序接受到该信号,而且只要该信号一到达,就要求该程序停止,并通知你。要完成这一任务,可利用如下命令:
(gdb) handle SIGPIPE stop print
请注意,UNIX的信号名总是采用大写字母!你可以用信号编号替代信号名
如 果你的程序要执行任何信号处理操作,就需要能够测试其信号处理程序,为此,就需要一种能将信号发送给程序的简便方法,这就是signal命令的任务。该 命令的参数是一个数字或者一个名字,如SIGINT。假定你的程序已将一个专用的SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采 取某个清理动作,要想测试该信号处理程序,你可以设置一个断点并使用如下命令:
(gdb) signal 2
continuing with signal SIGINT(2)
该程序继续执行,但是立即传输该信号,而且处理程序开始运行.

十一. 原文件的搜索
search text:该命令可显示在当前文件中包含text串的下一行。
Reverse-search text:该命令可以显示包含text 的前一行。

十二.UNIX接口
shell 命令可启动UNIX外壳,CTRL-D退出外壳,返回到 gdb.

十三.命令的历史
为了允许使用历史命令,可使用 set history expansion on 命令
(gdb) set history expansion on

小结:常用的gdb命令
backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where)
breakpoint 在程序中设置一个断点
cd 改变当前工作目录
clear 删除刚才停止处的断点
commands 命中断点时,列出将要执行的命令
continue 从断点开始继续执行
delete 删除一个断点或监测点;也可与其他命令一起使用
display 程序停止时显示变量和表达时
down 下移栈帧,使得另一个函数成为当前函数
frame 选择下一条continue命令的帧
info 显示与该程序有关的各种信息
jump 在源程序中的另一点开始运行
kill 异常终止在gdb 控制下运行的程序
list 列出相应于正在执行的程序的原文件内容
next 执行下一个源程序行,从而执行其整体中的一个函数
print 显示变量或表达式的值
pwd 显示当前工作目录
pype 显示一个数据结构(如一个结构或C++类)的内容
quit 退出gdb
reverse-search 在源文件中反向搜索正规表达式
run 执行该程序
search 在源文件中搜索正规表达式
set variable 给变量赋值
signal 将一个信号发送到正在运行的进程
step 执行下一个源程序行,必要时进入下一个函数
undisplay display命令的反命令,不要显示表达式
until 结束当前循环
up 上移栈帧,使另一函数成为当前函数
watch 在程序中设置一个监测点(即数据断点)
whatis 显示变量或函数类型
****************************************************
 GNU的调试器称为gdb,该程序是一个交互式工具,工作在字符模式。在 X Window 系统中,有一个gdb的前端图形工具,称为xxgdb。gdb 是功能强大的调试程序,可完成如下的调试任务:
  * 设置断点;
  * 监视程序变量的值;
  * 程序的单步执行;
  * 修改变量的值。
  在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。可在 makefile 中如下定义 CFLAGS 变量:
   CFLAGS = -g
   运行 gdb 调试程序时通常使用如下的命令:
   gdb progname

  在 gdb 提示符处键入help,将列出命令的分类,主要的分类有:
  * aliases:命令别名
  * breakpoints:断点定义;
  * data:数据查看;
  * files:指定并查看文件;
  * internals:维护命令;
  * running:程序执行;
  * stack:调用栈查看;
  * statu:状态查看;
  * tracepoints:跟踪程序执行。
  键入 help 后跟命令的分类名,可获得该类命令的详细清单。


gdb 的常用命令
命令 解释
  break NUM 在指定的行上设置断点。
  bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。
  clear 删除设置在特定源文件、特定行上的断点。其用法为clear FILENAME:NUM
  continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而 导致停止运行时。
  display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。
  file FILE 装载指定的可执行文件进行调试。
  help NAME 显示指定命令的帮助信息。
  info break 显示当前断点清单,包括到达断点处的次数等。
  info files 显示被调试文件的详细信息。
  info func 显示所有的函数名称。
  info local 显示当函数中的局部变量信息。
  info prog 显示被调试程序的执行状态。
  info var 显示所有的全局和静态变量名称。
  kill 终止正被调试的程序。
  list 显示源代码段。
  make 在不退出 gdb 的情况下运行 make 工具。
  next 在不单步执行进入其他函数的情况下,向前执行一行源代码。
  print EXPR 显示表达式 EXPR 的值。

******gdb 使用范例************************
-----------------
清单 一个有错误的 C 源程序 bugging.c
代码:

-----------------
1 #i nclude
2
3 static char buff [256];
4 static char* string;
5 int main ()
6 {
7   printf ("Please input a string: ");
8   gets (string);  
9   printf ("\nYour string is: %s\n", string);
10 }


-----------------
  上面这个程序非常简单,其目的是接受用户的输入,然后将用户的输入打印出来。该程序使用了一个未经过初始化的字符串地址 string,因此,编译并运行之后,将出现 Segment Fault 错误:
$ gcc -o bugging -g bugging.c
$ ./bugging
Please input a string: asfd
Segmentation fault (core dumped)
为了查找该程序中出现的问题,我们利用 gdb,并按如下的步骤进行:
1.运行 gdb bugging 命令,装入 bugging 可执行文件;
2.执行装入的 bugging 命令 run;
3.使用 where 命令查看程序出错的地方;
4.利用 list 命令查看调用 gets 函数附近的代码;
5.唯一能够导致 gets 函数出错的因素就是变量 string。用print命令查看 string 的值;
6.在 gdb 中,我们可以直接修改变量的值,只要将 string 取一个合法的指针值就可以了,为此,我们在第8行处设置断点 break 8;
7.程序重新运行到第 8行处停止,这时,我们可以用 set variable 命令修改 string 的取值;
8.然后继续运行,将看到正确的程序运行结果

Tuesday, November 11, 2008

算法链接

更多精彩请到 http://www.139ya.com

链表
LRU (Least Recently Used) list : 最近最少被使用

算法:

打印数列: http://topic.csdn.net/u/20070114/14/1170e023-e8f0-4331-8bd8-516c6f1e40da.html

数据结构笔记: http://www.luocong.com/dsaanotes/index-Z-H-1.htm#node_toc_start

保持联系...

更多精彩请到 http://www.139ya.com

但凡提到"保持联系",那就是说很可能要"切断联系"了,至少是要有相当长的一段时间要不怎么联系了,尤其在这样寒冷的冬天。

这两天离职的同事都撤了,邮箱里收了一堆"keep in touch", "goodbye","farewell"之类的邮件,这还算少的,据传老大们都已经提前和大家沟通了,离职前不要大范围的发诸如此类的邮件,以免影响士气,所以只是各组内部或者一些以前合作过的同事之间相互说说再会,留了联系方式。

站起来一眼望去,一半的座位都已经空空如也,只是MSN朋友列表又长出了好多,上次上MSN好像也是为了加要"保持联系
"的同事们。

或许,大家在MSN列表上能时不时的看到你在线就算是"保持联系"了吧...

Monday, November 10, 2008

一元钱能买什么

更多精彩请到 http://www.139ya.com



  一元钱在海口----

  两斤荔枝、两个木瓜、三个杨桃、四个芒果、半个火龙果、一杯椰子汁、一趟公交车、一份南国都市报或特区报、一杯香喷喷的珍珠奶茶、海南师范大学一小时的上机费、坐一次海南大学的观光车、一小碗炒粉、一碗海南腌粉、洗三张数码照片~可以买的真多,东西好便宜!

  一元钱在喀什----

  喀什的水果很便宜的,比海口还多,而且营养丰富,水果养人呀,来看看水果价钱,嘿嘿,哈密瓜、葡萄都是差不多5毛钱一公斤哒,^_^,一元钱可以买呦~一大串烤肉、2个小馕、2个小布丁、2个烤包子(流口水了)、2碗酸奶(超级划算和怀念)3、小袋葡萄干、吃拉面或者抓饭的时候加份面或者饭吧~"不到新疆不知祖国之美、不到喀什不知物产丰富呀~"

  一元钱在武汉--

  一碗热辣喷香的热干面;炎炎夏日一杯凉爽的冰冻奶茶;武汉大学工学部一食堂两个肉包子;离校大学生毕业甩卖的一本书或者两盘磁带或者3本杂志;买一个糯玉米或者甜玉米;半吨水;2根油条;2个面窝;4个小煎包或者蒸包,一碗蛋酒,一碗稀饭,2个油饼;买过期杂志一本;停电时用的,白蜡烛一对;小葱一堆,2毛一小把;2B铅笔2支;袋装洗发水2袋......

  一元钱在广州--

  一包盐;一包陈皮;一支五羊绿豆或红豆批;两根伊利小布丁;一杯清心堂鲜榨甘蔗汁;早餐两包子;一张非空调公共汽车票;一份南方都市报;五羊牌的菠萝冰;一块钱也挺好花的,但如果把一块钱放乞丐的盆子里,他可能鸟都不鸟你......

  一元钱在北京--

  一个鸡蛋灌饼;一杯豆浆;3个小得像饺子一样的水煎包;一串烤串;单位食堂的一碗馄饨;十站地之内的公共汽车;3份报纸(晨报+京华+信报);1根特普通的冰棍;1个卤蛋;一街机游戏币;一瓶黑加仑;一袋小浣熊方便面;上半小时网;在城管没来之前的小摊上买一个手机链;一袋杂牌牛奶;一根号称韩国进口的圆珠笔,最便宜的是8毛钱,在以前的万通;1元钱可以停车半小时;如果使用1 块钱的硬币,则可以在做判断对错题时提供答案,准确率50%......

  一元钱在深圳--

  一份报纸;上一趟厕所;嘉旺一杯豆浆;嘉旺半根油条;超市里有1块的矿泉水;好像听说有人买到了2个茶叶蛋;打一通公用电话(市内);一根发圈;一份深圳特区报;雀巢糯米糍雪糕......

  一元钱在上海--

  大学里打十瓶水;一碗绿豆粥;还有一些冷饮也只有一块钱;坐公交车还不能空调的;葱油饼不能配豆浆;上2至5次厕所;超市买1块钱的特价品;坐小巴;打3至5分钟长途电话;买一份申江服务导报;两个鸡蛋或半斤米;施舍乞丐起步价......

  一元钱在南京--

  一份金陵晚报和一份现代快报;大学里半天无聊的课程......

  一元钱在无锡--

  一只鸿运素包;可的一包豆浆;一个糍饭团;两根油条;早点工程一杯南瓜粥;一块黑米糕;一杯路边摊的臭豆腐;买一个大号TT套在头上抢银行......

  一元钱在扬州--

  一趟单程公交汽车;一个鸡蛋饼;两个烧饼;两个包子;自行车停车收费10次;电动车停车收费5次;摩托车停车收费2次;一袋酱油;一杯早餐粥;一个糯米团(夹油条);2串麻辣烫;一份每周电视报;两份扬州晚报......

  一块钱在四川广汉--

  两份报纸;一份一般点的花花绿绿的杂志;四个包子;一杯豆浆;两根油条;公交车(无空调);一份炸洋芋......

  一元钱在成都--

  两串钵钵鸡或者两串烧烤(素的);5个小鹌鹑蛋(茶叶的);一份《快一周》杂志;一份河南大饼;一包薯片;刷一双皮鞋;一碗凉面,一串麻辣烫,一碗刨冰,一晚冰粉,两根油条,一个油饼,一袋豆浆,一个蛋糕,一个冰淇淋;可以吃一碗一两的肉末

  一元钱在桂林--

  一元钱啥业干不了,2两素米粉都要1块2;没空调的公交车也要1块2;2个包子啦;2个麻辣串啊;报纸;1杯豆浆;1个糯米饭;一碗10个的小馄饨......

  一元钱在厦门--

  一趟无空调的公交车;自行车打气5次;2个麻花;一个肉包;2个菜包;一杯小杯的泡沫红茶(绿茶);古龙豆浆一杯;2串米血;2个碗膏;一碗只加基础料的漳州四果汤......

  一元钱在温州--

  上2趟厕所;一杯豆浆(接近于白开水);一份都市报;双层巴士的单程票;给乞丐的最少面额......

  一元钱在苏州--

  买6块臭豆腐;一串烧烤;一块小摊上的哈密瓜;一小块西瓜;两个烧饼;5至7个锅贴;一份报纸;公共电话3至5分钟......

  一元钱在昆明--

  臭豆腐;两串烧烤;两个包子或馒头......

  一元钱在西安--

  可以坐公交;买一个大华饭店的虾肉包子;蒙牛有很多1元的雪糕卖;3根油条......

  一元钱在济南--

  买一根口味一般的雪糕,或者两根老冰棍;两份报纸;在小摊上买两根蔬菜麻辣串......

  一元钱在杭州--

  一张站台票、一杯豆浆、两根葱、一副葱包桧......

  一元钱在广西玉林--

  一趟单程公车;半斤荔枝;两根油条;两包子(肉的素的都有一样);两份路边摊烫青菜......

  一元钱在贵州--

  口渴了,我可以买一杯冰水,喝了水之后我就不渴了,我很快乐;肚子饿了,我可以买一块小蛋糕,吃掉之后我就不饿了,我很快乐;想他了,我可以打一个电话给他,说几句甜蜜而亲热的话,我很快乐;天冷了,我可以买一块刚刚烤好的红薯,又好吃又暖手,我很快乐;天黑了,我可坐公车回到家里,家里有吃的,有喝的,有玩的,还有一个爱的人,我很快乐;无聊了,我可以去抓一个可爱的小公仔,我可以买几个黄瓜胡萝卜什么的给晚饭做一个漂亮的围边,我很快乐;可以买到一朵新鲜的玫瑰!好香的花,把它放在桌子上,别在衣服上,或者干脆戴在头上好了,一元钱能让我有这么多的方式快乐,快乐一点不好吗?

  一元钱在南昌--

  能买五个面包......

  一元钱在大连--

  乘坐公交车(小公汽和部分联营中程客车除外);一根普通雪糕、四根"金州红小豆"冰棍、一个蛋卷冰淇淋;两个杂粮面包;两个面包房的蛋挞;两个韭菜合子;一个卷饼;一份超大量的豆腐脑、一串号称正宗的臭豆腐、一份很少量的焖子;一瓶小容量可乐、雪碧、芬达、七喜、美年达;一双鞋垫、两副鞋套;一份大连电视报、两份晚报或商报或晨报以及任何价值五角的报纸(不包括球报女报)。

  二支真实程度可疑的2B铅笔;三块普通橡皮;很薄的塑料三角板一套;固体胶棒一支;普通圆珠笔或水笔一支;32开书皮三张;16开书皮一张半;普通包装纸一张;普通彩花一条;编中国结用的彩绳两根,皮绳两根,粗棉绳一根,粉色水晶珠一颗;另可以在家乐福或沃尔玛的物品寄存处寄存一次(不需花钱,但是操作必需一元硬币一枚)......

  一元钱在四川内江--

  串串香5串(成品);玉林10串;钵钵鸡4串(素的)2串(荤的);凉粉;凉面;冰粉;凉虾;凉糕;绿豆沙;八宝粥均一碗;公交5站内2次;品牌纯净水 1瓶;天友纯牛奶250ML;果味酸奶125ML;五香或麻辣土豆条2碗;租书两本(前提押金若干);小灵通市话5分钟+长话2分钟+接听免费;馅多的包子2个,饺子5个;肉锅魁1个......

  一元钱在福州--

  1碗拌面(粉,、捞化、空心菜、小白菜、扁肉);一碗清汤面(粉干、捞化、扁肉);一盒"三合饭";2份海都报;单程中巴(看路途看车);2至3分钟的长途电话或差不多10分钟的市话;路边一串荤烧烤或2串素烧烤;小杯珍珠奶茶;一串关东煮;一瓶矿泉水;停摩托车两次;杨州小龙包3个;上2至3次厕所......

  一块钱在重庆--

  早上早的话可以买4份5毛的报纸,一份渝报、新女报、热报;单程无人售票车车费;十根拉丝糖或在中小学门口的小零食两包;玻璃瓶的百事或可口可乐一系列的;重庆主城区:吃一串烤肠;在超市买一瓶矿泉水(500-600ml);可以在街头擦一双皮鞋(皮靴不行);街头的早餐锅贴一元四个、白粥一元一碗(咸菜随便吃)、盐茶蛋一元两个、豆浆一元两杯或两小袋;夏天的冰粉、凉虾、西米露几乎都是一元一碗(除了沙坪坝金诚广场旁那条小吃巷子及其他人流量异常多的地方要卖2元);据说重庆的花市在淡季红玫瑰能买到五毛一支的......

  一元钱在河北石家庄--

  一趟单程的公交车;3份报纸;3个烧饼;1瓶矿泉水(只限几个牌子);1袋儿普通装三鹿纯牛奶......

  一元钱在山东--

  乘坐一次普通公交车;或两份报纸(齐鲁晚报+山东商报还剩一毛钱);打4分钟长途;买2个5毛的冰爽或一瓶纯净水......

  一元钱在江门--

  买一条斋肠;一杯无糖豆浆(加糖的要1.2元);一个菠萝包;两只蛋挞;一条油条;两份葱;自行车打气两次;打发一个乞丐......

  一元钱在河南--

  5个馒头;4个或5个烧饼;一趟公交车,一碗糊辣汤、一碗豆腐脑......

Saturday, November 8, 2008

天下没有不散的筵席

更多精彩请到 http://www.139ya.com

裁员...

“这是一场漫长的战争,也是一场艰苦的战争。你们英勇并且骄傲地为祖国作战,你们是不平凡的一群,彼此紧密相连,这样的情谊存在也只存在于战斗中。象兄弟一样,共同使用散兵坑,在最需要的时刻彼此互相扶持,你们共同面对死亡,一同接受磨难。最后,我想说的是,我为能够与你们每个人共同服役而感到骄傲。你们有权享受永远快乐而和平的生活”

---兄弟连

做了三年的LJ说停就停了,我们组也随之解散,或者回到合作公司,或者被打散到其他的产品组,好在大家都还有工作,虽然可能还是暂时的..., 不管怎样,我会一直记住这段日子,那种感觉就好像重新回到了校园,或许兄弟连里最后的一句台词很适合这种感觉,“我很珍惜这段记忆。有天我孙子问我一个问题,他问我:‘爷爷,你是大战中的英雄吗?’爷爷回答:‘不是,可是我与英雄们一起服役。’”

Friday, November 7, 2008

Android核心模块及相关技术


更多精彩请到 http://www.139ya.com


转自android 开发者论坛

Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。根据Android的软件框图,其软件层次结构自下而上分为以下几个层次:
第一、操作系统层(OS)
第二、各种库(Libraries)和Android 运行环境(RunTime)
第三、应用程序框架(Application Framework)
第四、应用程序(Application)
以下分别介绍Andoid各个层次的软件的重点及其相关技术:

● 操作系统层(OS)
Android使用Linux2.6作为操作系统,Linux2.6是一种标准的技术,Linux也是一个开放的操作系统。Android对操作系统的使用包括核心和驱动程序两部分,Android的Linux核心为标准的Linux2.6内核,Android更多的是需要一些与移动设备相关的驱动程序。主要的驱动如下所示:
显示驱动(Display Driver):常用基于Linux的帧缓冲(Frame Buffer)驱动。
Flash内存驱动(Flash Memory Driver)
照相机驱动(Camera Driver):常用基于Linux的v4l(Video for )驱动。
音频驱动(Audio Driver):常用基于ALSA(Advanced Linux Sound Architecture,高级Linux声音体系)驱动。
WiFi驱动(Camera Driver):基于IEEE 802.11标准的驱动程序
键盘驱动(KeyBoard Driver)
蓝牙驱动(Bluetooth Driver)
Binder IPC驱动: Andoid一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能。
Power Management(能源管理)

● 各种库(Libraries)和Android 运行环境(RunTime)
本层次对应一般嵌入式系统,相当于中间件层次。Android的本层次分成两个部分一个是各种库,另一个是Android 运行环境。本层的内容
大多是使用C++实现的。
在其中,各种库包括:
▅ C库 :C语言的标准库,这也是系统中一个最为底层的库,C库是通过Linux的系统调用来实现。
▅ 多媒体框架(MediaFrameword):这部分内容是Android多媒体的核心部分,基于PacketVideo(即PV)的OpenCORE,从功能上本库一共
分为两大部分,一个部分是音频、视频的回放(PlayBack),另一部分是则是音视频的纪录(Recorder)。
▅ SGL:2D图像引擎。
▅ SSL:即Secure Socket Layer位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
▅ OpenGL ES 1.0 :本部分提供了对3D的支持。
▅ 界面管理工具(Surface Management):本部分提供了对管理显示子系统等功能。
▅ SQLite:一个通用的嵌入式数据库
▅ WebKit:网络浏览器的核心
▅ FreeType:位图和矢量字体的功能。
Android 的各种库一般是以系统中间件的形式提供的,它们均有的一个显著特点就是与移动设备的平台的应用密切相关。

Android 运行环境主要指的虚拟机技术——Dalvik。Dalvik虚拟机和一般JAVA虚拟机(Java VM)不同,它执行的不是JAVA标准的字节码(bytecode )而是Dalvik可执行格式(.dex)中执行文件。在执行的过程中,每一个应用程序即一个进程(Linux的一个Process)。 二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。

● 应用程序框架(Application Framework)
Android的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本
层次提供的首先包含了UI程序中所需要的各种控件:
例如: Views (视图组件)包括 lists(列表), grids(栅格), text boxes(文本框), buttons(按钮)等。甚至一个嵌入式的Web浏览器。
一个Andoid的应用程序可以利用应用程序框架中的以下几个部分:
Activity (活动)
Broadcast Intent Receiver (广播意图接收者)
Service (服务)
Content Provider (内容提供者)

● 应用程序(Application)
Android的应用程序主要是用户界面(User Interface)方面的,通常以JAVA程序编写,其中还可以包含各种资源文件(放置在res目录中)JAVA程序及相关资源经过编译后,将生成一个 APK包。Android本身提供了主屏幕(Home),联系人(Contact),电话(Phone),浏览器(Browers)等众多的核心应用。同时应用程序的开发者还可以使用应用程序框架层的API实现自己的程序。这也是Android开源的巨大潜力的体现。

Android emulator how to

更多精彩请到 http://www.139ya.com

http://tungchingkai.blogspot.com/2008/09/how-to-android-emulator.html

(1) How to install emulator only (that is no JDK, Eclipse IDE or compiler)

(a) Download Android SDK from
http://code.google.com/android/download_list.html

The current version is
android-sdk-windows-1.0_r1.zip (windows)
android-sdk-linux_x86-1.0_r1.zip (linux)

unzip it and put the folder (android-sdk-windows-1.0_r1) to say under

Windows OS

D:\Android\


Linux / Mac OS X

~/Android/


(b) start the emulator in command windows (windows-R -> cmd) / (Linux/Mac OS X -> Terminal) for the first time to setup data directory

Windows OS

D:
cd D:\Android\android-sdk-windows-1.0_r1\tools
emulator -datadir D:\Android


Linux / Mac OS X

cd ~/Android/android-sdk-linux_x86-1.0_r1/tools
./emulator -datadir ~/Android


(2) How to create sdcard for emulator (e.g. 500M)
e.g. To create a sdcard image of 500M with filename sd500m.img

Windows OS

D:
cd D:\Android\android-sdk-windows-1.0_r1\tools
mksdcard -l SD500M 500M D:\Android\sd500m.img

Linux / Mac OS X

cd ~/Android/android-sdk-linux_x86-1.0_r1/tools
./mksdcard -l SD500M 500M ~/Android/sd500m.img


when starting the emulator and adding -sdcard option
Windows OS

D:
cd D:\Android\android-sdk-windows-1.0_r1\tools
emulator -sdcard D:\Android\sd500m.img [.... other options]


Linux / Mac OS X

cd ~/Android/android-sdk-linux_x86-1.0_r1/tools
./emulator -sdcard ~/Android/sd500m.img [.... other options]


(3) How to scale the emulator size when the emulator screen is out of view of your computer

when starting the emulator and adding -scale option (range from 0.1 to 3)

e.g. start the emulator with a scale of 0.5
Windows OS

D:
cd D:\Android\android-sdk-windows-1.0_r1\tools
emulator -scale 0.5 [.... other options]


Linux / Mac OS X

cd ~/Android/android-sdk-linux_x86-1.0_r1/tools
./emulator -scale 0.5 [.... other options]


(4) How to copy Musics and Pictures to the sdcard image for Android emulator

The sdcard image is a FAT32 image. You just double click the file in Mac OSX to mount it.
Inside it, create folders called Musics and Pictures and put your mp3 files and pictures as per screen dump below

(5) How to copy files to sdcard while the emulator is running or when you cannot mount it.

You can mount the sdcard image while the emulator is running, but sometimes you want to copy files to the sdcard in command line mode run this

Make Sure that the emulator is running
Windows OS

D:
cd D:\Android\android-sdk-windows-1.0_r1\tools
adb push mynotebookphoto.png sdcard/Pictures/


Linux / Mac OS X

cd ~/Android/android-sdk-linux_x86-1.0_r1/tools
./adb push mynotebookphoto.png sdcard/Pictures/


However, the emulator will need to restart so that it can acknowledge the new file. This is currently the limitation of the emulator

when copying back from emulator sdcard to local file
Windows OS

D:
cd D:\Android\android-sdk-windows-1.0_r1\tools
adb pull sdcard/Pictures/image01.jpg images01_fromsdcard.jpg


Linux / Mac OS X

cd ~/Android/android-sdk-linux_x86-1.0_r1/tools
./adb pull sdcard/Pictures/image01.jpg images01_fromsdcard.jpg


(6) How to get shell access to emulator
The emulator must be running, and run this
Windows OS

D:
cd D:\Android\android-sdk-windows-1.0_r1\tools
adb shell


Linux / Mac OS X

cd ~/Android/android-sdk-linux_x86-1.0_r1/tools
./adb shell


(7) How to add path of the emulator tools directory to Windows OS, so as no need to change directory to sdk directory
On Windows, right click on My Computer, and select Properties. Under the Advanced tab, hit the Environment Variables button, and in the dialog that comes up, double-click on Path under System Variables and add this to end of the text
Windows OS

D:\Android\android-sdk-windows-1.0_r1\tools;


Please take note that you have to restart the command window for the path to become effective

(8) How to change skin for the emulator
You can download some iPhone skins for Android emulator here

http://www.anddev.org/emulator_iphone_skin_-_qvga-hvga_landscape-portrait-t109.html

(9) How to change wallpaper, add new icons to homescreen and move/delete icons.

At Home Screen, press Menu

+ Add -> for adding icons to home screen
Wallpaper -> to change wallpaper

You can flip the homescreen to left and right and add icons there

To delete the icon just click and hold the button and a trash will appear above the menu button then you can drag the icon to the trash and delete it

To move the icon, click and hold the icon and then drag to new position.

Thursday, November 6, 2008

裁员

更多精彩请到 http://www.139ya.com

今天,组里一半儿的人都走了,我很难受...而且不知道什么时候还会有余震...

Tuesday, November 4, 2008

Saturday, November 1, 2008

这个冬天有点儿冷

更多精彩请到 http://www.139ya.com


这个冬天有点儿冷,冷的我伸不出手来敲键盘...