想请问 MIUI 是怎么屏蔽新版 Google 服务框架 在非预装谷歌套件的设备上安装的?

2021-01-17 19:32:05 +08:00
 Immemorial

我的设备没有小米预装的谷歌套件,所以一直是通过 Apkmirror 下载谷歌套件的应用后进行手动安装,这种方式使用的谷歌套件。

但是在 MIUI 升级至基于安卓 11 的系统版本后,匹配安卓 10 的谷歌套件运行在 11 上会出现一些问题。

  1. 一些程序无法正确检测到匹配系统版本的谷歌套件而出现闪退或者提示缺失谷歌。
  2. 在 Google Play 服务 被自动更新至面向安卓 11 的版本后由于不匹配 Google Services Framework 导致的完全无法进入 Play 商店并且会频繁出现 “Google 服务框架屡次停止运行” 的提示。
  3. 在错误安装了 Beta 版本的面向安卓 10 的 Google Play 服务 后,虽然可以正常使用 Play 商店,但也会会频繁出现 “Google 服务框架屡次停止运行” 的提示。

也就是说现在,妥协的方法是安装与 安卓 10 的 Google 服务框架 相匹配的 Google Play 服务 才能够保证谷歌基本功能的可用,如果需要联系人同步,那么联系人同步的程序版本也依旧需要。

但是由于问题 2 中所述的 Google Play 服务 会被自动更新这一情况的存在,且这东西的自动更新它不受商店设置中[自动更新应用]选项修改的影响,所以无法中止它的自动更新,因此……它经常总是会被自动更新至不匹配的版本,而导致问题出现。

所以问题的关键来到了主题的标题所述的 新版 Google 服务框架 的安装方面。

首先,面向安卓 10 的 Google 服务框架 是可以正常安装在最新的基于安卓 11 的 MIUI 中的,但是在将面向安卓 11 的版本进行 [升级安装] 或者 [卸载旧版进行新安装] 的过程中就会遇到安装器提示 “安装失败 - 与已安装应用内容提供者冲突” 这一情况,如下图提示。

使用 LibChecker 查看 Google 服务框架 应用,可以发现其面向安卓 11 新版新增了一个内容提供器:com.android.car.ui.core.CarUiInstaller,而该内容提供器在旧版不存在,也就意味着这东西的冲突不是和安卓 10 的 Google 服务框架起的冲突。

而该内容提供器根据检索,也同样存在于 Settings Suggestings 、工作设置和权限控制器这三个系统程序中。

这个内容提供器是啥?我不知道。它能干什么?我不知道。为什么会冲突?我不知道。

但是 MIUI 的开发人员应该清楚。

所以,从手机的使用者方面来看,就是这三个系统程序之一起的冲突了对吧,但是这不是用户能解决的问题。

在小米社区进行反馈该问题的用户有很多,并且相关问题立项于 2020 年 11 月 23 日,但是至今仍未进入解决阶段,社区解答组的回复永远只有一句 “等待后续更新优化”,从 MIUI12 的内测开发版开始适配安卓 11,到 MIUI12.5 的发布,到安卓 11 进公测开发版,现在基于 Android11 的 MIUI 稳定版的设备都有了。

更新呢?优化呢?

两个月了

更新呢?优化呢?

这期间,我在小米社区的内测圈发了九个帖子反馈这个问题,

安卓 10 的套件 依旧 在安卓 11 的 MIUI 里 妥协 的用着。

Chrome 和 Gboard 依旧 弹出着谷歌服务缺失。

Google 服务框架 依旧 不停的“屡次停止运行”。

得到的回复 依旧 是 “耐心等待后续版本更新优化”。

两个月了,问题立项这么久了,MIUI 的开发组能不知道这个问题?甚至还没有开始解决这个问题?那我只能去猜,这是不是 MIUI 故意占用了和面向安卓 11 的 Google 服务框架 相同的内容提供器以达到屏蔽安装的目的了吧?为了让有需求的用户选购预装谷歌套件的旗舰产品?我感觉可能是,但也可能不是,只有开发组知道。

对了,还有个在 MIUI 换到基于安卓 11 的之后就出现的问题,qq 这东西的简洁模式聊天页面在推出系统深色模式之后依旧是黑色背景,也是反馈到现在没有解决,系统的一些设置界面,比如深色模式相关设置下方的应用列表滑动时帧率跌落严重,也能被不靠谱的圈子管理员关联到 开启深色模式后所有操作掉帧 这种完全不相干的问题下面也是离谱。


全文较长,文字较多,图片较大,标题可能写的有点严重,情绪比较激动,文笔有些不足,内容可能有错,存在部分瞎猜,还请各位见谅。

7936 次点击
所在节点    问与答
72 条回复
mxalbert1996
2021-01-18 16:46:21 +08:00

这是 Pixel 3a 的截图。你不相信的话这里有系统镜像: https://developers.google.com/android/images#sargo,自己解包看看就是了。
mxalbert1996
2021-01-18 17:02:49 +08:00
Immemorial
2021-01-18 17:41:05 +08:00
@mxalbert1996 创建这个内容提供器的 authorities 属性呢?为什么另外两个程序被正确的设置为了包名后跟 CarUiInstaller,而工作设置这个却被设置为了和 Google 服务框架一致的

https://i.loli.net/2021/01/18/pTycV9h5dRfnv27.jpg

https://i.loli.net/2021/01/18/KihHWdVJrbk83t2.jpg
Immemorial
2021-01-18 17:46:00 +08:00
@mxalbert1996 而且你指出的这个库中也应该是设置了个包名后接“.CarUiInstaller”才对啊?

