Android系统开发:GMS包移植

首先,我们拿到一份完整的GMS包应该是如下图所示:

简单介绍每一个目录的作用

1)apps以及apps_go : 这里面就是google释放的apk资源文件,其中go版本适配低内存设备的apk.
2)etc: 这里面就是Google 的一些权限申明文件,在日常维护gms更新时,经常会出现应用包权限的改动,我们跟着改,并做好记录即可。
3)frameworks:这里面一般就是一些jar包,目的是将必须的jar包编译到system系统中,可以让一些apk正常使用,日常维护中不需要改动。
4)overlay:这里面是一些软件的overlay包 , 可以指定编译这些overlay软件替换原生软件。
5)product:这里面是编译脚本和一些overlay的配置文件。其中十分重要的是gms_overlay文件夹 以及gms_go.mk,gms.mk文件

GMS的编译脚本

GMS包一般通过gms.mk或者gms_go.mk编译到系统中的。这两者的区分与之前apps/apps_go文件夹相似,一般来说go版本软件会走gms_go.mk文件编译(现在也有gms_go_2gb.mk 也就是2G内存的Go设备会走该mk文件编译)。非Go版本自然走gms.mk文件
下面我们来看一下gms.mk的内容(gms_go.mk同理):

###############################################################################
# GMS home folder location
# Note: we cannot use $(my-dir) in this makefile
ANDROID_PARTNER_GMS_HOME := vendor/partner_gms          ##这里指定了我们GMS包在源码根目录的位置,下文中会用到该路径# GMS mandatory core packages
PRODUCT_PACKAGES := \      ##备注GMS mandatory core packages这个是指gms强制安装包,不装的话会导致过不了gms,我们不应该对其有什么修改AndroidAutoStub \      ##PRODUCT_PACKAGES就是gms包中常用的编译变量名。 AndroidPlatformServices \ConfigUpdater \GoogleExtShared \GoogleFeedback \GoogleLocationHistory \GoogleOneTimeInitializer \GooglePackageInstaller \GooglePartnerSetup \GooglePrintRecommendationService \GoogleRestore \GoogleServicesFramework \GoogleCalendarSyncAdapter \GoogleContactsSyncAdapter \GoogleTTS \GmsCore \Phonesky \SetupWizard \WebViewGoogle \Wellbeing
# GMS mandatory libraries               ##这个jar包就是上文frameworks里面的jar包,就是在这里编译到系统中的
PRODUCT_PACKAGES += com.google.android.maps.jar
# GMS common RRO packages              ##这个GmsConfigOverlay就是上文中Overlay包中的文件,在这里被编译进系统
PRODUCT_PACKAGES += GmsConfigOverlay
# GMS common configuration files
PRODUCT_PACKAGES += \                  ##这些配置文件以及权限文件一般都是在etc中的,在这里被编译进系统default_permissions_whitelist_google \privapp_permissions_google_system \privapp_permissions_google \split_permissions_google \preferred_apps_google \sysconfig_google \sysconfig_wellbeing \google_hiddenapi_package_whitelist
# Overlay for GMS devices: default backup transport in SettingsProvider
PRODUCT_PACKAGE_OVERLAYS += $(ANDROID_PARTNER_GMS_HOME)/products/gms_overlay
# Overlay for GoogleDialer               ##可以看到overlay编译文件我们使用PRODUCT_PACKAGE_OVERLAYS编译,gms_overlay文件下文会讲
PRODUCT_PACKAGE_OVERLAYS += $(ANDROID_PARTNER_GMS_HOME)/apps/GoogleDialer/overlay
# GMS mandatory application packages    ##有这个备注的都是必装应用,请勿删改,要不然过不了gms测试
PRODUCT_PACKAGES += \Chrome \Drive \Gmail2 \Duo \Maps \YTMusic \Photos \Velvet \Videos \YouTube
# GMS comms suite               ##这个备注虽然不是强制,但是现在非Go版Dialer以及messages的改动还是会过不了gms测试,所以也不太好修改。
PRODUCT_PACKAGES += \CarrierServices \GoogleContacts \GoogleDialer \Messages
# GMS optional application packages  ##这个备注表示是可选项,可要可不要,根据项目需求
PRODUCT_PACKAGES += \CalendarGoogle \DeskClockGoogle \LatinImeGoogle \TagGoogle \talkback \Keep \CalculatorGoogle
# GMS sample application packages   ##这里两个包比较重要,是桌面界面,可以根据你的需要进行修改
PRODUCT_PACKAGES += \GmsSampleIntegration \SearchLauncherQRef
PRODUCT_PRODUCT_PROPERTIES += \ro.setupwizard.rotation_locked=true \   ##这些系统变量是控制开机向导的setupwizard.theme=glif_v3_light \ro.opa.eligible_device=true \ro.com.google.gmsversion=10_202003  ##这个变量是你gms的版本,在更新中必定是要跟着修改的

