ChatGPT解决这个技术问题 Extra ChatGPT

Android Studio 模拟器不附带 API 23 的 Play 商店

我从最新版本的 Android Studio AVD 中选择了这个模拟器。

https://i.stack.imgur.com/pHbYX.png

我选择了最新版本的 android API 23。因为它说“with Google APIs”,所以我认为它实际上会包含所有 Google 应用程序,包括 Play Store,这样我就可以安装 Facebook 等应用程序。

我在 SO 上看到了其他似乎已经过时的线程(How to install Google Play app in Android Studio emulator?),这个提供了基于通用包安装 Google 应用程序的说明,但它仅适用于 Android 4.3 API 18:http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2

我想要 API 23 的那个。有没有办法在模拟器上安装 Google Apps 包?

奇怪的是,官方的 android 模拟器一开始并没有与所有的谷歌应用程序一起标准......这似乎不太支持谷歌,并且可能意味着开发人员将不得不购买实际设备来开发 API 23 ?

谢谢伊薇特女士。我认为为 android 社区找到这个问题的答案很重要。那里有许多 android 开发者无法访问实际的 android 设备,我想知道当他们无法访问所有工具时,他们将如何为 android 开发。
我没有足够的信誉在上面发表评论。 Re: 只读 /system 分区,请确保在调用 emulator.exe 时传递“-writable-system”参数。例如:START /B emulator.exe @Nexus_7-2012_API_22 -no-boot-anim -writable-system
@pjl - 谢谢你的评论!我已将其添加到我的答案中。
谷歌表示他们正在努力为模拟器添加对 Play 商店的支持。同时,您可以选择一些解决方法。使用 Amazon Appstore 是一种选择,但不是唯一的选择。请参阅here

n
nelson2tm

我最近不得不在 API 23 模拟器上执行此操作,并遵循 this guide。它适用于 API 23 模拟器,所以你应该没有问题。

注意:所有功劳归链接博客文章 (pyoor) 的作者所有。我只是在这里发布它,以防链接因任何原因而中断。

……

下载 GAPPS 包

接下来,我们需要下载与我们的 Android AVD 版本匹配的相应 Google Apps 包。在这种情况下,我们将使用“gapps-lp-20141109-signed.zip”包。您可以从 BasketBuild here 下载该文件。

[pyoor@localhost]$ md5sum gapps-lp-20141109-signed.zip
367ce76d6b7772c92810720b8b0c931e gapps-lp-20141109-signed.zip

为了安装 Google Play,我们需要将以下 4 个 APK 推送到我们的 AVD(位于 ./system/priv-app/):

GmsCore.apk、GoogleServicesFramework.apk、GoogleLoginService.apk、Phonesky.apk

[pyoor@localhost]$ unzip -j gapps-lp-20141109-signed.zip \
system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk \
system/priv-app/GoogleLoginService/GoogleLoginService.apk \
system/priv-app/Phonesky/Phonesky.apk \
system/priv-app/GmsCore/GmsCore.apk -d ./

将 APK 推送到模拟器

提取 APK 后,让我们使用以下命令启动 AVD。

[pyoor@localhost tools]$ ./emulator @<YOUR_DEVICE_NAME> -no-boot-anim

首次创建 AVD 时,这可能需要几分钟时间。启动后,我们需要将 AVDs 系统分区重新挂载为读/写,以便我们可以将包推送到设备上。

[pyoor@localhost]$ cd ~/android-sdk/platform-tools/
[pyoor@localhost platform-tools]$ ./adb remount

接下来,将 APK 推送到我们的 AVD:

[pyoor@localhost platform-tools]$ ./adb push GmsCore.apk /system/priv-app/
[pyoor@localhost platform-tools]$ ./adb push GoogleServicesFramework.apk /system/priv-app/
[pyoor@localhost platform-tools]$ ./adb push GoogleLoginService.apk /system/priv-app/
[pyoor@localhost platform-tools]$ ./adb push Phonesky.apk /system/priv-app