![Snipaste_2021-01-18_17-42-21.jpg]( https://i.loli.net/2021/01/18/vOwiLrkcf35qsNh.jpg)
Immemorial
2021-01-18 17:51:34 +08:00
@mxalbert1996 而且你所举例的 AOSP 库中的 SettingsIntelligence 、ManagedProvisioning 和 PermissionController 这三个应用甚至没有声明创建名为"com.android.car.ui.core.CarUiInstaller"的内容提供器
ourgoder
2021-01-18 17:54:26 +08:00
我升级 MIUI12 后也出现这个问题,很糟心
wtdd
2021-01-18 17:56:20 +08:00
这个问题影响 app 尤其是国产主流不够多,官方更新的动力很小,不如干脆刷第三方立竿见影,
另外,我遇到过类似的情况,是因为安装了正常使用后停用还是卸载,之后再次启用才出现的,
而同样机型没有这样做过,就毫无问题,如果你也这样做过,重置系统可能也是一个解决方案。
Immemorial
2021-01-18 17:57:56 +08:00
@wtdd 重置系统无效,因为产生冲突的时系统内的程序
mxalbert1996
2021-01-18 18:03:36 +08:00
@Immemorial 看你也不是完全不懂 Android 开发,就算不知道搜索一下很难吗?
https://stackoverflow.com/questions/30790768/using-applicationid-in-library-manifest
Immemorial
2021-01-18 18:08:49 +08:00
@mxalbert1996 我没说我懂啊?但是你发的后三个链接中在 AndroidManifest.xml 里确实没有声明这个内容提供器啊?引用了库我不知道是不是一定要声明这个内容提供器。而且我看在这个 stackoverflow 问答里,也是提供的如何正确的使用应用包名替换${applicationId}的方法啊?
villivateur
2021-01-18 18:09:28 +08:00
楼主我跟你一样的问题,持续关注
wtdd
2021-01-18 18:10:18 +08:00
@Immemorial 那再试试重新安装,线刷或卡刷走起
Immemorial
2021-01-18 18:14:06 +08:00
@wtdd 我和你解释下,产生冲突的时面向 Android11 的 Google 服务框架 这一应用,其创建了一个名为“com.android.car.ui.core.CarUiInstaller”的内容提供器,且 authorities 属性被设置为了“com.android.car.ui.CarUiInstaller”

然后在 MIUI 中也同样存在一个工作设置的程序里,创建了一个名为“com.android.car.ui.core.CarUiInstaller”的内容提供器,而且 authorities 属性也是被设置为了“com.android.car.ui.CarUiInstaller”

根据谷歌的开发指南 https://developer.android.com/guide/topics/manifest/provider-element 中描述,创建的同名内容提供器存在 authorities 属性一致时,会出现冲突
mxalbert1996
2021-01-18 18:15:24 +08:00
@Immemorial
不懂就不要乱说啊,还故意占用,小米想要组织你装 GMS 方法太多了,傻子采用这种方法,而且还是国内没人碰的 Android Auto 。
关于 provider 是怎么被引入的,Manifest Merger 了解一下: https://developer.android.com/studio/build/manifest-merge
第二个问题就有点搞笑了,这个问题下面是有回答,可是这跟 Google 用不用有什么关系呢?更何况 AOSP 的构建系统根本就不是 Gradle,本来也用不了。
Immemorial
2021-01-18 18:20:06 +08:00
@mxalbert1996
但是现在存在的问题就是由于 MIUI 配置了一个和面向安卓 11 版本的 Google 服务框架这一程序中新增的内容提供器的命名和 authorities 完全一致的情况。
而 MIUI 中同样存在另外两个创建了该内容提供器,但是 authorities 的配置却符合谷歌提供的规范的程序。
Immemorial
2021-01-18 18:23:03 +08:00
@mxalbert1996 而且就算是合并所包含的库中的清单文件了,那也是 MIUI 在打包过程中没有正确配置这个占位符替换导致的不是吗?
但是有两个程序的引用被正确替换了,而这个 工作设置 没有不是吗?
那不还是 MIUI 的问题吗?
mxalbert1996
2021-01-18 18:25:34 +08:00
@Immemorial
所以我已经说过两遍了 Pixel 和 OxygenOS 也是一样。
只有 ManagedProvisioning 的 authorities 是 com.android.car.ui.CarUiInstaller 大概是因为它用的是 make 而不是 Soong,可能 Soong 会做一些特殊的处理使得 ${applicationId} 能正确地指向应用而不是库。
mxalbert1996
2021-01-18 18:28:53 +08:00
既然你懒不愿意自己解包,我这里给你发一个 Pixel 3a 里提取的 ManagedProvisioning,有兴趣自己反编译看看。
https://mega.nz/file/BYUBlC5Z#wLjBY8vBPfpiU1XOC1EXG_QwxDel_bHBsa2ZocDEQLU
Immemorial
2021-01-18 18:31:04 +08:00
@mxalbert1996 所以说,小米的设备不是每个都有预装谷歌,而且不能刷入方式添加谷歌套件,通过用户手动或者安装器安装的方式安装和系统匹配的谷歌套件就必然会撞上这个问题,我手上也没其他设备去找他们的工作设置,而且这么一通分析下来,我只能十分局限的认为是 MIUI 对这个程序的编译或者打包过程出的问题导致的不是吗?
mxalbert1996
2021-01-18 18:33:47 +08:00
@Immemorial 你知道谣言是怎样传播起来的吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/745703

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX