Android ROM开发之预制GMS

本文详细介绍了Android ROM开发中预制GMS的过程,包括GMS简介、集成到源码、OVERRIDES和OVERLAY机制、解决单独升级GMS应用的问题,以及如何查看和定制编译生成的GMS应用。在集成GMS时,需要注意GMS包的获取、应用编译以及可能遇到的lib库问题。此外,文章还提到了GMS的OVERRIDES机制用于屏蔽源码中的应用,以及OVERLAY机制对XML文件的覆盖。在定制GMS应用时,开发者需要关注文件结构变化和Android.mk文件的同步修改,以避免运行时的错误。
摘要由CSDN通过智能技术生成

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"
关于Google Play services的各个分支介绍(MX5一定要安装XXXXXX-448分支) 要想使用google play, google map等google应用,就必须安装Google Play Service,但Google Play Service有太多分支了,最近终于搞明白各个分支代表什么。 版本号最后三位(2104405-XYZ)分别表示Android版本,cpu的arm系列,屏幕密度(DPI)。 下面是具体分支介绍: Notes / What's New Uploader's notes: To figure out the right version of Google Play services for your Android device, go to Settings -> Apps -> Google Play services, and look at the last 3 numbers in the parentheses. You'll see something like -XYZ where: 1.第一位X * X defines Android version: 0 for Android =5.0 // 4和7表示Android5.0及以上 8 for Android TV // 8表示Android电视应用 2.第二位Y * Y defines CPU architecture: 1 for armeabi 3 for armeabi-v7a // 32位版本 4 for arm64-v8a // 64位v8版本,MX5必须是这个 7 for x86 // x86主要是对intel cpu来说的 3.第三位Z * Z defines DPI: 0 for universal 2 for 160 4 for 240 6 for 320 8 for 480 // MX5选这个就行了 Notes: It seems that -7YZ builds became -4YZ with Google Play services 6.5. If you were on -7YZ before, you should now install -4YZ. Looks like -8YZ builds are for Android TV. Examples: -014 for Android <5.0 armeabi CPU 240 DPI device -438 for Android 5.0+ armeabi-v7a CPU 480 DPI device -876 for Android TV x86 CPU 320 DPI device 国内用户可以直接从以下镜像网站下载最新到Google Play Service http://www.apkmirror.com/apk/google-inc/google-play-services/ 目前最新版本是Google Play services 7.8.93 MX5用户可以安装以下分支: Google Play services 7.8.93 (2104405-448) http://www.apkmirror.com/apk/google-inc/google-play-services/google-play-services-7-8-93-2104405-448-android-apk-download/ 另外,安装后好需要禁止系统自带【应用中心】自动安装更新,可以设置面流量更新,但不要设置“静默安装更新包”,否则新版本发布后会自动更新成应用中心的最新版本,而最新版本的后三位可能不是你想要的分支,这时候就会导致弹出提示架构不符等。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值