【问题标题】:Install Google Apps on AOSP Build在 AOSP Build 上安装 Google Apps
【发布时间】:2017-01-17 11:09:31
【问题描述】:

我在 Nexus 5 设备上安装了android-6.0.1_r72 AOSP Rom。 Google Apps 不附带该 rom。

我尝试从following site 安装,但安装后我得到了

很遗憾,Google Play 服务已停止

是否有我必须安装的特殊版本的 Google 应用

更新:

我在 logcat 中发现了这个错误:

01-17 11:14:52.750  3525  5402 E AndroidRuntime: FATAL EXCEPTION: GoogleLocationService

01-17 11:14:52.750  3525  5402 E AndroidRuntime: Process: com.google.android.gms.persistent, PID: 3525

01-17 11:14:52.750  3525  5402 E AndroidRuntime: java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at android.os.Parcel.readException(Parcel.java:1620)

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at android.os.Parcel.readException(Parcel.java:1573)

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at android.location.ILocationManager$Stub$Proxy.addGpsStatusListener(ILocationManager.java:741)

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at android.location.LocationManager.addGpsStatusListener(LocationManager.java:1522)

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at aker.a(:com.google.android.gms:1064)

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at akbc.b(:com.google.android.gms:6342)

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at akbc.handleMessage(:com.google.android.gms:279)

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102)

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at android.os.Looper.loop(Looper.java:148)

01-17 11:14:52.750  3525  5402 E AndroidRuntime:  at android.os.HandlerThread.run(HandlerThread.java:61)

更新 #2

我仍然收到错误,所以我在GApps git 中打开了一个问题。

【问题讨论】:

标签: android android-source


【解决方案1】:

你做错了三件事:
1.您通常需要安装从您要运行的相同版本的Android中提取的APK。
2. 永远不要从非 Google 网站下载 Google APK。
3.要安装系统应用程序,您需要先将系统分区重新挂载为可读写。

以下是获取并安装正版 Google APK 作为系统应用程序的方法:

使用您的 AOSP 版本号获取匹配的工厂图片
您为AOSP Codenames, Tags, and Build Numbers 提供的链接具有您需要匹配的内部版本号。 在页面中搜索android-6.0.1_r72,对应的版本号为M4B30X

您可以直接从 Google 的好心人Factory Images 的帮助下,直接从随机站点获取不受信任的 APK,而不是使用不受信任的 APK。 在页面中搜索您的内部版本号 M4B30X 并下载 image。 接下来,cd 到您下载图像的文件夹并检查 SHA-256 校验和:

$ cd Downloads

$ echo "10cfaa5c8ff1753af20283f5e5f938ddebbad094c4e22aadbd925ecdc806e8b3   
  hammerhead-m4b30x-factory-10cfaa5c.zip" | sha256sum -c

它应该打印:hammerhead-m4b30x-factory-10cfaa5c.zip:OK
- 如果没有,请重新下载图像。

FLASH FACTORY 镜像并拉取正版 GOOGLE APK
1.刷入出厂镜像,开机进入系统。
2. 激活开发者选项并允许“USB 调试”
3. 现在使用 ADB 拉取(获取)100% 正版 Google Play APK:

$ adb pull /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
$ adb pull /system/priv-app/Phonesky/Phonesky.apk
$ adb pull /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk

刷入 AOSP HAMMERHEAD M4B30X 并推送正版 GOOGLE APK
确保刷写 userdebugeng​​strong> 变体。

将 APK 文件推送到您的 SD 卡:

$ adb push GoogleServicesFramework.apk /sdcard/
$ adb push Phonesky.apk /sdcard/
$ adb push PrebuiltGmsCore.apk /sdcard/

手动将 APK 安装为系统应用程序

$ sudo adb shell

定位系统分区: root@hammerhead:/ # 挂载 | grep“/系统” 你应该回来: /dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0

现在将该系统分区挂载为 rw(read-write)

root@hammerhead:/ # mount -o remount,rw -t ext4 /dev/block/platform/msm_sdcc.1/by-name/system /system 

root@hammerhead:/ # cd /system/priv-app   
root@hammerhead:/ # mkdir GoogleServicesFramework
root@hammerhead:/ # mkdir Phonesky
root@hammerhead:/ # mkdir PrebuiltGmsCore

root@hammerhead:/ # cp /sdcard/GoogleServicesFramework.apk GoogleServicesFramework/GoogleServicesFramework.apk
root@hammerhead:/ # cp /sdcard/Phonesky.apk Phonesky/Phonesky.apk
root@hammerhead:/ # cp /sdcard/PrebuiltGmsCore.apk PrebuiltGmsCore/PrebuiltGmsCore.apk

root@hammerhead:/ # chmod 755 GoogleServicesFramework
root@hammerhead:/ # chmod 755 Phonesky
root@hammerhead:/ # chmod 755 PrebuiltGmsCore

root@hammerhead:/ # chmod 644 GoogleServicesFramework/GoogleServicesFramework.apk
root@hammerhead:/ # chmod 644 Phonesky/Phonesky.apk
root@hammerhead:/ # chmod 644 PrebuiltGmsCore/PrebuiltGmsCore.apk

配置 AOSP

