本篇博客仅适用于Android第三方ROM定制的开发者单独适配Google框架服务套件。

众所周知,Android系统发展至今一大特色就是碎片化,各厂商也有自己单独定制的ROM,Google为了支持这些厂商的设备,Google的框架服务套件也有很多不同的版本,那么怎么正确的选择自己的定制设备Play Store呢?这就是这篇博客要讲的内容!

一、Google 服务套件包含哪些:
有过平板或者手机定制的经验的同学就应该经常会预制GMS包到源码中,我们看正常的过GMS认证项目的源码里面的gms.mk文件编译了这些APK

# GMS mandatory core packages
PRODUCT_PACKAGES := \
    ConfigUpdater \
    GoogleBackupTransport \
    GoogleExtServices \
    GoogleExtShared \
    GoogleFeedback \
    GoogleLoginService \
    GoogleOneTimeInitializer \
    GooglePackageInstaller \
    GooglePartnerSetup \
    GooglePrintRecommendationService \
    GoogleServicesFramework \
    GoogleCalendarSyncAdapter \
    GoogleContactsSyncAdapter \
    GoogleTTS \
    GmsCore \
    Phonesky \
    SetupWizard \
    talkback \
    WebViewGoogle

其中Google服务的套件就是这四个apk了,如果在其他的海外版方案中(机顶盒,TV)要使用Play Store,但又不需要过GMS认证那么单独预制这几个apk就好了。

GoogleLoginService \ GoogleServicesFramework \ GmsCore \ Phonesky

二、下载的网站

推荐下面的这四个网站,不用翻墙可以直接下载,而且历史版本很全。
https://www.apkmirror.com/
https://apkpure.com/
https://www.androidapksfree.com/
https://www.apkmonk.com/

三、你的项目对应哪个版本的Google套件apk ?

这里面GmsCore.apk在应用市场的名字是GooglePlayService.apk,Phonesky.apk是PlayStore.apk,其实包名是一样的,只不过gms包中的名字有点不同。
在你适配的时候可能会遇到打开Play Store直接弹框报错:
This version of the app isn't compatible with your device.To fix this problem,go to Settings and uninstall updates for the Google Play Store app.
这就是版本和你的方案没有匹配上的原因了。
首先:
GoogleLoginService 是用于账号登录的,这个apk只需要下载一个最新的能支持你系统版本的就可以了,注意需要区分Phone版的和TV版的。
GoogleServicesFramework 是Google的框架服务apk,这个apk 的版本很少,选一个你系统对应的版本就好。
GooglePlayStore 这个是Google商店应用,下载一个最新的能支持你系统版本的就可以了,注意需要区分Phone版的和TV版的。
GooglePlayService 这个是Google的核心服务,也是衍生版本最多的一个apk,需要重点去了解怎么适配。如果适配错了可能就直接报上名那个错了。

我们看下载的网站给了这个说明:
**To figure out the right version of Google Play services for your Android device, download Play Services info or go to Settings -> Apps -> Google Play services, and look at the 3-digit sequence (let’s use XYZ) in the parentheses:
* X defines Android version:
0 for Android <5.0
2 for Android 5.0 and 5.1 starting with Play Services v8
4 for Android 5.0 and 5.1 before Play Services v8, Android >= 6.0 after
5 for Android Wear
7 for Android 5.0
8 for Android TV
9 for Android 8.0+
* Y defines CPU architecture:
1 for armeabi
3 for armeabi-v7a
4 for arm64-v8a
5 for mips
7 for x86
8 for x86_64
* Z defines DPI:
0 for universal nodpi
2 for 160
4 for 240
6 for 320
8 for 480
Notes:
It seems that 7YZ builds became 4YZ with Google Play services v6.5. If you were on 7YZ before, you should now install 4YZ.
It seems that 4YZ builds got split into 2YZ for Lollipop and 4YZ for Marshmallow with Google Play services v8. If you were on 4YZ before, you should now install 2YZ in Lollipop and 4YZ in Marshmallow.
Examples:
014 for Android <5.0 armeabi CPU 240 DPI device
438 for Android 6.0+ armeabi-v7a CPU 480 DPI device
876 for Android TV x86 CPU 320 DPI device
940 for Android 8.0+ arm64 CPU nodpi device**