gms_overlay文件

在上面的gms.mk文件中,这个文件单独被拎出来使用PRODUCT_PACKAGE_OVERLAYS编译, 这其实是一个很重要的文件。
Path:/product/gms_overlay

其实目录就两个frameworks和packages, 这个文件的作用就是通过修改这里面的文件 覆盖 系统原生的配置
下面我们以桌面(4x4布局)为例:
原生桌面配置文件Path:packages/apps/Launcher3/res/xml/default_workspace_4x4.xml
那么我们在gms文件路径下复制该文件路径:product/gms_overlay/packages/apps/Launcher3/res/xml/default_workspace_4x4.xml
并对该文件做出自己想要的修改:

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2013 The Android Open Source ProjectLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
-->
<favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3"><!-- Hotseat (We use the screen as the position of the item in the hotseat) --><!-- Dialer Messaging [All Apps] Contacts Camera --><favorite container="-101" screen="0" x="0" y="0" packageName="com.google.android.dialer" className="com.android.dialer.DialtactsActivity"/><favorite container="-101" screen="1" x="1" y="0" packageName="com.google.android.apps.messaging" className="com.google.android.apps.messaging.ui.ConversationListActivity"/><favorite container="-101" screen="2" x="2" y="0" packageName="com.android.chrome" className="com.google.android.apps.chrome.Main"/><favorite container="-101" screen="3" x="3" y="0" packageName="com.mediatek.camera" className="com.mediatek.camera.CameraActivity"/><!-- In Launcher3, workspaces extend infinitely to the right, incrementing from zero --><!-- Google folder --><!-- Google, Chrome, Gmail, Maps, YouTube, (Drive), (Music), (Movies), Hangouts, Photos --><folder title="@string/google_folder_title" screen="0" x="0" y="3"><favorite packageName="com.google.android.googlequicksearchbox" className="com.google.android.googlequicksearchbox.SearchActivity"/><favorite packageName="com.google.android.gm" className="com.google.android.gm.ConversationListActivityGmail"/><favorite packageName="com.google.android.apps.maps" className="com.google.android.maps.MapsActivity"/><favorite packageName="com.google.android.youtube" className="com.google.android.youtube.app.honeycomb.Shell$HomeActivity"/><favorite packageName="com.google.android.apps.docs" className="com.google.android.apps.docs.app.NewMainProxyActivity"/><favorite packageName="com.google.android.apps.youtube.music" className="com.google.android.apps.youtube.music.activities.MusicActivity"/><favorite packageName="com.google.android.videos" className="com.google.android.youtube.videos.EntryPoint"/><favorite packageName="com.google.android.apps.photos" className="com.google.android.apps.photos.home.HomeActivity"/></folder><favorite screen="0" x="1" y="3" packageName="com.google.android.apps.tachyon" className="com.google.android.apps.tachyon.MainActivity"/><favorite screen="0" x="3" y="3" packageName="com.android.vending" className="com.android.vending.AssetBrowserActivity"/>
</favorites>