授予 Google Apps 权限
在您的手机上,进入设置>应用程序 在溢出菜单中(齿轮按钮右上角)
选择显示系统
向下导航到 Google Play 商店 并为其授予所有权限。
Google Services FrameworkGoogle Play Services (PrebuiltGmsCore) 执行相同的操作。
现在确保所有默认的 AOSP 应用都获得了各自的权限。
默认情况下,AOSP 关闭了许多权限。
允许以下应用的所有权限:
Android 键盘
浏览器
日历
相机
时钟
联系方式
电子邮件
画廊
启动器3
消息
音乐
电话

*如果出于某种原因您不想禁用它,那么看起来总是很乱的搜索

现在确保 Wifi 已连接和/或您的 SIM 卡已插入并提供信号。
重新启动。
当所有内容都已排序时,您应该会遇到一些简短的错误,但如果错误继续存在,则应再次重新启动以修复它。

【讨论】:

  • 感谢您的详细回答。如果解决了问题,我会尝试并将其标记为解决方案!
  • 手动安装 Google Play StoreGoogle Services Framework 的 APK 后,我必须重启手机才能显示在 Settings->应用。虽然,我仍然看不到 PrebuiltGmsCore 那里.. 另外,请修复 FLASH FACTORY IMAGE 中的 priv-app 位置并拉取正版 GOOGLE APK/data//system/
  • 谢谢,我修好了。在 Settings>Apps PrebuiltGmsCore 内部显示为 Google Play Services。
  • 有人用 Android10 做过这个吗?那里没有任何 PrebuiltGmsCore...
  • @Paschalis 应该被称为 GmsCore.apk 您是否管理过从 Android 10 工厂映像中进行 adb pull?它不允许我这样做,因为它是生产版本
【解决方案2】:

andDevW's answer 涵盖了细节。

添加另一种方法来执行第二步。而不是闪烁工厂图像并拉取正版 GOOGLE APK

您可以使用simg2img将system.img文件转换为可挂载卷

  1. 使用 simg2img 将您的 .img 文件转换为 .raw 文件
simg2img /home/<user>/../aosp/../out/system.img system.raw
  1. 将原始文件挂载为 ext4 外部文件系统卷
sudo mount -t ext4 -o loop system.raw /system

您将能够在安装后导航您的 system.raw 映像,并且您可以访问 /priv-app 和其他目录以在 /system 的已安装卷中获取所需的 apk。

您可以使用它在来自 Google 的工厂映像版本中从 system.img 获取 apk。

【讨论】:

  • 这太棒了! Simg2img 在 Debian 的 repo 中,这样做比刷机更容易。
  • 在我运行 10.0 版的 Pixel 4 XL 上,大部分文件都在 product.img 中。除此之外,是的;完全没有必要刷到设备上。
【解决方案3】:

这取决于这些应用在您的 AOSP 中的用途。

我可能错了,但要为自定义设备安装基于 Google Play 服务的应用程序,需要与 Google 签署协议并通过所有验证测试。

【讨论】:

  • 如果他打算销售预装了 Google Play 服务的设备,这是正确的。不确定他们是否禁止个人在个人设备上安装 Google Play 服务以供个人测试使用。
【解决方案4】:

您遇到的错误与运行时权限有关,这是 Android API 级别 23(Marshmallow 及更高版本)中引入的一个概念。在此之前,用户在安装过程中隐式提供应用程序所需的所有权限,即您同意通过安装应用程序来授予应用程序必要的权限。

Google 对此进行了大修。从 API 级别 23 开始,不仅应用程序必须在清单中声明它需要的所有权限,而且如果这些权限中的任何一个被归类为危险,那么应用程序必须在运行时请求它。应用程序如何做到这一点 - https://developer.android.com/training/permissions/requesting.html

我解释所有这些只是为了给你一个背景。在您的情况下,问题在于您尝试安装的应用程序并非设计为在 API 级别 23 或更高级别上运行。当您安装它们时,它们并没有被隐式授予某些权限,并且由于应用程序在运行时没有请求它们,因此最终它们最终没有必要的权限来执行某些操作(在您的情况下访问设备位置)。

长话短说,尝试找到专为 Marshmallow 及更高版本设计的应用程序版本。不幸的是,谷歌在某种程度上限制了向后兼容性。所以你无法逃脱。查找更新版本

【讨论】:

  • 感谢您的回复。我尝试安装Android 6.0 Gapps,它应该与Android 6.0.1 兼容..
  • 请告知它是否有效。并将其标记为已回答以供将来参考
  • 对不起,我被误解了。我的意思是,在我最初的帖子和查询中,Gapps 与我的 AOSP 版本的版本相同。因此,它应该与我的 ROM 兼容,但它仍然因我发布的错误而失败。意思是,这不是 API 级别的问题。
  • 是的。我确定。 Here 是链接。
  • 是的,理论上这个方法应该也可以工作,尽管我从未尝试过。但是从用户的角度来看,您是否希望用户进入设置页面并提供权限?这就是为什么要求应用程序在运行时检查权限并在尚未授予权限时向用户询问相同的原因。无论如何,在他的情况下,问题是其他问题,因为他正在使用自定义 ROM(我的答案未标记为已接受)。但是我们遇到了同样的问题,我的建议也是基于同样的问题。
猜你喜欢
  • 2014-06-21
  • 2014-07-15
  • 1970-01-01
  • 2019-01-04
  • 2022-01-03
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多