AOSP 使用 GMS Location Service

AOSP现在跟GMS真是一毛钱关系都没有了。但是如果没有GMS,在AOSP上就用不了网络定位功能(当然在国内最好还是baidu、高德,既快又准)。当你在AOSP上安装了完整的GMS以后,会发现网络定位还是不能用,查看log是因为签名不正确导致Network Location service无法启动。对这个问题的解决方案如下: 打开frameworks/base/core/res/res/values/config.xml配置文件,定位到<string-array name=”config_locationProviderPackageNames” translatable=”false”>。这个文件的原始内容为:

<string-array name="config_locationProviderPackageNames" translatable="false">
          <!-- The standard AOSP fused location provider -->
          <item>com.android.location.fused</item>
</string-array>

系统只会调用在这里注册过的Location Provider,所以需要把GMS的Location Provider在这里注册一下,修改后的内容如下:

<string-array name="config_locationProviderPackageNames" translatable="false">
          <!-- GMS location provider -->                                                                                                           
          <item>com.google.android.gms</item>
          <!-- The standard AOSP fused location provider -->
          <item>com.android.location.fused</item>
</string-array>

修改完成后重新编译framework然后push到机器。 Done!

PS:经测试发现,GMS Location Provider只需要GmsCore.apk,GoogleServicesFramework.apk这两个apk即可。你可以把他们放在vender/google/gms目录下,建立一个Android.mk,内容如下:

LOCAL_PATH:= $(call my-dir) 

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := GmsCore.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_PRIVILEGED_MODULE := true
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/priv-app
LOCAL_SRC_FILES := GmsCore.apk
include $(BUILD_PREBUILT)
 
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := GoogleServicesFramework.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_PRIVILEGED_MODULE := true
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/priv-app
LOCAL_SRC_FILES := GoogleServicesFramework.apk
include $(BUILD_PREBUILT)              

这样以后编译image的时候就会自动预装了。