搜档网
当前位置:搜档网 › 智能手机模拟蓝牙键盘--基于Android平台的实现研究

智能手机模拟蓝牙键盘--基于Android平台的实现研究

智能手机模拟蓝牙键盘--基于Android平台的实现研究
智能手机模拟蓝牙键盘--基于Android平台的实现研究

智能手机模拟蓝牙键盘——基于Android 平台的实现研究

刘锦伟

(湖南城建职业技术学院公共基础课部,湖南湘潭411101)

摘要:该文主要分析如何在现今非常红火的Android 平台上,利用Android 现有架构实现智能手机模拟蓝牙键盘的功能。侧重点在于其原理及实现方案要点,不深入探讨实现的代码细节。

关键词:智能手机;模拟;蓝牙键盘;Android 平台

中图分类号:TN929文献标识码:A 文章编号:1009-3044(2013)13-3136-04

1蓝牙在Android 平台上的应用

2007年6月,苹果公司在美国推出iphone ,由此拉开了智能手机的时代。随后,Google 公司推出基于Linux 平台的开源智能手机操作系统—Android ,其市场份额很快直追iOS 和RIM 。除了智能手机,平板电脑厂商也相继推出Android 平台的产品。Android 从最初的1.0发展到现在的2.3,以及专门面向平板电脑的3.0版本,功能越来越丰富,系统也越来越稳定。随着无线技术的广泛应用,蓝牙技术在手机上应用也非常广泛,如蓝牙耳机听音乐、打电话;手机间通过蓝牙传输文件或联系人;笔记本电脑通过蓝牙利用手机拨号上网。该文则重点介绍怎样在Android 平台上实现将手机模拟成蓝牙键盘,通过蓝牙连接支持蓝牙HID 的电脑,便可以通过手机操作电脑或向电脑输入数据。

2蓝牙键盘的通信原理

2.1协议栈

蓝牙键盘是基于蓝牙HID profile 来实现。其协议栈如图1所示。

图1

HCI :主机控制接口,与蓝牙适配器间传递数据L2CAP :逻辑链路层HID :人机接口设备服务。2.2通信原理HID 设备(如蓝牙键盘或鼠标等)与HID 主机(如电脑)间需要建立2个L2CAP 通道:控制通道和中断通道。

图2

控制通道:用于传输一些控制信息,如断开虚拟缆线。

中断通道:传输HID 设备的报告数据,如按键等。

连接过程可以由HID 主机或HID 设备发起,先建立控制通道,然后中断通道。两个通道都建立好后,HID 设备即可开始传输事件(如键盘按键等)。

3蓝牙键盘模拟应用的功能场景

3.1配对/解除配对

配对是两个蓝牙设备间建立信任关系的过程;

收稿日期:2013-03-12

第9卷第13期(2013年05月)

Computer Knowledge and Technology电脑知识与技术

一般由HID host发起这个配对过程。

HID host搜索周边HID设备;

HID host发起配对

HID host端输入pin码验证

键盘端输入pin验证

如果host和键盘的pin码一致,验证通过,双方建立好信任关系(生成linkkey);

解除配对的过程可以由host或者蓝牙键盘任何一方发起,解除配对的一方会将自己保存的对方的linkkey删除,信任关系解除。

3.2可被发现模式

蓝牙键盘需要置为可被发现模式,才能被没有配对蓝牙键盘的设备搜索发现;

3.3连接/断开连接

由Host发起连接:Host发起连接请求,键盘接受请求,即可完成连接;

由蓝牙键盘发起连接:蓝牙键盘虽然无法搜索或显示周围的host,但如果上次连接的Host的信任关系还保存着,只要有按键操作,键盘也会主动尝试连接最后一次连接的Host。

Host和键盘都可以发起断开连接操作。

3.4键盘输入

键盘与Host建立好连接后,在键盘按键输入就可以反映到Host端,操作就同通过usb连接到电脑的键盘对电脑进行输入一样。4蓝牙键盘模拟应用的实现

4.1Android平台蓝牙协议栈实现现状

在标准的Android平台2.0及其之后,已提供了基于Bluez的开源蓝牙协议栈,并实现了A2DP、HFP、OPP等服务。

图3

Bluez支持主机连接HID设备,但将手机模拟成键盘,就需要实现手机作为HID设备,不过不要紧,HID所依赖的L2CAP层协议都已经实现好了,只需要基于L2CAP便可以实现HID层。

4.2软件架构及功能模块

图4

带星号标注的模块是实现此功能需要新增或改造的模块:深蓝色为新增功能,天蓝色带星号模块为需要改造的模块。

由于Android是基于Linux平台的,其平台总体架构可分为:

Linux Kernel/Driver

Linux Native层(用户空间)

Computer Knowledge and Technology电脑知识与技术第9卷第13期(2013年05月) Java Framework

Java application

其中在Native部分有Java虚拟机,Java应用都在虚拟机上运行。

实现此功能所牵涉到的模块:

Native层Bluez协议栈

Bluez是一个开源的Linux蓝牙协议栈,其中既实现了底层HCI、L2CAP、Rfcomm等底层协议,在Native也实现了a2dp、hfp、hsp、hid等服务。其中的hid服务实现在bluez的插件input.so中,主要是支持Host去连接蓝牙HID设备,如键盘、鼠标等。

这回我们实现的是HID设备端的角色,需要在bluez中实现相应协议。

