Android4.2蓝牙学习计划

简述

总所周知,Android4.2把蓝牙协议栈从BlueZ换成了Bluedroid,并且在蓝牙的Framework层也有翻天覆地的变化。Google也宣称目前蓝牙的架构稳定了。这对于Android的蓝牙开发者影响是巨大的。但是由于资料的缺乏,很多朋友在去看Android蓝牙源代码的时候,都会有很多问题。但是没办法,由于工作的需要,不得不Read the facking source code!

Google为什么要做如此大的改动呢?本人觉得应该有如下原因吧:

1、Linux Kernel,BlueZ是基于GNU协议的,如果用了Linux,并且修改了Linux里面的东西,协议要求这个软件发布是要开放源代码。BlueZ很多实现是要在Kernel层,这样对于硬件厂商来说,就不得不开放内核部分代码。这对硬件厂商来说是不利的。

2、Google想稳定Android的硬件架构。所以Android4.2把蓝牙相关的实作都放在了HAL层里。

3、BlueZ太难了(当然,这个是针对于我这种对Kernel开发还不熟的人)

4、Bluedroid是为Android量身定做的。

接下来我准备好好的分析一下Android4.2的蓝牙架构,包括对底层Bluedroid的一些分析。

本人刚接触Android蓝牙不久,分析的可能有所问题,望多包涵。

 

预备知识

要能够理解Android的蓝牙框架,需要具备以下基础知识:
  1. Java/SDK,JNI基础知识,起码对Android的java代码阅读没问题,主要用于读Bluetooth.apk代码。
  2. C语言知识,对指针、函数指针等基本概念要有很深的理解,主要用于读Bluedroid代码。
  3. Linux平台编程的基础知识,比如动态库,多线程等,主要用于读Bluedroid代码。
  4. 蓝牙基础知识。对蓝牙的一些基本概念要有一定的理解,比如HCI,ACL,SCO,L2CAP,Profile等。
以上知识缺一不可,如果还有点欠缺的也没关系,在学习的过程中可以积累。有了以上的基础知识,你还需要具备如下的东西:
  1. Android4.2源代码,作用我就不解释了。
  2. Linux操作系统(最好是Ubuntu),主要用于阅读代码和编译源代码。
  3. 一部Android4.2的手机,用的原生的Android4.2,用于开发,有root权限。可以随时刷系统。(当然,没有也算了,读代码学习也就够了)
就可以进入Android蓝牙的学习之旅了。

学习内容

本专栏由浅入深,从Android的API讲到下层的实现。Android的framework可能不会讲太多,以讲Bluedroid协议栈结构为主,毕竟写这些东西的原因也是因为自己在网上没有找到什么Bluedroid的资料。写到后面如果有时间可能会自己在Android平台增加一个Profile。

说点别的的

在做一件事的时候,思考下以下的东西:
为什么要做?
怎么做?
要做成什么样子?
问:你为什么要写这个专栏?
答:我在学习Android4.2的蓝牙的时候,遇到了很多问题,但是在网上的资料却很少,但是网上的资料也是由大家积累起来的,得到了别人的分享,自己也应该分享。
问:你打算怎么去完成这个专栏?
答:因为自己以前没有什么写博客的经验,所以开头的时候可能会比较慢,我准备参考下比较火的博客(比如邓云凡和罗生阳的博客)的写作风格,参考留言,然后会逐渐形成自己的专栏风格啦。大概每周应该会更新一次新文章吧~~
问:你要写到什么样子,什么时候算结尾?
答:这个可能没有一个太大的打算,由浅入深吧,我会尽量的由浅入深,在介绍蓝牙的时候,也顺便介绍Android系统,专栏重点是介绍Bluedroid。当我把Bluedroid讲透彻了,讲到对它的一些很底层的修改后,就结束吧。

标签