1. 下载GMS刷机包

在https://opengapps.org/根据API,platform,variant下载合适的gms包,这里推荐pice size,可以最精简地保证基础谷歌服务功能

2.提取文件

解压GMS包

Core和Optional目录下为谷歌服务核心文件和应用,需要预置到源码中

GApps目录下为一些功能应用,可不预置到源码中

继续解压Core和Optional两个目录下的所有文件,得到一些APK,权限Config和jar包等

3. 预置

  • 稍作整理

  • 对于非APK文件:

使用宏PRODUCT_COPY_FILES,在源码编译时将非APK文件拷贝到/system/下,在device.mk里加上

PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,$(LOCAL_PATH)/gms/copyToSystem,/system)
  • 对于APK文件:

增加Android.mk预置到/system/app或/system/priv-app,开启预编译减少第一次开机时间

PS: 注意LOCAL_CERTIFICATE := PRESIGNED 保证使用APK本身的签名信息,否则无法正常使用

#预置到/system/app下include $(CLEAR_VARS)LOCAL_MODULE := GoogleContactsSyncAdapterLOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := app/$(LOCAL_MODULE)/$(LOCAL_MODULE).apkLOCAL_MODULE_CLASS := APPSLOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)LOCAL_CERTIFICATE := PRESIGNEDLOCAL_DEX_PREOPT := trueinclude $(BUILD_PREBUILT) 
#预置到/system/priv-app下include $(CLEAR_VARS)LOCAL_MODULE := ConfigUpdaterLOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := priv-app/$(LOCAL_MODULE)/$(LOCAL_MODULE).apkLOCAL_MODULE_CLASS := APPSLOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)LOCAL_CERTIFICATE := PRESIGNEDLOCAL_DEX_PREOPT := trueLOCAL_PRIVILEGED_MODULE := trueinclude $(BUILD_PREBUILT)
  • 在device.mk文件中开启APK模块编译
PRODUCT_PACKAGES += GoogleContactsSyncAdapterPRODUCT_PACKAGES += GoogleExtSharedPRODUCT_PACKAGES += SoundPickerPrebuiltPRODUCT_PACKAGES += AndroidPlatformServicesPRODUCT_PACKAGES += CarrierSetupPRODUCT_PACKAGES += ConfigUpdaterPRODUCT_PACKAGES += GmsCoreSetupPrebuiltPRODUCT_PACKAGES += GoogleBackupTransportPRODUCT_PACKAGES += GoogleExtServicesPRODUCT_PACKAGES += GoogleFeedbackPRODUCT_PACKAGES += GoogleOneTimeInitializerPRODUCT_PACKAGES += GooglePartnerSetupPRODUCT_PACKAGES += GoogleServicesFrameworkPRODUCT_PACKAGES += Phonesky PRODUCT_PACKAGES += PrebuiltGmsCorePi
  • PS: 也可以通过拷贝的方式预置到系统中,不过第一次开机要做DEX2OAT,影响开机时间,不推荐

如果拷贝预置,需要在vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_system_list.txt中添加需要预制APK的package name

4. 增加System分区大小

if(如果全编系统成功) goto 5

else if error == out of space? the tree size of

{

  • 因为谷歌服务会增加200M左右System分区大小,极有可能造成分区空间不足的问题不能打包system.img, 需要增加System分区大小
  • 检查System分区大小 :vim out/target/product/ac8257_demo_1g_32/obj/PTGEN/partition_size.mk
  • 找到 BOARD_SYSTEMIMAGE_PARTITION_SIZE:=1434451968
  • 1434451968 / 1024 = 1400832, 在 源码/device/ 目录下 grep -nr "1400832" 得到 Screenshot-6.png (如果没找到可以grep 1434451968 或 1434451968/1024 或 1434451968/1024/1024 找出定义大小的位置)
  • 增加 autochips/common/BoardConfig.mk 下 BOARD_MTK_GMO_SYSTEM_SIZE_KB 的大小
  • 全编系统

}