Bluez主要通过D-Bus接口向外提供接口(D-Bus是一种轻量级的进程间通信技术)。新增的HID设备端实现也需要对外提供相应的D-Bus接口。

Java Framework/JNI层HIDDeviceService服务

JNI是用于java和Native c之间相互调用的技术。

Service是Android中用于后台控制的服务。在该功能实现中我们需要增加一个HIDDeviceService通过JNI去调用Bluez提供的新增的HID设备角色的D-Bus接口。

Java应用层键盘模拟应用(Keyboard simulation app)

提供用户操作的界面。通过该应用,用户可以控制与主机的连接;连接状态可以通过界面进行键盘输入。

4.3模块实现细节

4.3.1Bluez

在Bluez中主要需要实现以下内容:

SDP记录注册

SDP,全称Service Discover protocol,用于宣称设备所支持的服务及搜索周边设备所支持的服务。将手机模拟成蓝牙键盘,就需要将蓝牙键盘在手机上注册相应SDP记录,使得主机可以识别手机为蓝牙键盘设备,并了解键盘所支持的功能特性。

HID设备端通信协议实现

主要处理蓝牙键盘与Host的连接、键盘事件的封装和发送等;

对外D-Bus接口实现

提供给上层JNI调用的接口

4.3.1.1Bluez中SDP记录注册

将手机模拟成蓝牙键盘,需要注册一条服务记录,包含蓝牙键盘所具备的特性。

HID设备相关的SDP属性如下:

HIDParserVersion:属性ID0x0201,16位无符号整型,表示所使用的USB HID规范的版本HIDDeviceSubclass:属性ID0x0202,8位整型数。子HID类,如键盘、鼠标等

HIDCountryCode:属性ID0x0203,8位整型,国家编号,表示设备面向哪个国家。

HIDVirtualCable:属性ID0x0204,8位布尔型,表示是否支持虚拟连接。HIDReconnectInitiate:属性ID0x0205,8位布尔型,表示当与主机的连接断开的时候,HID设备是否支持发起自动重连。HIDDescriptorList:属性ID0x0206,数据序列,HID描述符。详细参考HID规范6.2节。这个属性非常重要,主机能否识别该设备为蓝牙键盘主要靠这个属性的设置。

HIDLANGIDBaseList:属性ID0x0207,为支持多国语言提供关联字符串。

HIDProfileVersion:属性ID0x020B,16位无符号整型,表示蓝牙HID协议版本。

HIDBootDevice:属性ID0x020E,8位布尔型,表示是否支持

这些属性在Bluez的服务启动时应该注册到SDP数据库中,便可以被主机识别。

4.3.1.2HID设备角色的协议实现

HID设备角色的实现主要包括两方面:

连接管理

连接过程可以由HID主机发起,也可以由HID设备发起(连接最后一次连接过的HID主机)。过程分别如下:

HID主机发起连接的情况

为了能接收来自HID主机发出的连接请求,手机端作为HID设备,需要监听主机来的连接请求,对控制通道和中断通道进行监听,如果有主机对这两个端口发起请求,就接受其请求,直到中断通道连接完毕,连接过程成功。

HID设备发起连接的情况

手机端依次主动对最后一次连接过的HID主机的控制通道和中断通道发起连接,中断通道连接成功,则整个连接过程成功。

连接成功后,手机即可开始向HID主机发送按键事件。

2)按键事件发送到Host。

4.3.1.3提供给应用层的DBus接口

命令接口:

管理连接

GetConnectionState(),获取HID设备与主机的连接状态。

True:与某HID主机已连接上。

False:没有与任何HID主机连接。

Disconnect(),断开与主机的连接。

SendKey(Keys[]),为应用层提供发送按键事件的接口。

如果在无任何连接的状态下接收到应用层的发送按键的请求,Bluez中会主动连接最后一次连接过的主机。

2)事件接口:

ConnectionStateChanged

0:Disconnected

1:Connected

4.3.2HIDDeviceService

通过JNI调用Bluez的HID设备的D-Bus接口。

提供给Java应用调用接口。

蓝牙键盘模拟应用通过AIDL接口与Service通信,调用HIDDeviceService提供的接口。

主要接口:

getConnectionState(),获取HID设备的连接状态。

disconnect(),断开与HID主机的连接。

sendKeys(keys[]),发送按键;

广播事件:

HidDeviceStateChangedIntent

当与主机的连接状态发生变化时,Bluez会发出ConnectionStateChanged的事件HIDDeviceService监听到该事件后会发出Hid?DeviceStateChangedIntent广播。

Intent参数:

状态值:整型。

0:没有任何连

1:连接上某主机

4.3.3Keyboard模拟应用

图5蓝牙键盘模拟程序界面

键盘模拟程序主要提供用户操作的界面,主要功能:

显示模拟键盘与HID主机的连接状态

绿色:以连接到某HID主机,在连接状态按下Connected按钮,可以断开与主机的连接;

灰色:没有与任何HID主机连接

显示Caps Lock的状态

绿色:Caps Lock状态;在非Caps Lock状态按下Caps键,将进入该状态;

灰色:非Caps Lock状态;在Caps Lock状态按下Caps键,将进入该状态;

提供各按键的操作按钮

4.3.4其他

将手机置为可被其他设备搜索到的模式的功能已经在标准Android的BluetoothSetting中实现,利用既有功能即可。

(下转第3145页)

