在 AOSP Build 上安装 Google 个应用

Install Google Apps on AOSP Build

我已经在 Nexus 5 设备上安装了 android-6.0.1_r72 AOSP Rom。 ROM 不附带 Google 应用程序.

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

Unfortunately, Google Play services has stopped

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

更新:

我在 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 API 第 23 级(Marshmallow 及更高版本)中引入的概念。在此之前,应用程序所需的所有权限均由用户在安装期间隐式提供,即您同意通过安装应用程序向其授予必要的权限。

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

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

长话短说,尝试找到专为 Marshmallow 及更高版本设计的应用程序版本。不幸的是,Google 以一种在某种程度上限制向后兼容性的方式进行了此更改。所以你逃不掉。查找较新版本

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

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

使用您的 AOSP 内部版本号获取匹配的出厂映像
您为 AOSP Codenames, Tags, and Build Numbers 提供的 link 具有您需要匹配的内部版本号。 在页面中搜索 android-6.0.1_r72 对应的版本号是 M4B30X.

与其使用来自随机站点的不受信任的 APK(一个糟糕的主意),您可以在 Factory Images 的帮助下直接从 Google 的好人那里获得正版 APK。 在页面中搜索您的版本号 M4B30X 并下载 image。 接下来,cd 进入您下载图像的文件夹并 运行 检查 SHA-256 校验和:

$ cd Downloads

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

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

刷入出厂镜像并下载正版 GOOGLE APK
1.刷入Factory Image并启动进入系统。
2.激活开发者选项并允许'USB Debugging'
3.现在用ADB拉(get)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 锤头 M4B30X 并推送正版 GOOGLE APK
确保你刷入 userdebugeng 变体。

将 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 应用程序权限
在您的 phone 上,进入 设置 > 应用程序 在溢出菜单中(右上角的齿轮按钮)
Select 显示系统
向下导航至 Google Play Store 并允许其所有权限。
Google Services FrameworkGoogle Play Services (PrebuiltGmsCore).
执行相同的操作 现在确保所有默认的 AOSP 应用都已授予各自的权限。
AOSP 默认关闭了许多权限。
允许以下应用的所有权限:
Android 键盘
浏览器
日历
相机
时钟
联系人
电子邮件
图库
启动器 3
消息
音乐
Phone

*还有 ever-janky 寻找 Search,如果出于某种原因你不想禁用它。

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

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

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

涵盖了细节。

添加另一种方法来执行第二步。而不是 刷新出厂映像并拉出正版 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