Android 第三方ROM定制之适配谷歌Play Store

本篇博客仅适用于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适配的总结,如果大家还有问题的话,欢迎留言交流,如果有错误的地方也欢迎指出

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
红米K60 Pro是一款搭载了MIUI操作系统的手机,但是作为一款开放性较高的手机,它也支持使用第三方ROM第三方ROM是由非官方的开发者基于手机原生ROM进行二次开发而制作的。相比官方ROM第三方ROM通常具有更多的个性化设置和功能特性。用户可以根据自己的需求和喜好选择安装第三方ROM定制自己的手机使用体验。 对于红米K60 Pro来说,用户可以通过解锁引导程序解锁手机的引导程序,然后安装第三方的刷机软件来刷入第三方ROM。常见的第三方ROM包括Lineage OS、Pixel Experience、Resurrection Remix等,在安装前用户可以选择适合自己的ROM版本进行下载。 使用第三方ROM的好处是可以获得更好的系统稳定性和性能优化,同时也能解锁更多的个性化设置。此外,一些第三方ROM还可以帮助用户实现对系统的深度定制,自由安装和卸载应用程序,以及提供更高级的权限控制和隐私保护功能。 然而,使用第三方ROM也存在一定的风险。首先,刷入第三方ROM需要解锁手机的引导程序,这可能会导致手机保修失效,并且如果操作不当,可能会导致系统崩溃和数据丢失。此外,第三方ROM的更新和维护通常要比官方ROM滞后一些。 总的来说,红米K60 Pro支持使用第三方ROM,用户可以根据自己的需求和风险承受能力来选择是否刷入第三方ROM。但在刷机之前,请务必备份好重要数据,并确保通过可信的渠道下载和验证第三方ROM的完整性和来源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mrsongs的心情杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值