图(b)所示。显然,随着细分次数的增加,模型的数据量成4倍速度增长,这必然会影响模型处理的速度。如果对初始控制网格进行自适应Loop细分,取ε=0.02时细分后输出的控制网格如图(c)所示,采用该算法可以比较准确地区分光滑和非光滑区域,并且只针对非光滑的区域进行Loop细分,其三角片数为2137,与传统的Loop细分比较,模型数据量有了明显的减少。另外,在该模型中的大多数区域都是相对平坦的,只有在一些转角、凸点和边缘区域需要用Loop细分。可见,如果一个模型中相对光滑的区域较大时,采用这种自适应算法有着明显的优越性。

4结论

综上所述,本文提出的算法在进行自适应细分的时能较好地实现降低模型中的存储量和运算量;能准确的分辨模型的较光滑和较粗糙区域。另外,作者在后续研究工作中,将对算法的规则和设计进行适当修改,使其能更广泛应用于其他细分曲面模式中。参考文献:

[1]Loop C.Smooth Subdivision Surfaces Based on Triangles[D].Utah,USA:University of Utah,1987.

[2]Catmul E,Clark J.Recursively generated B-spline surfaces Oil topological meshes[J].Computer Aided Design,

1978,l0(6):350-355.

[3]Doo D,Sabin M.Behaviour of recursive division surfaces Deal extra.ordinary points[J].Computer Aided Design,1978,10(6):156-160.

[4]Amresh A,Farin G,Razdan A.Adaptive Subdivision Yw.Hemes for triangle Mesh-es[M].Arizona State University,October5.2000.

[5]Hamid-Reza Pakdel,Faramarz Samavati.Incre-mental Adaptive Loop Subdivision[J].ICCSA2004(3045):237-246.

[6]李桂清,吴壮志,马维银.自适应细分技术研究进展[J].计算机辅助设计与图形学报,2006,18(12):1789-1799.

[7]朱巍.细分曲面理论及其应用研究[D].博士学位论文.中国科学计算大学,精密仪器及机械,2011.

[8]王艳艳,张荣国,王蓉,等.向量线性相关的三角网格自适应Loop细分方法[J].工程图学学报,2009(1):91-96.

[9]吴剑煌,刘伟军,王天然.面向三角网格的自适应细分[J].计算机工程,2006,32(12):14-16

[10]李李,王亚平.裁剪曲面自适应三角化剖分[J].计算机应用,2006(26):2-13.

[11]赵宏庆,彭国华,叶正麟,等.自适应细分方法进行曲面造型[J].计算机应用研究,2006(9):72-76.

[12]钟大平,周来水,周海.自适应混合细分算法研究[J].机械科学与技术,2004,23(9):1090-1092.

[13]孙大松,鞠志涛,孙立镌.约束自适应Loop曲面细分[J].计算机应用研究,2012,29(9):3506-3508.

(上接第3139页)

5结束语

本文重点介绍了智能手机模拟蓝牙键盘的实现方法,进而可以通过蓝牙键盘远程控制电脑。随着智能手机的推广,人们对移动性的充分利用的需求将会越来越多,可以进行近距离通信的蓝牙方式必将成为开发的热点。该文所实现的功能将为移动学习和办公带来极大地便利。

参考文献:

[1]Bluetooth HUMAN INTERFACE DEVICE(HID)PROFILE V1.0,Bluetooth Special Interest Group(SIG)[Z].

[2]Universal Serial Bus Device Class Definition for Human Interface Devices(HID),Version1.11[Z].

智能手机模拟蓝牙键盘--基于Android平台的实现研究

作者:刘锦伟

作者单位:湖南城建职业技术学院公共基础课部,湖南湘潭411101

刊名:

电脑知识与技术

英文刊名:Computer Knowledge and Technology

年,卷(期):2013(13)

参考文献(2条)

1.Bluetooth HUMAN INTERFACE DEVICE (HID) PROFILE V1.0,Bluetooth Special Interest Group (SIG)

2.Universal Serial Bus Device Class Definition for Human Interface Devices(HID),Version1.11

引用本文格式:刘锦伟智能手机模拟蓝牙键盘--基于Android平台的实现研究[期刊论文]-电脑知识与技术 2013(13)

Android系统架构详解

Android系统架构详解 Android系统架构由5部分组成, 分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。 1、Linux Kernel Android relies on Linux version 2.6 for core system services such as security, memory management, process management, network stack, and driver model. The kernel also acts as an abstraction layer between the hardware and the rest of the software stack. Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel层。 2、Android Runtime Android includes a set of core libraries that provides most of the functionality available in the core libraries of the Java programming language. Android包括一个核心库的集合,她们提供了Java编程语言的核心库中的绝大多数功能。 Every Android application runs in its own process, with its own instance of the Dalvik virtual

安卓系统简介及如何分区的

android操作系统的分区 对电脑系统了解的朋友都知道,简单来说,电脑分硬件和软件两大块,软件装在硬盘上,比如操作系统windows,使用者通过windows来控制机器硬件,达到使用电脑的目的。 手机也分为硬件和软件两块,软件则是装在闪存(即flash memory,一种存储器)上的,闪存有大小的区别,就像硬盘有大小一样,看手机硬件配置的时候,通常会看到如下介绍:ROM 512M,RAM 512M,ROM就是指的闪存了,相当于电脑上的硬盘,用来存放操作系统和用户数据等信息。相应的,RAM就是指的内存了。 手机出厂时都是装好系统的,这点类似于电脑世界里面的品牌电脑,通过分析手机闪存上的内容可以知道,android操作系统主要有以下几个重要的分区(包括但不限于): hboot分区----------负责启动。 radio分区----------负责驱动。 recovery分区-------负责恢复。 boot分区-----------系统内核。 system分区---------系统文件。 cache分区----------系统缓存。 userdata分区-------用户数据。 1、hboot(SPL):这里指的是手机上的启动模块,通俗的说,就是负责手机启动引导的一段程序,类似于电脑主板上的BIOS,都是负责底层操作的。和在电脑上刷新BIOS一样,刷错了,电脑就会开不了机,对手机来说也一样,这部分的内容刷错了,手机就会变砖!