else 联系qq: 373683458

5. 通过谷歌设备验证

  • 不能修改 build/core/MakeFile 中 的BUILD_FINGERPRINT生成方式,BUILD_FINGERPRINT的拼接格式影响CTS认证和GMS ANDROID ID的生成,可能导致谷歌设备认证不通过
  • 挂上代理,进入Play商店,等待出现设备未验证的提示,此时才会生成一个GMS ANDROID ID
  • adb root ; adb shell 'sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"'
  • 在 https://www.google.com/android/uncertified/中填入 GMS ANDROID ID 即可

Recovery中刷入GMS包时做了什么

翻下install.sh

for gapp_name in $core_gapps_list; doget_apparchives "Core/$gapp_name"for archive in $apparchives; docase $gapp_name insetupwizarddefault) if [ "$device_type" != "tablet" ]; then extract_app "$archive"; fi;;setupwizardtablet)  if [ "$device_type"  = "tablet" ]; then extract_app "$archive"; fi;;googlepixelconfig) if [ "$googlepixel_compat" = "true" ]; then extract_app "$archive"; fi;;backuprestore) if [ "$googlepixel_compat" = "false" ]; then extract_app "$archive"; fi;;datatransfertool) if [ "$googlepixel_compat" = "true" ]; then extract_app "$archive"; fi;;*)  extract_app "$archive";;esacdonedone
  • 看下extract_app做了什么