这样子 ,编译出来的桌面效果 就是我们这个配置文件的了, 覆盖了原生的配置文件效果。其他方面的覆盖原理也相同,都可以自己去尝试一下。

Android系统开发:GMS包移植相关推荐

  1. Android系统开发(移植)和应用开发

    Android是个开源的操作系统,所以可以选择的开发方式主要有两种: Android系统开发(移植): Android应用开发 1.Android系统开发(移植) Android系统开发(移植)属于底 ...

  2. Android系统开发 默认壁纸的定制 主题风格的开发及定制 DDMS 常用adb 命令 抓取Log

    Android系统开发             Android系统本身的功能在增加和完善过程中.在系统开发中如果涉及系统API的改动,则一定要慎重,系统的API的改动可能涉及Android应用程序的不 ...

  3. 《Android系统开发》笔记

    <Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包括安全性,内 ...

  4. Android系统开发 ----- 系统服务开发

    系列文章目录 Android系统启动 ---- 主要流程类_MrDarly的博客-CSDN博客Android系统启动Zygote关系主要的类https://blog.csdn.net/weixin_6 ...

  5. 工作感悟之Android系统开发入门

    从离开学校到工作快两年了,这期间感悟良多,喜悦.悲伤.希望.失望...总的说来在曲折中不断前进,相信乘风破浪会有时,直挂云帆济沧海. 从事Android有些偶然因素,原始打算做WPF相关的开发,或是C ...

  6. Android 系统开发做什么?

    题外话 18 年我从 Android 应用开发转 Framework 层开发了,从此开启了 996 幸福生活,博客技术文更新基本停滞了,被工作占据了过多的精力,实在没时间像以前一样拟稿.写作,实践.反 ...

  7. Android系统开发和性能优化——查漏补缺【建议收藏】

    做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...

  8. Android菜鸟如何学习Android系统开发?

    如何做好Android学习前的准备? 如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作.先打下哪些基础呢? 首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类 ...

  9. Android NDK开发之 Android系统开发中LOG的使用

    浅谈Android系统开发中LOG的使用 转自:http://blog.csdn.net/luoshengyang/article/details/6581828

最新文章

  1. 面试官:听说你精通并发编程,来说说你对ThreadLocal的理解
  2. 在windows10中安装 linux ubuntu 子系统
  3. python读取配置文件不更改大小写_Python不区分大小写的文件名?
  4. boost::timer模块timer、job_timer和progress_display示例程序
  5. 牛客练习赛69E-子串【树状数组】
  6. Java Double类doubleToLongBits()方法与示例
  7. 移动短信回执怎么开通_才知道移动积分需要主动开通功能,才会消费产生积分,垃圾!!!...
  8. WinPE作为启动硬盘
  9. 不要钱还免安装!Photoshop杀手火了,网友:作者是上帝么?
  10. Leetcode 64. 最小路径和 -- DP算法
  11. 郎永淳妻子抗癌4年路:儿子弃读名校陪治病(转)
  12. linux ubuntu系统远程连接linux ubuntu
  13. STM32F103 与 STM32F207/407编程的区别自我总结
  14. tiff格式转为jpg,tiff转jpg方法
  15. 楼梯计算机公式,楼梯的计算公式 楼梯的尺寸
  16. 营销推广的好工具:博客营销
  17. DSP TMS320操作加密芯片源代码
  18. insert的语句的三种方式
  19. 4399小游戏之三子棋(可联机)
  20. Pexels Videos – 可以免费商业使用的短视频

热门文章

  1. 手写数字识别之联邦学习
  2. ValueError: array must not contain infs or NaNs
  3. QTabWidget样式表
  4. 利用selenium尝试爬取豆瓣图书
  5. 崇志宏 【转载】深度学习进阶规划(论文阅读顺序推荐)--东南大学
  6. 1、python冒泡排序和快排
  7. 面向对象(Object-Oriented)
  8. 一些不错的caffe初学者的教程链接
  9. 201671010434王雯涵--实验二 软件工程个人项目
  10. 二叉树思想实现的计算器