2、radio:这里指的是手机上的通讯模块,又叫做基带。负责手机的无线信号,蓝牙,WIFI等设备的管理,也就是说,相当于电脑系统里面的硬件驱动部分。这样说或许也不是特别的准确,大家明白大概的意思就可以了。通常我们所说的刷radio,刷基带,就是指的刷写这一部分,以便解决通话质量、网络连接质量、蓝牙连接等等问题。 3、recovery:字面意思是恢复,手机上的一个功能分区,有点类似于笔记本电脑上的恢复分区。一般大厂出的笔记本,都会自带一个特殊分区,里面保存着系统的镜像文件,当系统出问题的时候,我们可以通过它来一键恢复系统。这里的recovery功能有些类似。其实,他更像是电脑上的小型winPE系统,可以允许我们通过启动到winPE系统上,去做一些备份、恢复的工作。当然,系统自带的recovery基本没用,所以我们通常会刷入一个第三方的recovery,以便实现更多的功能,例如:备份系统,恢复系统,刷新系统等。但官方自带的recovery 也不是一无是处,在使用OTA方式升级系统时候,会检查此分区内容,如果不是原厂自带的,OTA升级就会失败。 4、fastboot:字面意思是快速启动,在这里,其实是一个特殊的工程模式,通过fastboot界面,连接电脑后,我们可以在电脑端通过特殊的指令来操作手机,例如更新radio,就可以通过fastboot来完成。fastboot的级别又要比recovery 来的要高一些,可以完成更底层的一些操作。后面我们会结合实际,来讲解一些fastboot的用法,更详细的资料,大家可以通过网络来学习,这里不再赘述。 5、ADB:android debug bridge,字面意思就是安卓调试桥接,简单点说,它是android系统提供的一套工具,通过它,我们可以在电脑上建立一个连接到手机的通道,然后可以在电脑上向手机发送一些指令,完成一些我们需要做的工作。ADB的用法我们后面也会作相应的介绍。 6、ROM:read only memory,只读存储器。上面我们讲过的,android系统都是安装在闪存里面的,这个闪存,就是一种只读存储器,断电情况下里面的内容不会消失。刷机,就是刷的ROM。有点类似电脑里的硬盘,ROM里面有很多分区,hboot、boot、system等等,前文介绍过的,还记得吗?说到这里,想到一个好笑的事情,某人问老婆,知道什么是ROM吗?答曰:room?不就是房子吗?晕倒,我说的是R O M ,不是R O O M!!奥,那就是小房子了!狂晕!!

Android系统架构简介

Android系统架构简介 Android系统架构简介 目前Android的Linuxkernel控制包括安全、存储器管理、进程管理、网络堆叠、驱动程序模型等。下载Android源码之前,先要 安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git 工作的一个工具。 应用程序 Android系统是基于Linux内核开发,使用Java作编程语言, 使界面到功能,都有层出不穷的变化,其中Activity等同于J2ME 的MIDlet,一个Activity类别负责创建视窗,一个活动中的 Activity就是在foreground(前景)模式,背景执行的程序叫做Service。两者之间透过由ServiceConnection和AIDL连结,达到 复数程序同时执行的效果。如果执行中的Activity全部画面被其他Activity取代时,该Activity便被停止,甚至被系统清除。 View等同于J2ME的Displayable,程序人员可以透过View类别与“XMLlayout”档将UI放置在视窗上,并可以利用View打造出所 谓的Widgets,其实Widget只是View的一种,所以可以使用xml 来设计layout。至于ViewGroup是各种layout的基础抽象类别,ViewGroup之内还可以有ViewGroup。View的构造函数不需要在Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中获取View,Android的View类 的显示很大程度上是从XML中读取的。View与事件息息相关,两者 之间透过Listener结合在一起,每一个View都可以注册eventlistener,例如:当View要处理用户触碰的事件时,就要向Android框架注册View.OnClickListener。另外还有Image等同于 J2ME的BitMap。 中介软件

Android系统原理及开发要点详解.