extract_app() {tarpath="$TMP/$1.tar" # NB no suffix specified hereif "$TMP/unzip-$BINARCH" -o "$OPENGAZIP" "$1.tar*" -d "$TMP"; then # wildcard for suffixapp_name="$(basename "$1")"which_dpi "$app_name"echo "Found $1 DPI path: $dpiapkpath"folder_extract "$tarpath" "$dpiapkpath" "$app_name/common"elseecho "Failed to extract $1.tar* from $OPENGAZIP"fi}
  • 继续看 folder_extract 做了什么

folder_extract() {archive="$1"shiftif [ -e "$archive.xz" ]; thenfor f in "$@"; doif [ "$f" != "unknown" ]; then"$TMP/xzdec-$BINARCH" "$archive.xz" | "$TMP/tar-$BINARCH" -x -C "$TMP" -f - "$f" && install_extracted "$f"fidone}
  • 继续看install_extracted做了什么

install_extracted() {file_list="$(find "$TMP/$1/" -mindepth 1 -type f | cut -d/ -f5-)"dir_list="$(find "$TMP/$1/" -mindepth 1 -type d | cut -d/ -f5-)"for file in $file_list; doinstall -D "$TMP/$1/${file}" "/system/${file}".....}

注意 install -D "$TMP/$1/${file}" "/system/${file}"

结论:gms包主要是把文件解压到/system/目录下,在源码中通过一些编译项可以达到类似效果

gapps所有组件中文明细

https://tieba.baidu.com/p/5032829149?fid=12980469&pid=105404260767&red_tag=1621002966#105404260767

全平台安卓源码预置GMS方法 / 全平台安卓源码预置谷歌服务方法相关推荐

  1. java方法生命周期_java – Servlet的生命周期及其方法

    我知道Servlets由init,service和destroy方法组成.我也知道有doPost和doGet方法可用.问题是服务方法如何与doPost和doGet方法相关.在确定请求后,是否在服务方法 ...

  2. 原生安卓苹果APP-java抢单派单系统平台源码

    简介: java源码_派单系统平台源码完整版带项目说明 网盘下载地址: http://kekewl.cc/9qsCp179URb0 图片:

  3. android毕业设计——基于Android+XAMPP+MySQL的家校互动平台设计与实现(毕业论文+程序源码)——家校互动平台

    基于Android+XAMPP+MySQL的家校互动平台设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Android+XAMPP+MySQL的家校互动平台设计与实现,文章末尾附有本毕业设 ...

  4. 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)

    安卓Android与H5双向交互MathJax展示数学公式(源码+解析) 博主就今天周五又做了个需求(安卓Android与H5交互),原来上线的功能是服务器配置过来的学习报告(一个H5页面)并提供原始 ...

  5. [附源码]计算机毕业设计Python+uniapp基于安卓的校园跑腿代购476ww(程序+lw+APP+远程部署)

    [附源码]计算机毕业设计Python+uniapp基于安卓的校园跑腿代购476ww(程序+lw+APP+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置: ...

  6. 源码编译安装部署LAMP平台(使用Apache,MySQL与PHP搭建Discuz论坛实例)

    文章目录 一.LAMP平台与编译安装 (一).LAMP平台概述 (二).构建LAMP平台顺序 (二).编译安装的优点 (三).各组件的主要作用 二.部署步骤 (一).编译安装Apache httpd服 ...

  7. Java开源生鲜电商平台-深刻理解电商的库存架构与解决方案(源码可下载)

    https://www.cnblogs.com/jurendage/p/9227283.html 说明:一般电商的库存都是跟SKU相关联的,那么怎么样才能进行SKU的库存管理呢?有以下几种方式与方法: ...

  8. [附源码]计算机毕业设计Python+uniapp基于安卓的校园二手书籍交易APP1yh1y(程序+lw+APP+远程部署)

    [附源码]计算机毕业设计Python+uniapp基于安卓的校园二手书籍交易APP1yh1y(程序+lw+APP+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环 ...

  9. [附源码]计算机毕业设计Python+uniapp基于安卓的掌上校园系统7m7o8(程序+lw+APP+远程部署)

    [附源码]计算机毕业设计Python+uniapp基于安卓的掌上校园系统7m7o8(程序+lw+APP+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环境配置: ...

最新文章

  1. 在家远程办公,如何才能让员工高效工作?
  2. python处理excel表格实例-使用Python操作excel文件的实例代码
  3. deno学习一 安装试用几个问题解决
  4. eclipse卸载插件小记
  5. 全球及中国智能音箱市场规模产值及发展机遇研究报告2021-2027年
  6. plink源码_plink: 等位型计数(allele count)
  7. 表达式括号匹配(信息学奥赛一本通-T1353)
  8. 前端校验rules写法:
  9. 实战快速恢复Exchange 2010误删除的邮箱
  10. debian网络配置文件的写法
  11. 课程管理系统 java
  12. windows下格式化内存卡
  13. gii无法访问 yii2_YII2框架访问gii、debug页面404的错误解决方法
  14. sql 纵向求和_SQL求和
  15. XDM2020 Java版类似IDM微软下载器的开源下载工具编译
  16. winrar命令行打自解压安装包不生效问题
  17. 抗锯齿插件MadGoat-SSAA使用需要注意的地方
  18. --Redis入坑--RedisPipelineException:Pipeline contained one or more invalid commands;WRONGTYPE ...
  19. [学习笔记]黑马程序员-Hadoop入门视频教程
  20. 忍不住推荐给你的4个导航网站

热门文章

  1. DO-178C系列标准
  2. 软件测试是吃青春饭的吗?30岁后软件测试该何去何从?
  3. 通过向量乘积推导地球两点之间的球面距离
  4. 阿里技术专家:技术中台/移动中台/研发中台,16页PPT一次讲透!
  5. 电信基站大区对应表_三大运营商上半年成绩:移动5G建设开支大,携号转网电信最受益...
  6. 人机对战初体验:Python基于Pygame实现四子棋游戏
  7. python二级考试报名2020浙江_2020年浙江省高校计算机二级Python考试大纲
  8. 光缆在线监测系统研究
  9. 校园一卡通服务器系统,校园一卡通系统服务器数据库安全策略研究与设计
  10. 计算机网络云南大学实验四,云南大学软件学院计算机网络原理实验四.doc