参考文章
getSystemService
Android Framework层的定位通过在LocationManagerService中加载各种定位模块(Provider),从而支持厂商扩展实现各种自定义定位模块(Provider)。
- SystemServer 负责启动初始化 LocationManagerService添加到系统服务中
- LocationManagerService 借助AIDL提供给应用层调用各个定位逻辑的管理者,管理着各个的privoder
- LocationManager 暴露给app层调用AIDL接调用LocationManagerService
- GnssLocationProvider 主要的GPS定位逻辑,调用HAL层GPS模块进行定位
android.harddware.gnss@1.0-service
android.hardware.gnss@1.0
hardware/interfaces/gnss/1.0/default/Android.mk
hardware/interfaces/gnss/1.0/default/Android.bp
hardware/interfaces/gnss/1.0/default/service.cpp
位置信息提供者
frameworks/base/services/core/java/com/android/server/LocationManagerService.java loadProvidersLocked
LocationManagerService.initializeProvidersLocked()
LocationManager.getAllProviders()讲解
frameworks/base/services/Android.mk 【services.jar】
frameworks/base/services/core/Android.mk 【services.core.jar】
frameworks/base/location/Android.mk
frameworks/base/services/core/java/com/android/server/LocationManagerService.java
GPS定位讲解
frameworks/base/services/core/java/com/android/server/LocationManagerService.java
frameworks/base/services/core/java/com/android/server/location/GnssLocationProvider.java
frameworks/base/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
hardware/interfaces/gnss/1.0/default/Gnss.cpp
LocationManager.requestLocationUpdates()讲解
requestLocationUpdates -> requestLocationUpdatesLocked
frameworks/base/location/java/android/location/LocationManager.java
frameworks/base/services/core/java/com/android/server/location/GnssLocationProvider.java
frameworks/base/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
frameworks/base/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
hardware/interfaces/gnss/1.0/IGnss.hal
hardware/interfaces/gnss/1.0/default/Gnss.cpp
hardware/interfaces/gnss/1.0/default/Gnss.h
hardware/libhardware/include/hardware/gps.h
hardware/libhardware/include/hardware/hardware.h
android.hardware.gnss@1.0.so
android.hardware.gnss@1.0-impl.so
android.hardware.gnss@1.0-service
android.hardware.gnss@1.0-service.rc
#define HAL_MODULE_INFO_SYM HMI
#define HAL_MODULE_INFO_SYM_AS_STR "HMI"
gps.default.so
vendor/rockchip/common/my_gps/Android.mk