利润!

最后,使用以下命令重新启动模拟器:

[pyoor@localhost platform-tools]$ ./adb shell stop && ./adb shell start

一旦模拟器重新启动,我们应该会看到 Google Play 包出现在菜单启动器中。将 Google 帐户与此 AVD 关联后,我们现在在我们的模拟器下运行了一个完整的 Google Play 版本。


我收到“只读文件系统”错误,并且没有安装这些 apk 文件。
不幸的是,BasketBuild 似乎不再可用。 s.basketbuild.com 表示它至少从 9 月 3 日开始下降,没有 ETA 上升。您是否为 Google 应用推荐了其他来源?
如果出现“只读文件系统”错误,请运行命令:“adb remount”。然后再次尝试“adb push ...”命令。
所有链接都失效了
任何无法获得差距的人:f.lomakuit.com/download/gapps-lp-20141109-signed.zip
C
Community

以下是在 API 23-25 模拟器上对我有用的方法。解释是针对 API 24 提供的,但对其他版本几乎相同。

学分Jon Doezaidorxpjl

给读者的温馨建议:请在遵循这些步骤之前先复习一下,因为有些步骤是通过提供的脚本自动完成的。

在 Android Studio 的 AVD 管理器(在 v2.2.3 上测试)中,使用“Android 7.0 (Google APIs)”目标创建一个新的模拟器:下载适用于模拟器架构 (CPU/ABI) 的最新 Open GApps 包。在我的情况下,它是 x86_64,但它可以是其他东西,具体取决于您在设备创建向导期间选择的图像。有趣的是,架构似乎比正确的 Android 版本更重要(即 6.0 的 gapps 也适用于 7.0 模拟器)。使用以下路径提取 .apk 文件(相对于 open_gapps-x86_64-7.0-pico-201#####.zip):.zip\Core\gmscore-x86_64.tar.lz\gmscore-x86_64\nodpi\ priv-app\PrebuiltGmsCore\ .zip\Core\gsfcore-all.tar.lz\gsfcore-all\nodpi\priv-app\GoogleServicesFramework\ .zip\Core\gsflogin-all.tar.lz\gsflogin-all\nodpi\ priv-app\GoogleLoginService\ .zip\Core\vending-all.tar.lz\vending-all\nodpi\priv-app\Phonesky\ 请注意,Open GApps 使用 Lzip 压缩,可以使用以下工具打开Lzip 网站 1,2,或在 Mac 上使用自制软件:brew install lzip。然后例如 lzip -d gmscore-x86_64.tar.lz。我提供了一个批处理文件,它利用 7z.exe 和 lzip.exe 自动提取所有需要的 .apks(在 Windows 上):@echo off echo。 echo ################################ echo 提取间隙... echo ######### ####################### 7z x -y open_gapps-*.zip -oGAPPS echo 提取 Lzips... lzip -d GAPPS\Core\gmscore- x86_64.tar.lz lzip -d GAPPS\Core\gsfcore-all.tar.lz lzip -d GAPPS\Core\gsflogin-all.tar.lz lzip -d GAPPS\Core\vending-all.tar.lz move GAPPS\核心\*.tar 回声。 echo ################################ echo 提取焦油... echo ######### ######################## 7z e -y -r *.tar *.apk 回显。 echo ################################ echo 清理... echo ######### ####################### rmdir /S /Q GAPPS del *.tar 回显。 echo ################################ echo 全部完成!按任意键关闭。 echo ################################ pause>nul 要使用它,请将脚本保存在文件中(例如 unzip_gapps .bat) 并将所有相关内容放在一个文件夹中,如下所示: 更新 su 二进制文件以便能够修改我们稍后将上传的文件的权限。可以在 SuperSU by Chainfire 包“Recovery flashable”zip 中找到一个新的 su 二进制文件。获取 zip,将其解压到某个位置,在同一文件夹中创建一个包含以下内容的批处理文件,最后运行它: adb root adb remount adb push eu.chainfire.supersu_2.78.apk /system/app/ adb push x64 /su /system/xbin/su adb shell chmod 755 /system/xbin/su adb shell ln -s /system/xbin/su /system/bin/su adb shell "su --daemon &" adb shell rm /system/ app/SdkSetup.apk 将所有 .apk 文件放在一个文件夹中,并使用以下内容创建一个批处理文件3: START /BE:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24 -no-boot-anim -writable -system adb wait-for-device adb root adb shell stop adb remount adb push PrebuiltGmsCore.apk /system/priv-app/PrebuiltGmsCore adb push GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework adb push GoogleLoginService.apk /system/priv -app/GoogleLoginService adb push Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk adb shell su root "chmod 777 /system/priv-app/**" adb shell su root "chmod 777 /system/priv- app/PrebuiltGmsCore/*" adb shell su root "chmod 777 /system/priv-app/GoogleServicesFramework/*" adb shell su root "chmod 777 /system/priv-app/GoogleLoginService/*" adb shell su root "chmod 777 /system/priv-app/Phonesky/ *" adb shell start 注意路径 E:\...\android-sdk\tools\emulator.exe 应该根据你系统上 Android SDK 的位置进行修改。执行上面的批处理文件(之后控制台应该是这样的):O:\123>START /BE:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24 -no-boot-anim -writable-system O:\123>adb wait-for-device Hax 已启用 Hax ram_size 0x60000000 HAX 正在工作并且模拟器以快速 virt 模式运行。模拟器:监听端口上的控制台连接:5554 模拟器:此模拟器的序列号(用于 ADB):emulator-5554 O:\123>adb root O:\123>adb shell stop O:\123>adb remount remount succeeded O :\123>adb push PrebuiltGmsCore.apk /system/priv-app/PrebuiltGmsCore/ [100%] /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk O:\123>adb push GoogleServicesFramework.apk /system/priv-app /GoogleServicesFramework/ [100%] /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk O:\123>adb push GoogleLoginService.apk /system/priv-app/GoogleLoginService/ [100%] /system/priv-app/GoogleLoginService /GoogleLoginService.apk O:\123>adb push Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk [100%] /system/priv-app/Phonesky/Phonesky.apk O:\123>adb shell su root "chmod 777 /system/priv-app/**" O:\123>adb shell su root "chmod 777 /system/priv-app/PrebuiltGmsCore/*" O:\123>adb shell su root "chmod 777 / system/priv-app/GoogleServicesFramework/*" O:\123>adb shell su root "chmod 777 /system/ priv-app/GoogleLoginService/*" O:\123>adb shell su root "chmod 777 /system/priv-app/Phonesky/*" O:\123>adb shell start 当模拟器加载时 - 关闭它,删除虚拟设备,然后使用相同的系统映像创建另一个。这修复了无响应的 Play 商店应用程序、“Google Play 服务已停止”和类似问题。它之所以有效,是因为在前面的步骤中,我们实际上已经修改了系统映像本身(查看在 android-sdk\system-images\android-24\google_apis\x86_64\system.img 上修改的日期)。这意味着从现在开始使用系统映像创建的每个设备都将安装 gapps!启动新的 AVD。如果加载时间过长,请关闭它,然后使用以下命令启动它:START /BE:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24 adb wait-for-device adb shell "su --daemon & " AVD 启动后,您将看到下图 - 请注意角落的 Play 商店图标!

https://i.stack.imgur.com/UE9z1.png

- 我不确定是否需要所有这些命令,也许其中一些命令是矫枉过正的......它似乎工作 - 这才是最重要的。 :)


