自己的安卓平台在客户处测试时,有反馈Network Signal Info 这个apk无法安装,提示缺少共享库。通过在网上搜索,确认是少了GMS包的缘故。步骤如下:
(1)从网上下载4.2的GMS包(可用网址http://goo.im/gapps/gapps-jb-20130812-signed.zip),可先用简单的打包方式来验证包内容是否可用。将包中的system\app\,system\etc\permissions\,system\framework\,system\lib\这些内容拷贝到对应的out目录下,执行打包,之后验证。该APK不能装的原因在于相应目录缺少:
system/framework com.google.android.maps.jar
system/etc/permissions com.google.android.maps.xml
通过后者脚本内容索引到jar包
(2)把GMS包添加到平台中。首先在vendor\下新建文件夹google\apps,在其中放入system\app\下的apk,并新建一个Android.mk,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ChromeBookmarksSyncAdapter
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
其他若干apk均可仿照该格式。
(3)在google目录下建立一个Android.mk,内容如下:
include $(call all-subdir-makefiles)
(4)在项目工程对应的board的mk文件中,加上这个目录的索引,如下:
include $(TOPDIR)vendor/google/products/gms.mk
(5)新建目录google\products\,在这个目录中新建一个gms.mk。该内容完成PRODUCT_PACKAGES的合并。大致如下:
PRODUCT_PACKAGES += \
ChromeBookmarksSyncAdapter \
ConfigUpdater \
GenieWidget
同时可以选择是否要导入新的设置向导流程,如下:
PRODUCT_PROPERTY_OVERRIDES += \
ro.setupwizard.mode=ENABLED
(6)GMS包中的lib jar xml等文件,拷贝入vendor\xxxx\projectName\artifacts\out\target\product\projectName\system\对应的子目录即可。r 编译项目。
(7)如果系统需要支持人脸解锁,除了要在GMS中内置facklock.apk之外,还要将原GMS包中的pittpatt文件夹放置在系统的特定目录下,让最终烧录映象中有\system\vendor\pittpatt。
======================================================================================================
内置过程中碰到的各种问题
(1)在预置4.4的GMS时,碰到谷歌服务弹框报错,Log是
FATAL EXCEPTION: main
Process: com.google.process.location, PID: 936
java.lang.RuntimeException: Unable to start receiver com.google.android.location.network.LocationProviderChangeReceiver: java.lang.SecurityException: Permission denial: writing to secure settings requires android.permission.WRITE_SECURE_SETTINGS
权限错误这种问题,可以把apk不放在system/app,二是内置到system/priv-app看看是否解决。