我们看网站上面的Play Service 的版本号数字的前三位有很多种组合,组合的规则就是上面英文讲的那样。如果你是TV版的设备,直接搜索Google Play Service TV 就好了。根据自己的系统版本,cup架构和dpi确定要下载的版本,比如说是030,代表5.0系统以下,armeabi-v7a架构,通用的dpi,那就在030的大分支版本种找一个最新的就好了。

四、adb调试的小技巧
在debug版本的设备中我们可以直接用adb命令去预制Google套件apk。我们一般将这四个apk预制到priv-app下,这样获得的权限较高。
我们可以使用下面的脚本去执行
mount -o remount,rw /system
cp -f /system/googleapps/*.apk /system/priv-app/
sync
chmod 644 /system/priv-app/*.apk
或者直接挂载上system分区,然后将apk push到priv-app下,注意lib库也要一同拷贝过去,最后使用chmod命令给apk读写权限,这一步很重要。

五、其他的问题

6.0以上系统我们在预制的时候可能需要给apk运行时权限,直接修改PackageManageService,给这个包名的apk全部的运行时权限就好了。

diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 65ae245..dbc9d94 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -8708,7 +8708,12 @@ public class PackageManagerService extends IPackageManager.Stub {
if (DEBUG_INSTALL) {
Log.i(TAG, "Package " + pkg.packageName + " granting " + perm+" grant "+grant);}
+ //sprd modify for com.aponline.sims
+ if (pkg.packageName.equals("com.aponline.sims") && perm.equals("android.permission.READ_PHONE_STATE")) {
+ Log.w(TAG, "Package " + pkg.packageName + " is granting " + perm+":GRANT_INSTALL");
+ grant = GRANT_INSTALL;
+ }
+ //sprd modify for com.aponline.sims
if (grant != GRANT_DENIED) {
if (!isSystemApp(ps) && ps.installPermissionsFixed) {
// If this is an existing, non-system package, then

以上是对Play Store适配的总结,如果大家还有问题的话,欢迎留言交流,如果有错误的地方也欢迎指出

本文转自:Android 第三方ROM定制之适配谷歌Play Store

其他参考:
GMS(Google Mobile Service)预制方法
国行Android手机使用google全套GMS服务小结
高效更新源码中的GMS包

【转载】Android 第三方ROM定制之适配谷歌Play Store相关推荐

  1. Android手机ROM定制初级教程以及Android系统文件夹结构介绍【转】

    Android手机ROM定制初级教程以及Android系统文件夹结构介绍 一个完整的OM根目录会有以下几个文件夹及文件: data META-IN system boot.img  系统目录说明 1. ...

  2. 关于如何定制开发Android第三方ROM,最全开发教程、原理阐述

    一.首先,搞明白ROM的概念. 广义上对于ROM,有两种定义: 1.官方原厂ROM. 就是官方适配的ROM,无修改,原汁原味由品牌厂商自己定制开发的ROM. 2.第三方定制ROM. 意思很明确,就是经 ...

  3. Android 第三方ROM CyanogenMod 源码下载,编译,刷机

    转自: http://blog.csdn.net/androiddevelop/article/details/8661120 一. 背景介绍 当前文章是记录自己HTC G12下载,编译,刷入手机   ...

  4. Android 12.0 rom定制专栏系列解读

    一.前言 在从事android系统rom定制化的这几年里,经历了坎坎坷坷,开发过好几种类型的产品,也随着google对android系统的更新加快,也需要跟随上时代的进步,所以需要把平时工作中遇到的问 ...

  5. Android ROM定制 入门到精通(含改机、移植、破解网络层、root原理、植入hook框架,反安全监测等)

    最近在定制一款ROM,拉取谷歌源码,解包.精简.修改.打包.想要实现MIUI一样的效果和国人常用的功能设置和手势. 在这个过程中遇到了很多疑难问题,也发现公司刚招来的这些小孩基础太差,而且他们根本不知 ...

  6. ROM定制开发入门-第三方ROM发展现状

    第三方ROM的诞生 早期手机厂商研发能力不足,ROM体验差,UI丑陋,涌现出MIUI.乐蛙.百度云.以及国外CyanogenMod一大片第三方ROM,长期占据市场,造就了刷机需求的爆发式增长,各种手机 ...

  7. Android ROM定制

    前言:很多童鞋对美化很感兴趣,都想拥有一个完完全全属于自己风格的手机系统!对那些自定义全局背景,1%电量显示,透明下拉菜单...都很感冒!美化的重点跟难点就在于对"framework-res ...

  8. Android 9.0 rom定制化系列讲解导读

    1.1前言 本专栏主要是作者本人在9.0的系统rom定制化开发中,在 frameworks定制化实战功能系列的解读,把从事几年的frameworks定制化功能的经验的积累总结一下, 开发过平板,广告机 ...

  9. 小米max2 原生 android,小米Max 2用户类原生系统福利:第三方开发者为其适配LineageOS...

    感谢IT之家网友 王浩哲 的线索投递 IT之家7月14日消息 如果你是小米Max 2的用户,又是类原生系统的爱好者,那这对你来说可能是个好消息,近日,来自MIUI论坛的 @王浩哲M3 为小米Max 2 ...

  10. note3 android system recovery,三星note3 N900v刷第三方rom

    一台老手机,废物利用,如下为刷第三方rom过程 原系统为android4.4.2 ,Verizon美版,支持移动2G,联通3G,电信3G,高通骁龙800处理器,2.3GHZ主频, 3GB RAM,32 ...

最新文章

  1. hive(让我凌乱的一天)
  2. 蔚来一面:用Object做hashMap的Key时需要做什么?
  3. python有什么作用-大数据学习之python语言有什么作用?
  4. 分享20个非常有用的Web开发工具和框架
  5. 【错误记录】Android 应用打包错误 ( Entry name ‘assets/xxx.xml‘ collided )
  6. linux计算脚本执行时间,linux – 计算shell脚本每一步的时间并显示总执行时间
  7. vim E492: Not an editor command: ^M
  8. ico图标下载 ico大全_我们可以做些什么来向ICO投资者保证我们不会用他们的钱消失...
  9. python使用rabbitmq阻塞_python – Celery/RabbitMQ unacked消息阻塞队列?
  10. Datawhale 202210 Excel | 第五、六、七章 Excel函数示例 Excel函数列表
  11. SQL service 建数据库、表和备份还原数据库
  12. 一言不合就被“游戏毁掉”?!管管孩子,救救游戏吧!
  13. PHP极其强大的图片处理库Grafika详细教程(1):图像基本处理
  14. 【Java开发】中国的公历转农历-工具类
  15. webpack Uncaught ReferenceError: Swiper is not defined
  16. pytorch学习笔记-num_workers的设置
  17. 如何将录音转成文字?
  18. Nginx配置项优化详解
  19. 数据库表数据如何去重
  20. linux 下 .o 文件, .a文件,.so文件的区别

热门文章

  1. win10企业版2016长期服务版本---低配置电脑最适合的win10版本
  2. pc端下载微信视频号中的视频
  3. centos6 php网页,centos怎样建网站
  4. phpst安装memcache扩展_超简单的wordpress网站安装教程(基于phpstudy PHP环境)
  5. 100%代码覆盖率的悲剧
  6. DTCMS 栏目调用方法
  7. 纺织服装产业实现智能制造升级
  8. 利用 Maxima 求解常微分方程
  9. “梦中行千里不如现实行一步。”创业亦是如此丨国仁网络资讯
  10. Excel VBA入门(6) - Worksheet对象常用方法事件