Android ROM开发之预制GMS

GMS 简介

GMS 的全称是 Google Mobile Services (GMS) 。它是 Google 开发的一系列 apk集合,这些 apk 都或多或少的依赖 Google 服务。它没有包含在 Android 的开源代码中,当然也就不能看到这些 apk 的实现代码。在整机开发中,如果目标客户是国外用户,那么往往就需要预制GMS。如果你是Android应用开发人员,那么本篇内容可能不适合你。

集成 GMS 到 Android源码

GMS的获取需要公司和Google达成协议,然后由Google release给公司,无法直接从网上下载。它的目录结构如下
GMS目录结构
拿到GMS包后需要将它集成进源码,这样编译出来的image文件才能包含了GMS应用。在编译系统的 makefile 中添加下面的语句,
$(call inherit-product, vendor/google/products/gms.mk)
就可以编译到GMS了。至于是选择往哪个makefile中添加,要根据不同公司对编译系统的修改而定,可以尝试在build/core/main.mk中添加。
这里的gms.mk负责总揽GMS的编译,其中的 PRODUCT_PACKAGES
变量列举了哪些 apk 会被编译到,例如
PRODUCT_PACKAGES += \
GoogleBackupTransport \
SetupWizard

就表明 GoogleBackupTransport 和 SetupWizard 会被编译到。然而这里只是指定了apk 的会不会被编译,不同的 apk 编译的条件会不同,真正编译的 makefile 在google/apps 目录里对应 apk 的文件夹下。Google 已经为不同平台(x86/arm 等)设计好了对应的 GMS apk,并且在编译时会识别当前系统所在的平台,自动编译对应的 apk,极大的简化了 GMS 对不同平台的适配过程。
这里还需要注意某些GMS应用是包含lib库的,如果整包升级GMS google 都是将相应的Android.mk文件写好了的,一般集成不会出什么问题,但如果有些需求要单独升级GMS包里面的某个应用,就得小心lib库问题了,lib库有变动,相应的就需要修改编译的Android.mk文件。曾经遇到过一个单独升级LatinImeGoogle 应用问题,拿到新LatinImeGoogle后,adb install 安装后大概测试了下,没什么问题,就直接在代码里用新的LatinImeGoogle替换掉旧的,以为没什么问题,但出完版本后发现LatinImeGoogle一启用就报FC问题,错误log如下:

E/AndroidRuntime(10553): FATAL EXCEPTION: main
E/AndroidRuntime(10553): Process: com.google.android.inputmethod.latin, PID: 10553
E/AndroidRuntime(10553): java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/app/LatinImeGoogle/LatinImeGoogle.apk"],nativeLibraryDirectories=[/system/app/LatinImeGoogle/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libjni_keyboarddecoder.so"
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值