所谓的固件就是将操作系统固定在手机中的一个固定的位置(硬件上),平时不随意改动,活动的数据另外单独放一边。
这样做的目的在于 保护内层的系统程序不受文件操作的影响,提高了稳定性。
但相对的,如果想要升级系统,就必然涉及对固件的读写更新工作。
谷歌的 Android系统就被写入在了固件中,即使想要查看也要专门的软件和权限。
2. 刷固件安装(or 重装)操作系统
正是因为固件固定的原因,在我们想要更新系统的时候。就需要将原固件的文件删掉,将新的文件拷进去。
于是就有了刷固件这么一回事。
就像Windows安装系统一样,把安装盘放进去就可以直接安装。
A系统毕竟还没满一岁(从开始用算),还没有什么直接安装系统的软 件。(以后肯定有!)所以让我们自己动手安装吧。
3. ROM(包)系统的安装盘
这个东西就是A系统的打包。我们刷机的时候就是将这个东西刷进固件的。
当然,由于A系统的开源性质,我们可以自由的改动这个包。
涉及高端知识。回避这个问题。
像经常提到的RC XX,G2 Rom,还有x.x.x的之类的东西,都是指的包的版本。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)就是被改动成各式各样的包。
4. 固件版本
由于是谷歌公司在专门开发这个系统,官方放出的话必然是所有G友手机升级的风向标。
固件版本就是官方制定的基础系统,所有的改包都 会从官方的包开始改。
所以官方的一次升级必然会影响整个手机系统的使用情况。
就像现在大家都在用XP,微软放出了一个补丁包,于 是大家都去升级了。
目前RC33的固件版本是1.4。。(有G友指出这个版本是1.1。。没有仔细研究)
但Cupcake和 G2ROM都是1.5的固件版本,有了很大的更新。
5. ROOT
Root是一个你使用系统的权限,是最高的,有了root权限就可以更改内部系统的文件了。
为了防止软件更改系统文件(病 毒?),A系统隐藏了root权限,也就是一般情况下不能修改系统文件。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)但是。。我们要刷机。所以我们就要取得Root权限
6. JF自制固件
JF自制固件是某达人改的固件的一个,主要特点就是它有自制的recovery恢复模式。可以刷写你自己的包
我们就用JF的固件作 为刷机的基础,开始无穷无尽的刷机(汗)。
7.图老师何为 Radio 包
无线通信模块的驱动程序,ROM 是系统程序 Radio 负责网络通信,ROM 和 Radio 可以分开刷,互不影响。如果你的手机刷新了 ROM 后有通讯方面的问题可以刷新 RADIO 试一试。
8.ROM 的分类
一般分为两大类,一种是出自手机制造商官方的原版ROM,特点是稳定,功能上随厂商定制而各有不同;另一种 是开发爱好者利用 GOOLGE 官方发布的源代码自主编译的原生 ROM(如啊兴编译的安卓网友协作 ROM 、国外的 CM 系列等等),特点是根据用户具体需求进行调整,使 ROM 更符合不同地区用户的使用习惯,如 啊兴的安卓系列 ROM 就是专门针对中文用户制作,CM 系列的 ROM 则更加适合国外用户。
另外还有一些热心网友自己进行美化或修改的 ROM ,一般都是基于原生 ROM 制作,也很受大家欢迎。
9.ROM 的选择
不同版本的 ROM 有不同的特点,稳定型,速度型,美观型,自己喜欢什么就选择什么,正所谓萝卜青菜各有所爱。
需要注意的是,同学们在刷机之前,要认真地查阅 此版本 ROM 的注意事项,个别情况下会出现不同 ROM 之间互不兼容的现象。
10.刷机方法的种类
1. 恢复模式,用update.zip文件;
2. 进入工程模式,刷新.NBH文件;
3. 使用开发版的工程模式,进行 fastboot 刷机。
什么是Android?
Android是基于Linux内核的软件平台和操作系统,是Google在2007年11月5日公布的手机系统平台,早期由Google开发,后由开放手机联盟(英语:Open Handset Alliance)(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。低层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java 作为编写程序的一部分。另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟。
Android在未公开之前常被传闻为Google电话或gPhone。大多传闻认为Google开发的是自己的手机电话产品,而不是一套软件平台。到了2010年1月,Google始发表自家品牌手机电话的Nexus One。
Android历史
开发:
Google于2005年并购了成立仅22个月的高科技企业Android,展开了短信、手机检索、定位等业务,同时基于Linux的通用平台也进入了开发。
2008 Patrick Brady于Google I/O 演讲Anatomy & Physiology of an Android,并提出的 Android HAL 架构图。HAL 以 .so 档的形式存在,可以把 Android framework 与 Linux kernel 隔开。
公布前的传闻:
Google的东南亚销售与营运常务董事Richard Kimber曾说:"At this point in time, we are very focused on the software, not the phone.(目前我们完全专注于软件而非电话)"。可是Google并未正式否认正在制作电话的传闻,Google可能与一家硬件生产商合作创作 Google Phone。
传言指出Google Phone将提供完全免费的服务,Google会通过广告获取收益。Google Phone的发布日期预期为2009年。
LG宣布将于2007年第二季开始在其手提电话产品中安装Google的软件。
Android版本升级
Android系统今后将继续每半年一次的升级步伐,分别定在每年的夏天和年终。每代Android系统都将以食物命名,比如1.5版叫做 Cupcake(纸杯蛋糕),1.6版为Donut(甜甜圈),然后是Eclair(法式奶油夹心甜点)和Flan(水果馅饼)。Donut将把社交网络功能作为升级重点,在手机的各种体验中都增加社交网络元素。
对手机行业的影响:
已经与[Sony Ericsson]、[HTC]、NTT DoCoMo、KDDI、Motorola等世界移动领域34家公司于免费提供达成一致。今后对于移动通讯的影响势必会进一步体现出来。但是如此广泛公司的同盟是否能够有效运作及以持久值得拭目以待。
发布:
1.5 (Cupcake)
基于Linux Kernel 2.6.27 2009年4月30日,官方1.5版本(Cupcake)的Android发布。主要的更新如下:
● 拍摄/回放视频,并支持上传到youtube
● 支持立体声蓝牙耳机,同时改善自动配对性能
● 最新的采用WebKit技术的浏览器,支持拷贝/粘帖和页面中搜索
● GPS性能大大提高
● 屏幕虚拟键盘
● 主屏幕增加音乐播放器和相框widgets
● 应用程序自动随着手机旋转
● 短信,Gmail,日历,浏览器的用户界面大幅改善,比如说Gmail现在可以批量删除邮件了
● 相机启动速度加快,拍摄图片可以直接上传到picasa
● 来电照片显示
1.6 (Donut)
基于Linux Kernel 2.6.29 2009年9月15日, 1.6(Donut)版本SDK发布。主要的更新如下:
● 完全重新设计的Android Market
● 手势支持
● 支持CDMA网络
● 文字转语音系统(TXT-2-speech)
● 快速搜索框
● 全新的拍照界面
● 应用程序耗电查看
● 支持VPN
● 支持更多的屏幕分辨率
● 支持OpenCore2媒体引擎
● 新增面向视觉或听觉困难人群的易用性插件
2.0/2.0.1/2.1(Eclair)
基于Linux Kernel 2.6.29 2009年10月26日, 2.0(Eclair)版本SDK发布。主要的更新如下:
● 优化硬件速度
● "Car Home"程序
● 支持更多的屏幕分辨率
● 重整界面
● 新的浏览器的用户界面和支持HTML5
● 新的联系人名单
● 更好的白色/黑色背景比率
● 改进Google Maps 3.1.2
● 支持Microsoft Exchange
● 支持内置相机闪光灯
● 数字变焦
● 改进的虚拟键盘
● 蓝牙2.1
Android的代号序列会按甜点名字中首个英文字母(C、D、E、F)的排列顺序。
下一个版本的Android将会命名为Froyo(冻酸奶,基于Linux Kernel 2.6.32)。Froyo 之后的版本的Android将会命名为Gingerbread(姜饼,基于Linux Kernel 2.6.33/34)。
应用程序
以Java为编程语言,使Android从接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个 Activity 类(class)负责建立视窗(window),一个活动中的Activity就是在 foreground(前景)模式,背景运行的程序叫做Service。两者之间通过由ServiceConnection和AIDL链接,达到复数程序同时运行的效果。如果运行中的 Activity 全部画面被其他 Activity 取代时,该 Activity 便被停止(stopped),甚至被系统清除(kill)。
View等同于J2ME的Displayable,程序人员可以通过 View 类与XML layout档将UI放置在视窗上,Android 1.5的版本可以利用 View 打造出所谓的 Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的Android Hero手机即含有大量的widget。至于ViewGroup 是各种layout 的基础抽象类(abstract class),ViewGroup之内还可以有ViewGroup。View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity 中,要通过findViewById()来从XML 中取得View,Android的View类的显示很大程度上是从XML中读取的。View 与事件(event)息息相关,两者之间通过Listener 结合在一起,每一个View都可以注册一个event listener,例如:当View要处理用户触碰(touch)的事件时,就要向Android框架注册View.OnClickListener。另外还有Image等同于J2ME的BitMap。
中间件:
操作系统与应用程序的沟通桥梁,并用分为两层:函数层(Library)和虚拟机(Virtual Machine)。
Bionic是 Android 改良libc的版本。Android 同时包含了Webkit,所谓的Webkit 就是Apple Safari 浏览器背后的引擎。Surface flinger 是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的Bionic Libc。
Android采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、 PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
Android 使用skia 为内核图形引擎,搭配OpenGL/ES。skia与Linux Cairo功能相当,但相较于Linux Cairo, skia 功能还只是阳春型的。2005年Skia公司被Google收购,2007年初,Skia GL源码被公开,目前Skia 也是Google Chrome 的图形引擎。
Android的多媒体数据库采用SQLite3数据库系统。数据库又分为共用数据库及私用数据库。用户可通过ContentResolver类 (Column)取得共用数据库。
Android的中间层多以Java 实现,并且采用特殊的Dalvik 虚拟机(Dalvik Virtual Machine)。Dalvik虚拟机是一种寄存器型态(Register Based)的Java虚拟机,变量皆存放于寄存器中,虚拟机的指令相对减少。
Dalvik虚拟机可以有多个instTulaoshi.Comance, 每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik 虚拟机并非运行Java Bytecode,而是运行一种称为.dex格式的文件。
硬件抽像层:
Android HAL 是为了将 Android framework 与 Linux kernel 隔开,降低对 Linux kernel 的依赖,以达成kernel independent。Android HAL 目前以 HAL stub 的形式存在,本身是.so 档,是一种 proxy 的概念。Android runtime 向 HAL 取得 stub 的 operations,再以 callback 的方式操作函数。
操作系统:
Android 是运行于 Linux kernel之上,但并不是GNU Linux。因为在一般GNU/Linux 里的功能,Android 大都没有支持,包括Cairo, X11, Alsa, FFmpeg, GTK, Pango, Glibc等都移除掉了。Android又以bionic 取代Glibc, 以Skia 取代Cairo, 再以opencore 取代FFmpeg 等等。Android 为了达到商业应用,必须移除关于GNU Copyleft 的限制,例如Android将驱动程序移到 userspace,使得Linux driver 与 Linux kernel彻底分开。
目前Android 的 Linux kernel控制包括安全(Security),存储器管理(Memory Managemeat),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等。
注:更多精彩教程请关注图老师手机教程栏目,图老师手机数码群:296605639欢迎你的加入
测试结论:
1)灭屏待机最省电:
a)任何App包括后台Service应该尽可能减少唤醒CPU的次数,比如IM类业务的长连接心跳、QQ提醒待机闹钟类业务的alarm硬时钟唤醒要严格控制;
b)每次唤醒CPU执行的代码应该尽可能少,从而让CPU迅速恢复休眠,比如申请wake lock的数量和持有时间要好好斟酌;
2)WiFi比蜂窝数据,包括2G(GPRS)、3G更省电:
a)尽量在WiFi下传输数据,当然这是废话,不过可以考虑在有WiFi的时候做预加载,比如应用中心的zip包、手Q web类应用的离线资源等;
b)非WiFi下,尽量减少网络访问,每一次后台交互都要考虑是否必须。虽然WiFi接入方式已经占到移动互联网用户的50%,但是是有些手机设置为待机关闭WiFi连接,即便有WiFi信号也只能切换到蜂窝数据;
测试分析:
1)灭屏的情况:
a)灭屏待机,CPU处于休眠状态,最省电(7mA);
b)灭屏传输,CPU被激活,耗电显著增加,即便是处理1K的心跳包,电量消耗也会是待机的6倍左右(45mA);
c)灭屏传输,高负载download的时候WiFi最省电(70mA),3G(270mA)和2G(280mA)相当,是WiFi的4倍左右;
2)亮屏的情况:
a)亮屏待机,CPU处于激活状态,加上屏幕耗电,整机电量消耗不小(140mA);
b)亮屏传输,如果只是处理1K的心跳包,耗电增加不多(150mA),即便是很大的心跳包(64K),消耗增加也不明显(160mA);
c)亮屏传输,高负载download的时候WiFi最省电(280mA),3G(360mA)和2G(370mA)相当,是WiFi的1.3倍左右;
3)Alarm唤醒频繁会导致待机耗电增加:
手机灭屏后会进入待机状态,这时CPU会进入休眠状态。Android的休眠机制介绍的文章很多,这里引用一段网络文章:
Early suspend是android引进的一种机制,这种机制在上游备受争议,这里 不做评论。这个机制作用在关闭显示的时候,在这个时候,一些和显示有关的 设备,比如LCD背光,比如重力感应器,触摸屏,这些设备都会关掉,但是系统可能还是在运行状态(这时候还有wake lock)进行任务的处理,例如在扫描SD卡上的文件等.在嵌入式设备中,背光是一个很大的电源消耗,所以android会加入这样一种机制.
Late Resume是和suspend配套的一种机制,是在内核唤醒完毕开始执行的.主要就是唤醒在Early Suspend的时候休眠的设备.
Wake Lock在Android的电源管理系统中扮演一个核心的角色. Wake Lock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得.这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁.如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠.
当用户写入mem或者standby到/sys/power/state中的时候, state_store()会被调用,然后Android会在这里调用request_suspend_state()而标准的Linux会在这里进入enter_state()这个函数.如果请求的是休眠,那么early_suspend这个workqueue就会被调用,并且进入early_suspend
简单的说,当用户按power键,使得手机进入灭屏休眠状态,Android系统其实是做了前面说的一些工作:关闭屏幕、触摸屏、传感器、dump当前用户态和内核态程序运行上下文到内存或者硬盘、关闭CPU供电,当然为了支持语音通讯,modern等蜂窝信令还是工作的。
这种情况下,应用要唤醒CPU,只有两种可能:
a)通过服务器主动PUSH数据,通过网络设备激活CPU;
b)设置alarm硬件闹钟唤醒CPU;
这里我们重点分析第二种情况。首先来看看什么是alarm硬件闹钟。Google官方提供的解释是:Android提供的alarm services可以帮助应用开发者能够在将来某一指定的时刻去执行任务。当时间到达的时候,Android系统会通过一个Intent广播通知应用去完成这一指定任务。即便CPU休眠,也不影响alarm services的服务,这种情况下可以选择唤醒CPU。
显然唤醒CPU是有电量消耗的,CPU被唤醒的次数越多,耗电量会越大。现在很多应用为了维持心跳、拉取数据、主动PUSH会不同程TuLaoShi.com度地注册alarm服务,导致Android系统被频繁唤醒。这就是为什么雷军说Android手机在安装了TOP100的应用后,待机时间会大大缩短的重要原因。
比较简单评测CPU唤醒次数的方法是看dumpsys alarm,这里会详细记录从开机到当前的各个进程和服务唤醒CPU的次数和时间。通过对比唤醒次数和唤醒时间可以帮助我们分析后台进程和服务的耗电情况。Dumpsys alarm的输出看起来像这样:
其中544代表唤醒次数,38684ms代表唤醒时间。
4)Wake locks持有时间过长会导致耗电增加:
Wake locks是一种锁机制,有些文献翻译成唤醒锁。简单说,前面讲的灭屏CPU休眠还需要做一个判断,就是看是否还有任何应用持有wake locks。如果有,CPU将不会休眠。有些应用不合理地申请wake locks,或者申请了忘记释放,都会导致手机无法休眠,耗电增加。
原始数据:
测试方法:硬件设备提供稳压电源替代手机电池供电,在不同场景下记录手机平均电流。
测试设备:Monsoon公司的Power Monitor TRMT000141
测试机型:
测试用例:
灭屏benchmark(CPU进入休眠状态):7mA
灭屏WiFi:70 mA
灭屏3G net:270 mA
灭屏2G net GPRS:280mA
亮屏benchmark:140mA
亮屏wifi:280mA
亮屏3G net:360mA
亮屏2G:370mA
亮屏待机:140mA
亮屏wifi ping 1024包:150mA
亮屏wifi ping 65500包:160mA
灭屏 屏1024:45mA
灭屏ping 65500:55mA
关闭所有数据网络待机:7mA