内容简介 本书全面介绍开放的移动电话平台Android系统,包括Android系统中的Linux 驱动、本地框架、Java框架和Java应用4个层次。本书内容以知识性内容为纲,重点关注开发要点,各个部分内容注重相互照应,按照清晰的思路向读者介绍整个Android系统的原理和开发方法。 本书按照Android系统的框架和各个子系统的主线,重点介绍开发Android应用程序和构建硬件抽象层。其内容涵盖了Android应用程序开发和Android系统移植构建手机系统两大方面。 本书既适合从事Android各个层次开发的工程师阅读,也适合通用嵌入式Linux 系统的学习者使用。 本书购买地址:当当网卓越网中国互动出版网 作者简介 梁泉是移动系统开发资深工程师,在Android领域具有完备的知识和前沿的技术,长期从事一线开发工作。 韩超是中国大陆地区较早参与Android系统开发的人员之一,也是中国大陆的Androidin(机锋网开发社区的核心成员和重要组织者之一;也曾经引领大陆各种相关技术人员进入Android领域,并组织参与国内外的相关枝术交流。 前言 Android 是Google历经数年和投资数亿美元开发出来的智能手机系统,Google 也发起了围绕Android的组织——开放手机联盟,其英文全称为“Open Handset Alliance”。

随着各大移动终端生产商大力开发和生产基于Android的移动智能设 备,Android迅速得到业界和社会的认可,并成为整个产业的热点,基于Android平台的各类人才逐渐成为各大企业竞相争夺的焦点。 Android系统是一个开放的系统,任何公司、个人开发者、爱好者都可以参与其中。对于技术工作者,Android不仅是一个智能手机的系统,也可以作为学习嵌入式Linux系统的较完整的软件平台。 Android是一个较新的系统和技术,因此介绍Android的资料和书籍还比较少,尤其简体中文的书籍,相对更少。本书《Android系统原理及开发要点详解》是一本综合介绍Android系统的书,集合了Androidin社区多位专家作者的经验,精心编写而成。 Android 作为一个庞大的系统,包括了Linux操作系统、各种本地程序、虚拟机和运行环境、Java框架和Java应用程序多方面的内容。这对于初学者是一个非常大的挑战,因此对于学习、研究进而开发Android系统来说,掌握系统的脉络和使用恰当的学习方法是非常重要的,这也是本书的组织主旨。 本书特点为了适应Android系统的情况,本书在内容的编排和组织上具有以下一些重要特点。 保持完整性和层次性本书紧紧把握Android系统的4个层次,分章节介绍,并且有重点地介绍了Android整个系统的代码结构、编译系统、相关工具、各部分组织等全局性内容。这将让读者即使只花费较短的时间,也可以获得对Android 系统大致的感性理解。 提供清晰的框架Android是一个有数百兆大小的较大系统,各部分之间是有机联系的,这就要求Android的学习和开发者需要具有一些软件架构方面的知识。本书为Android整体和重点模块绘制了大量的框图,这样非常有利于帮助读者直观地理解系统。本书在讲述每一个部分时,均列出相关代码的路径,帮助读者对应着进行快速、高效地学习。

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

android系统详细介绍

android Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linu x平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前最好的是Android2.0的摩托罗拉Droid 目录[显示] [编辑本段] 简介 Android是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟(Open Handset Alliance)开发。它采用了软件堆层(software st ack,又名为软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟。Android在未公开之前常被传闻为Google电话或gPhone。大多传闻认为Goog le开发的是自己的手机电话产品,而不是一套软件平台。到了2010年1月,Googl e开始发表自家品牌手机电话的NexusOne。目前最新版本为Android2.1。 对手机行业的影响 已经与HTC、NTT DoCoMo、KDDI、Motorola等世界移动领域34家公司于免费提供达成一致。今后对于移动通讯的影响势必会进一步体现出来。但是如此广泛公司的同盟是否能够有效运作以及持久,让我们拭目以待。 Android手机 2008年9月22日,美国运营商T-MobileUSA在纽约正式发布第一款Goog le手机——T-Mobile G1。该款手机为台湾宏达电代工制造,是世界上第一部使用Android操作系统的手机,支持WCDMA/HSPA网络,理论下载速率7.2Mbps,并支持Wi-Fi。 (左图为Androidlogo) [编辑本段]

安卓操作系统简介

安卓操作系统简介 简言: Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread和Android 3.0 Honeycomb。 系统介绍: Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。 2010年末数据显示,仅正式推出两年的操作系统Android已经超越称霸十年的诺基亚(Nokia)Symbian OS系统,采用Android系统主要手机厂商包括宏达电子(HTC)、三星(SAMSUNG)、摩托罗拉(MOTOROLA)、LG、Sony Ericsson、魅族M9等,使之跃居全球最受欢迎的智能手机平台,Android系统不但应用于智能手机,也在平板电脑市场急速扩张。 系统架构: 应用程序: Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中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自

Android系统文件夹目录结构详解

Android系统文件夹目录结构详解 内容手机核心提示:本文介绍的是Android手机系统的文件夹结构,帮助大家更直观地了解系统,作为查询工具加入收藏夹还是很不错的哦*^_^*\\system\\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\\data\\文件夹中。 下面是详细的介绍: \\system\\app\\AlarmClock.apk闹钟 \\system\\app\\AlarmClock.odex\\system\\app\\Browser.apk浏览器 \\system\\app\\Browser.odex\\system\\app\\Bugreport.apk Bug报告 \\system\\app\\Bugreport.odex\\system\\app\\Calculator.apk计算器 \\system\\app\\Calculator.odex\\system\\app\\Calendar.apk日历 \\system\\app\\Calendar.odex\\system\\app\\CalendarProvider.apk日历提供 \\system\\app\\CalendarProvider.odex\\system\\app\\Camera.apk照相机 \\system\\app\\Camera.odex\\system\\app\\com.amazon.mp3.apk亚马逊音乐 \\system\\app\\Contacts.apk联系人 \\system\\app\\Contacts.odex\\system\\app\\DownloadProvider.apk下载提供 \\system\\app\\DownloadProvider.odex\\system\\app\\DrmProvider.apk DRM数字版权提供 \\system\\app\\DrmProvider.odex\\system\\app\\Email.apk电子邮件客户端 \\system\\app\\Email.odex\\system\\app\\FieldTest.apk测试程序 \\system\\app\\FieldTest.odex\\system\\app\\GDataFeedsProvider.apk GoogleData提供 \\system\\app\\GDataFeedsProvider.odex\\system\\app\\Gmail.apk Gmail电子邮件 \\system\\app\\Gmail.odex\\system\\app\\GmailProvider.apk Gmail提供 \\system\\app\\GmailProvider.odex\\system\\app\\GoogleApps.apk谷歌程序包 \\system\\app\\GoogleApps.odex\\system\\app\\GoogleSearch.apk搜索工具 \\system\\app\\GoogleSearch.odex\\system\\app\\gtalkservice.apk GTalk服务 \\system\\app\\gtalkservice.odex\\system\\app\\HTMLViewer.apk HTML查看器 \\system\\app\\HTMLViewer.odex\\system\\app\\IM.apk即时通讯组件包含MSN、yahoo通 \\system\\app\\ImCredentialProvider.apk\\system\\app\\ImProvider.apk\\system\\app\\ImProvider. odex\\system\\app\\Launcher.apk启动加载器 \\system\\app\\Launcher.odex\\system\\app\\Maps.apk电子地图 \\system\\app\\Maps.odex\\system\\app\\MediaProvider.apk多媒体播放提供 \\system\\app\\MediaProvider.odex\\system\\app\\Mms.apk短信、彩信 \\system\\app\\Mms.odex\\system\\app\\Music.apk音乐播放器 \\system\\app\\Music.odex\\system\\app\\MyFaves.apk T-Mobile MyFaves程序 \\system\\app\\MyFaves.odex\\system\\app\\PackageInstaller.apk apk安装程序 \\system\\app\\PackageInstaller.odex\\system\\app\\Phone.apk电话拨号器 \\system\\app\\Phone.odex\\system\\app\\Settings.apk系统设置 \\system\\app\\Settings.odex\\system\\app\\SettingsProvider.apk设置提供 \\system\\app\\SettingsProvider.odex\\system\\app\\SetupWizard.apk设置向导 \\system\\app\\SetupWizard.odex\\system\\app\\SoundRecorder.apk录音工具

安卓系统文件说明介绍

转:教程:安卓系统文件说明介绍(DIY 你的系统) 执行以下操作需要先注意的: 1. 手机已获得最高权限.备份你的ROM,以便崩溃时还原,备份教程参见此贴备份部分。如何进行备份,论坛里有很多教程,查找下很多的。 2. 备份 \system\app 这个目录到 SD 卡上,这样任何时候都可以将误删的软件重新拷贝还原。 接下来,就打开R.E浏览器或者其它有ROOT权限的浏览器进入系统目录的APP 目录删除文件吧。systme\app 目录。 必删软件:下手不留情,纯粹是一坨累赘 california-gold-rush.apk--- 垃圾收费游戏。必删 rollercoaster.apk ---垃圾收费游戏。必删 peggle.apk ---垃圾收费游戏。---必删 user-support.apk --- 用户支援---。必删 EManual.apk ---用户帮助手册---,必删 LearningClient.apk--- 未知,看名字貌似是和用户手册同一个德性。删除// playnowclient.apk ---PlayNow!收费的在线应用商店。必删 YouTube.apk ---国内无法访问。必删(在国外,港澳台和有购买科学上网服务的朋友可以考虑保留) Facebook.apk ---国内无法访问。必删(在国外,港澳台和有购买科学上网服务的朋友可以考虑保留) Timescape.apk TimeScapeProvider.apk// TimescapePluginManager.apk uWlopProvider.apk SnsContactImageCacheProvider.apk 以上五个程序都是跟 TimeScape 有关,全部删除(这货确实没什么用、删除的时候一定注意文件名相符,防止误删出错,切记) 可删软件:爱删不删,看你需不需要 已删或建议保留:是个人风格的爱好需求,仅供参考 trackid.apk --- 歌曲识别软件。已删(这玩意谁用啊) wisepilot.apk --- GPS 导航软件。建议保留 Email.apk --- 电子邮件,有 gmail 就足够。已删 roadsync.apk --- 不好说这是个什么软件,你自己试一下就知道。已删creatouch-2.apk --- 图画创作软件。建议保留(很好玩哇) Stopwatch.apk --- 记秒器,从零开始计时。建议保留 Timer.apk --- 倒计时,设定一个时间,倒计时到零。已删 Notes.apk--- 便签。已删(最佳替代品: ColorNote) Mms.apk ---短信程序。已删(最佳替代品: Handcent SMS) Music.apk ---音乐播放器。建议保留(其实挺好用的) Video.apk ---电影播放器。建议保留(市场上的电影播放器虽然能保证读取

Android系统启动过程详解

Android系统启动过程详解 Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。 启动的过程如下图所示:(图片来自网上,后面有地址)

下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结, 以下学习过程中代码片段中均有省略不完整,请参照源码。

一Init进程的启动 init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行, 并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。 启动过程就是代码init.c中main函数执行过程:system\core\init\init. c 在函数中执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听…… 下面看两个重要的过程:rc文件解析和服务启动。 1 rc文件解析 .rc文件是Android使用的初始化脚本文件(System/Core/Init/readm e.txt中有描述: four broad classes of statements which are Actions, Commands, Services, and Options.) 其中Command 就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中一部分是linux 命令, 还有一些是android 添加的,如:class_start :启动服务,class_stop :关闭服务,等等。 其中Options是针对Service 的选项的。 系统初始化要触发的动作和要启动的服务及其各自属性都在rc脚本文件中定义。具体看一下启动脚本:\system\core\rootdir\init.rc 在解析rc脚本文件时,将相应的类型放入各自的List中: \system\core\init\Init_parser.c :init_parse_config_file( )存入到 action_queue、action_list、service_list中,解析过程可以看一下parse_config函数,类似状态机形式挺有意思。 这其中包含了服务:adbd、servicemanager、vold、ril-daemon、deb uggerd、surfaceflinger、zygote、media…… 2 服务启动 文件解析完成之后将service放入到service_list中。 文件解析完成之后将service放入到service_list中。 \system\core\init\builtins.c

android系统之属性系统详解

android系统之属性系统详解 1 属性系统概述 (2) 2 property数据的编译 (3) 2.1 /default.prop (3) 2.2 /system/build.prop (4) 2.3 其他属性文件 (8) 3 property的相关实现代码和流程 (9) 3.1 property服务端解析 (10) 3.1.1 Server端代码流程 (10) 3.1.1.1 init.c下的整体流程 (10) 3.1.1.2 创建共享内存区域 (10) 3.1.1.3加载根目录下的default.prop (15) 3.1.1.4加载其余4个属性文件的全部属性,并启动socket监听 (16) 3.1.1.5 property触发器执行函数加入队列 (18) 3.1.1.6 执行队列中的property任务 (19) 3.1.1.7 将property的监听socket加入待检查的socket数组 (20) 3.1.1.8 检查上层有哪些端口连接请求 (20) 3.1.1.9 property设置的响应 (20) 3.1.2 详解server端的property_set (25) 3.1.2.2 find_property (26) 3.1.2.3 prop数据二叉树存取解析 (29) 3.1.2.4 __system_property_update (30) 3.1.2.5 __system_property_add (30) 3.1.2.6 write_persistent_property (30) 3.1.2.7 property_changed (31) 3.2 property系统桥梁 (31) 3.2.1 __system_property_set (32) 3.2.2__system_property_set (33) 3.3 property客户端解析 (34) 3.3.1 客户端C层访问属性系统 (34) 3.3.2 客户端shell命令访问 (35) 3.3.3 客户端java层访问 (36) 4总结 (37) 附录一:《GCC的constructor》 (37)

1 Android系统简介及开发环境的搭建

1了解Android系统 1.1 Android系统介绍 Android是Google 开发的基于Linux 平台的、开源的、智能手机操作系统。Android 包括操作系统、中间件和应用程序,由于源代码开放,Android 可被移植到不同的硬件平台上。 围绕在Google的Android 系统中,形成了移植开发和应用程序开发两个不同的开发方面。手机厂商从事移植开发工作,应用程序开发可以由任何单位和个人完成,开发的过程可以基于真实的硬件系统,还可以基于仿真器环境。 作为一个手机平台,Android 在技术上的优势主要有以下几点: ●全开放智能手机平台 ●多硬件平台的支持:应用程序可通过标准API访问核心移动设备功能。 ●使用众多的标准化技术:可以轻松的嵌入HTML、JavaScript等网络内容 ●核心技术完整,统一:应用程序是平等条件创建的,可被替换或扩展。 ●应用程序可以并行运行。Android是完整的多任务环境,在后台运行时,应用程 序可生成通知引起用户注意。 ●完善的SDK 和文档 ●完善的辅助开发工具 Android 的开发者可以在完备的开发环境中进行开发,Android 的官方网站也提供了丰富的文档、资料。这些都使得Android 系统的开发和运行在一个良好的生态环境中。 1.2 Android系统的软件结构 Android 是一个开放的软件系统,它包含了众多的源代码。从下至上,Android 系统分成4个层次: ●第1 层次:Linux 操作系统及驱动; ●第2 层次:本地代码框架,包含各种类库和运行环境; ●第3 层次:Java 框架; ●第4 层次:Java 应用程序。 Android 的第1 层次由C 语言实现,第2层次由C 和/C++实现,第3、4层次主要由Java代码实现。对于Android 应用程序的开发,主要关注第3层次和第4层次之间的接口。 Android 系统的架构如图所示:

android系统的基本概念

基本概念 1、什么是android android的英文意思是“机器人”,在这里指的是谷歌公司于2007年11月5日宣布的,一种基于linux平台的开源操作系统。 2、android操作系统的历史 Android 1.0,发布于2009年2月 代表机型:T-Mobile G1 Android 1.5,发布于2009年5月 代表机型:摩托罗拉Backflip(MOTO ME600) Android 1.6,发布于2009年9月 代表机型:索尼爱立信X10,摩托罗拉A1680 Android 2.0发布于2009年10月 代表机型:摩托罗拉XT800 Android 2.1,发布于2009年12月 代表机型:摩托罗拉MILESTONE(里程碑)系列 Android 2.2,发布于2010年5月 代表机型:摩托罗拉ME722 里程碑2 Android 2.3,发布于2010年12月7日 代表机型:google Nexus S Android 3.0,发布于2011年2月3日 代表机型:摩托罗拉XOOM(平板电脑)

3、android操作系统的分区 对电脑系统了解的朋友都知道,简单来说,电脑分硬件和软件两大块,软 件装在硬盘上,比如操作系统windows,使用者通过windows来控制机器硬件,达到使用电脑的目的。 手机也分为硬件和软件两块,软件则是装在闪存(即flash memory,一种 存储器)上的,闪存有大小的区别,就像硬盘有大小一样,看手机硬件配置的 时候,通常会看到如下介绍:ROM 512M,RAM 512M,ROM就是指的闪存了,相 当于电脑上的硬盘,用来存放操作系统和用户数据等信息。相应的,RAM就是 指的内存了。 手机出厂时都是装好系统的,这点类似于电脑世界里面的品牌电脑,通过 分析手机闪存上的内容可以知道,android操作系统主要有以下几个重要的分 区(包括但不限于): hboot分区----------负责启动。 radio分区----------负责驱动。 recovery分区-------负责恢复。 boot分区-----------系统内核。 system分区---------系统文件。 cache分区----------系统缓存。 userdata分区-------用户数据。

Android系统简介

Android系统简介:Andy Rubin创立了两个手机操作系统公司:Danger和Android。Danger 5亿美元卖给微软,今年成为了Kin,Android4千万美元卖给Google。Android 是Google于2007年11月05日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层(Software Stack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。Google通过与软、硬件开发商、设备制造商、电信运营商等其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。Android 作为Google企业战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。全球为数众多的移动电话用户正在使用各种基于Android 的电话。谷歌的目标是让(移动通讯)不依赖于设备甚至平台。出于这个目的,Android 将补充,而不会替代谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发既有用又有吸引力的移动服务,并推广这些产品。 与其他系统对比“Android 系统和苹果的系统都同样依赖网络,包括塞班系统,如果都不依赖网络的话,使用起来没有什么太大的区别的。 每个系统都有不同的人喜欢,都有自己的理由。 我现在用但是Android系统的手机,我认为他使用起来非常方便。 和塞班的系统相比,我认为Android更人性化,应用软件更高档次,娱乐功能也更强大。 和苹果的系统相比,Android系统的终端产品,也就是手机和索尼即将推出的Android电视,应用程序方面实际是差不多的,只是价格比苹果的终端低,更容易让消费者所接受。 开源是玩家可以自己编译软件修改更改系统文件只要熟悉linux系统的上手都比较快 安装软件很方便首先手机必装的是文件管理如ES文件管理还有事taskiller 关闭后台程序的软件其他就随便装了 下载的软件N多拷贝到手机内存卡上用文件管理找到文件点击安装即可不像诺基亚有证书限制软件从网上下才方便手机内置电子市场直接从上面下载软件安装即可相当方便 目前2.1系统把程序安装到卡上需要取得手机root权限存储卡分区app2sd 可以安装到卡上不过装几十个软件在手机上不成问题

Android系统备份与恢复详解

Android系统备份与恢复详解 一、应用软件备份 手机上安装了大量的应用软件,刷机后想继续使用,还得上Market,逐个搜索→下载→安装,太麻烦了。以前我们介绍过一款功能强大的文件管理器Astro,大家还记得吧?Astro还有一项非常实用的功能――备份应用软件。运行Astro,点击菜单中的Tools(工具),选择快捷菜单中的Application Manager/Backup(程序管理备份),软件会自动搜索手机中安装的第三方应用软件,并在Installed Apps标签页显示详细列表,选择要备份的应用软件,或者点击右上方的勾选按钮选择全部应用软件,然后点击Backup按钮即可完成应用软件的备份,软件安装包备份在SD卡上backups\\apps目录中。刷机后只需安装Astro,进入程序管理备份工具,在Backed Apps标签页会显示出已备份的应用软件列表,点击某个软件即可运行安装,也可以勾选全部应用软件,再点击Install按钮一键安装所有已备份的软件,非常方便。 二、常规数据备份 Sprite Backup是WM、Symbian平台比较受欢迎的备份软件,现在已经登陆Android系统,支持书签、彩信、照片、短信、系统设置、联系人、视频、软件设置、通话记录以及音频等10类数据的备份与还原。软件界面非常简洁,整个屏幕分为备份、还原两个部分,使用也很简单。点击备份按钮,首先在“选择数据”标签页中选择要备份的数据项目,然后在“设置存放位置”标签页中设定存储位置和文件名称,最后在“备份”标签页点击“开始备份”按钮即可。而还原操作正好与备份操作相反,首先指定备份文件存放的位置和文件名,然后选择要恢复的数据项目,最后点击“还原”标签页中的“开始还原”按钮就可以了。备份文件默认存储在SD中spritebackup目录下,经测试,备份还原操作速度比较快,备份还原220MB的数据,用时在3分钟左右。缺点是对系统设置、软件设置的还原不完全,会出现某些系统设置信息丢失、桌面插件出错的现象。建议大家使用备份软件备份常规数据资料,类似的软件还有Mybackup pro,大家也可以选用。 三、系统备份还原 如果你对Sprite Backup这类备份还原软件的恢复效果不满意,你还可以选择在recovery 模式下进行整个系统的备份和还原。 recovery模式即恢复模式,同时按住Home 键和电源键开机,可进入recovery模式,我们可以将其理解为类似DOS工具箱的系统。在此模式下我们可以进行恢复出厂设置、firmware升级、系统备份恢复等操作,当然这要取决于recovery系统的版本。如果你的手机recovery系统不支持系统备份还原功能,则需要刷新支持此项功能的recovery 系统(以国外网友开发的RA v1.2.3版recovery系统、HTC G1为例)。 A.刷新re covery系统 下载HTC G1对应的recovery系统文件ra-dream-v1.2.3.img,拷贝到SD卡根目录,然后打开超级终端输入下列命令:

相关主题