而不是 .xz 文件,Open Gapps 似乎包含 .lz 文件(如 gsfcore-all.tar.lz)。我尝试了多种工具,但没有一个能够解压缩 .lz 文件,因此我可以获取 APK。有什么建议么?
@Chad Schultz 这是工具 download.savannah.gnu.org/releases/lzip 的链接,如果您在 Windows 上下载“lzip-1.11-w32.zip”并使用以下命令将其转换为 .tar 文件并使用另一个工具最终解压缩它。
@Dev-iL PlayStore 安装在我的模拟器上,但没有打开。我正在使用 Nexus 5 的 x86_64 API 23 系统映像。有什么想法吗?
这在最新的 25/7.1 模拟器上对我有用。唯一奇怪的是我的图像中不存在 /system/app/SdkSetup.apk。非常感谢,正在努力解决这个问题!
您如何准确地“使用相同的系统映像创建另一个”?
P
Prerak Sola

现在无需侧面加载任何执行任何脚本的包即可在模拟器上获取 Play 商店。从 Android Studio 2.4 开始,您现在可以创建一个预装了 Play 商店的 AVD。目前它仅在运行 Android 7.0 (API 24) 系统映像的 AVD 上受支持。

Official Source

https://i.stack.imgur.com/bBXLJ.png

