在 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
确保你刷入 userdebug 或 eng 变体。
将 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 Framework 和 Google Play Services (PrebuiltGmsCore).
执行相同的操作
现在确保所有默认的 AOSP 应用都已授予各自的权限。
AOSP 默认关闭了许多权限。
允许以下应用的所有权限:
Android 键盘
浏览器
日历
相机
时钟
联系人
电子邮件
图库
启动器 3
消息
音乐
Phone
*还有 ever-janky 寻找 Search,如果出于某种原因你不想禁用它。
现在请确保 Wifi 已连接and/or您的 SIM 卡已插入并提供信号。
重启。
当一切都得到排序时,您应该会遇到一些简短的错误,但如果错误继续存在,则再次重新启动应该会修复它。
这取决于您的 AOSP 中这些应用的用途。
我可能错了,但要为自定义设备安装基于 Google Play 服务的应用程序,需要与 Google 签署协议并通过所有验证测试。
涵盖了细节。
添加另一种方法来执行第二步。而不是 刷新出厂映像并拉出正版 GOOGLE APK,
您可以使用 simg2img 将 system.img 文件转换为可装载卷
- 使用 simg2img 将您的 .img 文件转换为 .raw 文件
simg2img /home/<user>/../aosp/../out/system.img system.raw
- 将原始文件挂载为 ext4 外部文件系统卷
sudo mount -t ext4 -o loop system.raw /system
您将能够在安装后导航您的 system.raw 映像,并且您可以访问 /priv-app 和其他目录以在 /system 的已安装卷中获取所需的 apk。
您可以使用它从 Google.
的出厂映像版本中获取 system.img 的 apk
我已经在 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
确保你刷入 userdebug 或 eng 变体。
将 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 Framework 和 Google Play Services (PrebuiltGmsCore).
执行相同的操作
现在确保所有默认的 AOSP 应用都已授予各自的权限。
AOSP 默认关闭了许多权限。
允许以下应用的所有权限:
Android 键盘
浏览器
日历
相机
时钟
联系人
电子邮件
图库
启动器 3
消息
音乐
Phone
*还有 ever-janky 寻找 Search,如果出于某种原因你不想禁用它。
现在请确保 Wifi 已连接and/or您的 SIM 卡已插入并提供信号。
重启。
当一切都得到排序时,您应该会遇到一些简短的错误,但如果错误继续存在,则再次重新启动应该会修复它。
这取决于您的 AOSP 中这些应用的用途。
我可能错了,但要为自定义设备安装基于 Google Play 服务的应用程序,需要与 Google 签署协议并通过所有验证测试。
添加另一种方法来执行第二步。而不是 刷新出厂映像并拉出正版 GOOGLE APK,
您可以使用 simg2img 将 system.img 文件转换为可装载卷
- 使用 simg2img 将您的 .img 文件转换为 .raw 文件
simg2img /home/<user>/../aosp/../out/system.img system.raw
- 将原始文件挂载为 ext4 外部文件系统卷
sudo mount -t ext4 -o loop system.raw /system
您将能够在安装后导航您的 system.raw 映像,并且您可以访问 /priv-app 和其他目录以在 /system 的已安装卷中获取所需的 apk。
您可以使用它从 Google.
的出厂映像版本中获取 system.img 的 apk