马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Android 版本
| 发布时间
| 代号(Codename)
| Android 1.0
| 2008年9月23日
| 无
| Android 1.1
| 2009年2月9日
| Petit Four
| Android 1.5
| 2009年4月27日
| Cupcake
| Android 1.6
| 2009年9月15日
| Donut
| Android 2.0
| 2009年10月26日
| Eclair
| Android 2.1
| 2010年1月12日
| Eclair
| Android 2.2
| 2010年5月20日
| Froyo
| Android 2.3
| 2010年12月6日
| Gingerbread
| Android 3.0
| 2011年2月22日
| Honeycomb
| Android 4.0
| 2011年10月18日
| Ice Cream Sandwich
| Android 4.1
| 2012年7月9日
| Jelly Bean
| Android 4.2
| 2012年11月13日
| Jelly Bean
| Android 4.3
| 2013年7月24日
| Jelly Bean
| Android 4.4
| 2013年10月31日
| KitKat
| Android 5.0
| 2014年11月12日
| Lollipop
| Android 5.1
| 2015年3月9日
| Lollipop
| Android 6.0
| 2015年10月5日
| Marshmallow
| Android 7.0
| 2016年8月22日
| Nougat
| Android 7.1
| 2016年10月4日
| Nougat
| Android 8.0
| 2017年8月21日
| Oreo
| Android 8.1
| 2017年12月5日
| Oreo
| Android 9.0
| 2018年8月6日
| Pie
| Android 10
| 2019年9月3日
| 无(开始使用数字版本)
| Android 11
| 2020年9月8日
| 无
| Android 12
| 2021年10月4日
| 无
| Android 13
| 2022年8月15日
| 无
| Android 14
| 2023年10月4日
| 无
| 零. 前言
由于Bluedroid的介绍文档有限,以及对Android的一些根本的知识须要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等),加上须要把握的语言包括Java/C/C++等,加上网络上实在没有一个完备的介绍Bluedroid系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度,学习曲线也相对较陡,所以我有了这个想法,专门对Bluedroid做一个系统性的介绍,尽可能的涵盖所有内容。
-------------------------------------------------------------------------------------------------------------------------
蓝牙视频教程(跟韦东山老师相助), 其中专题21就是专门针对Bluedroid做的系统介绍
https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.20.5aeb41f98e267j&id=693788592796
--------------------------------------------------------------------------------------------------------------------------
版权声明:本文为博主原创文章,遵照 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/143818386
我们只分析下Android 7~14的版本架构,由于从前的Android版本太旧了,我们过多的分析也没有多大的意义,而为什么要分从Android7开始分析呢,主要有两个原因:
1)Android7 是最后一个在协议栈部门保留C语言的版本
2)Android8 后开始引用hidl架构,Android7是最后一个保留vendor用so形式存在的版本
给大家介绍一个android在线观看代码的链接:
http://www.aospxref.com/
XRefAndroid - Support Android 15.0 & Open Harmony 5.0
其中看Android代码比较好的工具有:Android Studio/VSCode等,看个人风俗
学习android蓝牙须要你把握的技能有:
- Jave/C/C++编程语言
- Android UI 4大组件
- Binder通信
- 蓝牙理论根本
一. Android 7架构
我们起首来看下Android7中的蓝牙架构,如下图:
可以看到Android蓝牙一共分为几层:
- APPLICATION FRAMEWORK
- BLUETOOTH PROCESS
- JNI
- BLUETOOTH STACK
- Vendor Externsions
1.APPLICATION FRAMEWORK
framework的service
路径:
蓝牙的framework 路径如下:/frameworks/base/services/core/java/com/android/server/
编译方式:
make services
路径:
android原生的设置apk路径如下:packages\apps\Settings
蓝牙的framework 路径如下:frameworks\base\core\java\android\bluetooth
NOTED: Android原生用蓝牙的apk是setting apk,如果你自己编写apk,不再讨论范围内
作用:
编译方式:
make Settings
清除:
make clean-Settings
天生内容:
out/target/product/rk3399_roc_pc_plus/product/priv-app/Settings/Settings.apk
NOTED:编译Setting须要在系统中编译或者须要额外签名
开辟板位置:
/product/priv-app/Settings/Settings.apk
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/product/priv-app/Settings/Settings.apk /product/priv-app/Settings/
2.BLUETOOTH PROCESS
作用:蓝牙internal apk,是一个service,对上通过binder跟framework api沟通,对下通过jni跟bluedroid蓝牙协议栈沟通
路径:packages\apps\Bluetooth
编译方式:
根目录下:
make Bluetooth
清除:
make clean-Bluetooth
天生内容:
out/target/product/rk3399_roc_pc_plus/system/app/Bluetooth/Bluetooth.apk
NOTED:编译Setting须要在系统中编译或者须要额外签名
开辟板位置:
/system/app/Bluetooth/Bluetooth.apk
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/system/app/Bluetooth/Bluetooth.apk /system/app/Bluetooth/
3.JNI
作用:这个是蓝牙的jni库,编译在Bluetooth.apk中,主要通过jni跟底层的bluedroid蓝牙协议栈沟通
路径:packages\apps\Bluetooth\jni
编译方式:
make libbluetooth_jni
清除:
make clean-libbluetooth_jni
天生内容:
out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth_jni.so
开辟板位置:
/system/lib64/libbluetooth_jni.so
/system/app/Bluetooth/lib/arm64/libbluetooth_jni.so
固然开辟板中有两个位置,但是/system/app/Bluetooth/lib/arm64/libbluetooth_jni.so是一个软毗连,所以真实的so还是在/system/lib64/libbluetooth_jni.so
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth_jni.so /system/lib64/
4.BLUETOOTH STACK
作用:Android蓝牙Host自己,也就是蓝牙协议栈的主体
路径:system\bt
编译方式:
make libbluetooth
清除:
make clean-libbluetooth
天生内容:
out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth.so
开辟板位置:
/system/lib64/libbluetooth.so
/system/lib/libbluetooth.so
NOTED:要根据开辟板是32位还是64位,分别push到特定的目录下
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth.so /system/lib64/
补充:
协议栈有设置文件
/etc/bluetooth/bt_stack.conf
/etc/bluetooth/bt_did.conf
5.VENDOR IMPLEMENTATAION
作用:特定芯片厂商的vendor部门,Android把特定常用的操作,好比power控制,下载固件,sco等行为抽象出来,用so的方式来达到切换的效果
路径:hardware\broadcom\libbt
如果是其他厂商的蓝牙,那么就是hardware\vendor_xxx\xxx_bt
编译方式:
make libbt-vendor
清除:
make clean-libbt-vendor
天生内容:
out/target/product/rk3399_roc_pc_plus/vendor/lib64/libbt-vendor.so
开辟板位置:
/vendor/lib64/libbt-vendor.so
/vendor/lib/libbt-vendor.so
NOTED:要根据开辟板是32位还是64位,分别push到特定的目录下
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/
out/target/product/rk3399_roc_pc_plus/vendor/lib64/libbt-vendor.so /vendor/lib64/
补充:
bcm有vendor设置文件,具体路径在/vendor/etc/bluetooth/bt_vendor.conf
另外检察bt_vendor.conf可以检察到串口名称以及fw路径
二. Android 8-12蓝牙架构图
可以看到Android蓝牙一共分为几层:
- APPLICATION FRAMEWORK
- BLUETOOTH PROCESS
- JNI
- BLUETOOTH STACK
- HIDL INTERFACES
- VENDOR IMPLEMENTATAION
天生内容路径以rk3399举例,在更新的过程中会碰到这个问题,解决方式是:
root access is disabled by system setting - enable in settings -> development options
在开辟者选项中选择Apps and ADB
然后每次push之前记得
adb root
adb remount
1.APPLICATION FRAMEWORK
framework的service
路径:
蓝牙的framework 路径如下:/frameworks/base/services/core/java/com/android/server/
编译方式:
make services
天生内容:
./out/target/product/evk_8mp_car/system/framework/oat/arm64/services.odex
开辟板位置:
./system/framework/oat/arm64/services.odex
路径:
android原生的设置apk路径如下:packages\apps\Settings
蓝牙的framework 路径如下:frameworks\base\core\java\android\bluetooth
NOTED: Android原生用蓝牙的apk是setting apk,如果你自己编写apk,不再讨论范围内
作用:
编译方式:
make Settings
清除:
make clean-Settings
天生内容:
out/target/product/rk3399_roc_pc_plus/product/priv-app/Settings/Settings.apk
NOTED:编译Setting须要在系统中编译或者须要额外签名
开辟板位置:
/product/priv-app/Settings/Settings.apk
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/product/priv-app/Settings/Settings.apk /product/priv-app/Settings/
2.BLUETOOTH PROCESS
作用:蓝牙internal apk,是一个service,对上通过binder跟framework api沟通,对下通过jni跟bluedroid蓝牙协议栈沟通
路径:packages\apps\Bluetooth
编译方式:
根目录下:
make Bluetooth
清除:
make clean-Bluetooth
天生内容:
out/target/product/rk3399_roc_pc_plus/system/app/Bluetooth/Bluetooth.apk
NOTED:编译Setting须要在系统中编译或者须要额外签名
开辟板位置:
/system/app/Bluetooth/Bluetooth.apk
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/system/app/Bluetooth/Bluetooth.apk /system/app/Bluetooth/
3.JNI
作用:这个是蓝牙的jni库,编译在Bluetooth.apk中,主要通过jni跟底层的bluedroid蓝牙协议栈沟通
路径:packages\apps\Bluetooth\jni
编译方式:
make libbluetooth_jni
清除:
make clean-libbluetooth_jni
天生内容:
out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth_jni.so
开辟板位置:
/system/lib64/libbluetooth_jni.so
/system/app/Bluetooth/lib/arm64/libbluetooth_jni.so
固然开辟板中有两个位置,但是/system/app/Bluetooth/lib/arm64/libbluetooth_jni.so是一个软毗连,所以真实的so还是在/system/lib64/libbluetooth_jni.so
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth_jni.so /system/lib64/
4.BLUETOOTH STACK
作用:Android蓝牙Host自己,也就是蓝牙协议栈的主体
路径:system\bt
编译方式:
make libbluetooth
清除:
make clean-libbluetooth
天生内容:
out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth.so
开辟板位置:
/system/lib64/libbluetooth.so
/system/lib/libbluetooth.so
NOTED:要根据开辟板是32位还是64位,分别push到特定的目录下
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth.so /system/lib64/
补充:
协议栈有设置文件
/etc/bluetooth/bt_stack.conf
/etc/bluetooth/bt_did.conf
5.HIDL INTERFACES
作用:里面有几个作用,第一个是audio干系的,一个是uart干系的
路径:hardware\interfaces\bluetooth
编译方式:
make [email protected]
清除:
make [email protected]
天生内容:
out/target/product/rk3399_roc_pc_plus/obj/SHARED_LIBRARIES/[email protected]_intermediates/[email protected]
6.VENDOR IMPLEMENTATAION
作用:特定芯片厂商的vendor部门,Android把特定常用的操作,好比power控制,下载固件,sco等行为抽象出来,用so的方式来达到切换的效果
路径:hardware\broadcom\libbt
如果是其他厂商的蓝牙,那么就是hardware\vendor_xxx\xxx_bt
编译方式:
make libbt-vendor
清除:
make clean-libbt-vendor
天生内容:
out/target/product/rk3399_roc_pc_plus/vendor/lib64/libbt-vendor.so
开辟板位置:
/vendor/lib64/libbt-vendor.so
/vendor/lib/libbt-vendor.so
NOTED:要根据开辟板是32位还是64位,分别push到特定的目录下
push方法:
adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/
out/target/product/rk3399_roc_pc_plus/vendor/lib64/libbt-vendor.so /vendor/lib64/
补充:
bcm有vendor设置文件,具体路径在/vendor/etc/bluetooth/bt_vendor.conf
另外检察bt_vendor.conf可以检察到串口名称以及fw路径
三. Android 13~Android 15
架构没有改变,目录修改为了:
/packages/modules/Bluetooth/
所有蓝牙部门都放在了一起
|