注意:兼容的设备由新的 Play Store 列表示。


注意:您需要安装标有 Target: Android 7.0 (Google Play) 的系统映像,而不仅仅是 Google API。目前它仅适用于 API 24,不适用于 API 25。安装系统映像后,它将出现在推荐选项卡下,而不是 x86 映像选项卡下。
Linux 上的 Android Studio 2.3.3 现在支持 Play Store AVD - 但还值得注意的是,目前 Play Store 似乎只在 x86 目标上可用,所以如果你想获得 Play,你仍然需要使用另一种方法存储在 ARM AVD 上。
除了 24 之外,现在还有适用于 API 25、26 和 27 的图像。
J
Jon Doe

想对最后一个答案发表评论,但没有登录只能做出答案:

要摆脱“只读错误”,只需在设备准备好后立即停止设备。我的脚本如下所示:

#!/bin/bash 
~/bin/AndroidSdk/tools/emulator @Nexus_6P_API_23 -no-boot-anim &
adb wait-for-device
adb shell stop
adb remount
adb push GmsCore.apk /system/priv-app
adb push GoogleServicesFramework.apk /system/priv-app
adb push GoogleLoginService.apk /system/priv-app
adb push Phonesky.apk /system/priv-app
adb shell start

这个帮助我解决了只读文件系统错误。因为我在 Windows 中工作,我只是忽略了脚本的第一行,并用这个“START /B /tools/emulator @Nexus_6P_API_23 -no-boot-anim”替换了第二行,用 .bat 扩展名保存并运行它从命令行。
如果您有 adb shell stop stop: must be root 错误,请将 adb root 放在开头。
应在 adb wait-for-device 行之后立即添加 adb root 行,以防止出现 Read-only file system 错误。
一旦我将 -writable-system 添加到我的模拟器命令中,这就会起作用, ~/android-sdk/tools/emulator @Nexus_5X_API_23 -no-boot-anim -writable-system
S
Sharif Yazdian

以简单的方式解决:您应该创建一个新的模拟器,在第一次打开它之前遵循以下 3 个简单的步骤:

1- 使用记事本等文本编辑器转到“C:\Users[user].android\avd[your virtual device folder]”打开“config.ini”

2-改变

“PlayStore.enabled=false”到“PlayStore.enabled=true”

3-改变

“mage.sysdir.1 = 系统图像\android-30\google_apis\x86”

“image.sysdir.1 = 系统图像\android-30\google_apis_playstore\x86”


R
Richard

这是我在 linux 上为没有 GoogleApis 的 Nexus 5 API 24 x86 实例使用的脚本。

#!/bin/sh

~/Android/Sdk/tools/emulator @A24x86 -no-boot-anim -writable-system & #where A24x86 is the name i gave to my instance
~/Android/Sdk/platform-tools/adb wait-for-device
~/Android/Sdk/platform-tools/adb root
~/Android/Sdk/platform-tools/adb shell stop
~/Android/Sdk/platform-tools/adb remount
~/Android/Sdk/platform-tools/adb push ~/gapps/PrebuiltGmsCore.apk /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
~/Android/Sdk/platform-tools/adb push ~/gapps/GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
~/Android/Sdk/platform-tools/adb push ~/gapps/GoogleLoginService.apk /system/priv-app/GoogleLoginService/GoogleLoginService.apk
~/Android/Sdk/platform-tools/adb push ~/gapps/Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/PrebuiltGmsCore /system/priv-app/GoogleServicesFramework"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/GoogleLoginService /system/priv-app/Phonesky"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/GoogleLoginService/GoogleLoginService.apk"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/Phonesky/Phonesky.apk"
~/Android/Sdk/platform-tools/adb shell start

这个是为我做的。

重要提示:为了阻止应用程序崩溃,请记住授予谷歌播放服务位置权限。

配置->应用->配置(齿轮图标)->应用权限->位置->(右上角菜单)->显示系统->启用Google Play服务


A
Aamnah

您需要做的是更新设备的 config.ini 文件并重新下载系统映像。

更新 .ini 文件中的以下值

Windows:C:\Users\USER\.android\avd\DEVICE_ID\config.ini

Linux:~/.android/avd/DEVICE_ID/config.ini

PlayStore.enabled = true
image.sysdir.1=system-images\android-27\google_apis_playstore\x86\
tag.display=Google Play
tag.id=google_apis_playstore

然后从 Android Studio > Tools > AVD Manager 重新下载设备的系统映像

就这些。重新启动您的设备,您将安装 Play 商店。

这也已在此处得到解答:How to install Google Play app in Android Studio emulator?


当我点击下载时,我收到此错误“所有包都无法下载!,以下包不可用:-包 id system-images; android-23; google_apis_playstore; x86”
S
Saini Arun

转到 http://opengapps.org/ 并下载您平台的 pico 版本和 android 版本。解压下载的文件夹得到
1. GmsCore.apk
2. GoogleServicesFramework.apk
3. GoogleLoginService.apk
4. Phonesky.apk

然后,找到您的 emulator.exe。您可能会在 C:\Users\\AppData\Local\Android\sdk\tools 中找到它

运行命令:模拟器 -avd -netdelay none -netspeed full -no-boot-anim -writable-system

注意:使用 -writable-system 以可写系统映像启动模拟器。

然后, adb root adb remount adb push /system/priv-app adb push /system/priv-app adb push /system/priv-app adb push /system/priv-app

然后,重新启动模拟器 adb shell stop adb shell start

要验证运行, adb shell pm list packages 你会发现 com.google.android.gms google 包


A
AL.

截至目前,将 apk 安装到 /system 目录似乎正在使用 adb push 命令。

某些隐藏服务在 read-only 模式下自动重新安装 /system 目录。

通过简单地从我的操作系统安装 system.img 文件并复制文件,我能够在普通虚拟机(即非 Google-Api 虚拟机)中安装 Play 商店。

# To be executed as root user in your Unix based OS
mkdir sys_temp
mount $SDK_HOME/system-images/android-23/default/x86/system.img sys_temp -o loop
cp Phonesky.apk GmsCore.apk GoogleLoginService.apk GoogleServicesFramework.apk ./sys_temp/priv-app/
umount sys_temp
rmdir sys_temp

可以使用 adb pull 命令从任何运行 Google Apps 的真实 Android 设备中提取 APK 文件

[要获取 apk 的确切路径,我们可以在 adb shell 中使用命令 pm list packages -f ]


我已经安装了 linux 并使用 google apis 将 apks 复制到 6.0 system.img,但是当我创建一个新的模拟器时,它没有 google play 服务或 google play store。我将使用非 google apis rom 再试一次。
c
chenop

只想为只需要 Expo 应用程序的 React Native 用户添加另一个解决方案。

安装 Expo 应用程序 打开你的项目 点击设备 -> 在 Android 上打开 - 在这个阶段,Expo 将安装 expo android 应用程序,您将能够打开它。