Play Studio不随附适用于API 23的Android Studio模拟器


92

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

Google API

我选择了最新版本的android API23。因为它说的是“ with Google APIs”,所以我认为它实际上将包括所有Google应用,包括Play商店,以便我可以安装Facebook之类的应用。

我已经看过SO上似乎已经过时的其他线程(如何在Android Studio模拟器中安装Google Play应用程序?),该线程提供了基于通用软件包安装Google应用程序的说明,但仅适用于Android 4.3 API 18:http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2

我想要一个API23。是否可以在模拟器上安装Google Apps软件包?

奇怪的是,官方的android模拟器并不是所有google应用程序的标准配置,这似乎并不十分支持google,这可能意味着开发人员必须购买实际的设备才能开发API 23。 ?


谢谢伊维特女士。我认为,对于android社区来说,回答这个问题很重要。有很多android开发人员无法访问实际的android设备,我想知道当他们没有获得所有工具的访问权限时,他们将如何为android开发。
西蒙(Simon)

1
我没有足够的信誉在上面发表评论。关于:只读/ system分区,请确保在调用emulator.exe时传递“ -writable-system”参数。例如:START / B emulator.exe @ Nexus_7-2012_API_22 -no-boot-anim -writable-system
pjl

@pjl-感谢您的评论!我已将其添加到我的答案中。
Dev-iL

谷歌表示,他们正在努力为模拟器添加Play商店支持。同时,有几种解决方法可供选择。使用Amazon Appstore是一个选择,但不是唯一的选择。看这里
unforgettableidSupportsMonica

Answers:


56

最近,我不得不在API 23仿真器上执行此操作,并遵循了本指南。它适用于API 23仿真器,因此您应该没有问题。

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

....

下载GAPPS软件包

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

[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版本。


29
我收到“只读文件系统”错误,并且未安装所有这些apk文件。
wmac

6
不幸的是,BasketBuild似乎不再可用。s.basketbuild.com表示,自至少9/3以来它一直处于关闭状态,而没有预计到达时间。您是否推荐其他来源的Google应用程序?
乍得·舒尔茨

1
如果出现“只读文件系统”错误,请运行命令:“ adb remount”。然后再次尝试“ adb push ...”命令。
尚武

4
所有链接都死了
Mooing Duck


51

以下是在API 23-25模拟器上为我工作的方法。为API 24提供了说明,但对于其他版本几乎相同。

学分乔恩·多伊Jon Doe)扎伊道克斯zaidorx)pjl

给读者的温馨建议:请按照步骤进行操作,因为某些步骤是通过提供的脚本自动执行的。


  1. 在Android Studio的AVD管理器(已在v2.2.3上进行测试)中,使用“ Android 7.0(Google API)”目标创建一个新的模拟器: 创建模拟器后的AVD屏幕。

  2. 下载适用于仿真器体系结构(CPU / ABI)的最新Open GApps软件包。就我而言,它是x86_64,但也可以是其他东西,具体取决于您在设备创建向导中选择的图像。有趣的是,该体系结构似乎比正确的Android版本更为重要(即6.0的缺口也可以在7.0仿真器上运行)。

  3. .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\

    请注意,打开GAPPS使用Lzip压缩,可以使用打开任一工具Lzip网站上找到12,或在Mac上使用自制:brew install lzip。然后例如lzip -d gmscore-x86_64.tar.lz

    我提供了一个批处理文件,该文件利用7z.exe并自动lzip.exe提取了所有必需的.apks(在Windows上):

    @echo off
    echo.
    echo #################################
    echo Extracting Gapps...
    echo #################################
    7z x -y open_gapps-*.zip -oGAPPS
    
    echo Extracting 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\Core\*.tar
    
    echo. 
    echo #################################
    echo Extracting tars...
    echo #################################
    
    7z e -y -r *.tar *.apk
    
    echo.
    echo #################################
    echo Cleaning up...
    echo #################################
    rmdir /S /Q GAPPS
    del *.tar
    
    echo.
    echo #################################
    echo All done! Press any key to close.
    echo #################################
    pause>nul

    要使用此功能,请将脚本保存在一个文件(例如unzip_gapps.bat)中,并将所有相关内容放在一个文件夹中,如下所示: 它应该是什么样的...

  4. 更新su二进制文件,以便能够修改我们稍后上传的文件的权限。suSuperSU by Chainfire软件包“ Recovery zipflashable ”中可以找到一个新的二进制文件。获取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
  5. 将所有.apk文件放在一个文件夹中,并创建一个包含以下内容的批处理文件3

    START /B E:\...\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的位置修改路径

  6. 执行上述批处理文件(控制台随后将如下所示):

    O:\123>START /B E:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24 -no-boot-anim -writable-system
    
    O:\123>adb wait-for-device
    Hax is enabled
    Hax ram_size 0x60000000
    HAX is working and emulator runs in fast virt mode.
    emulator: Listening for console connections on port: 5554
    emulator: Serial number of this emulator (for 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
  7. 当仿真器加载时- 关闭它,删除虚拟设备,然后使用相同的系统映像创建另一个虚拟设备。这可以修复无响应的Play商店应用,“ Google Play服务已停止”和类似问题。它的工作原理,因为在前面的步骤中,我们实际上已经修改了系统图像本身(看看该修正的日期android-sdk\system-images\android-24\google_apis\x86_64\system.img)。这意味着从现在开始使用系统映像创建的每个设备都将安装漏洞!

  8. 启动新的AVD。如果加载时间过长,请关闭它,然后使用以下命令启动它:

    START /B E:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24
    adb wait-for-device
    adb shell "su --daemon &"

    AVD启动后,您将看到下面的图像-注意角落的Play商店图标!

首次启动并安装了Play商店。


3-我不确定是否需要所有这些命令,也许其中一些命令过大了……它似乎起作用了-这才是关键。:)


2
Open Gapps似乎包含.lz文件(例如gsfcore-all.tar.lz),而不是.xz文件。我尝试了多种工具,但都无法解压缩.lz文件,因此可以使用APK。有什么建议?
查德·舒尔茨

2
@Chad Schultz,这是工具download.savannah.gnu.org/releases/lzip的链接(如果您在Windows上则下载“ lzip-1.11-w32.zip”),并使用以下命令将其转换为.tar文件并使用另一个最终将其提取的工具。
f4b

1
@ Dev-iL PlayStore已安装在我的模拟器上,但没有打开。我正在使用Nexus 5的x86_64 API 23系统映像。有什么想法?
ARK

3
这对我来说是最新的25 / 7.1仿真器。唯一奇怪的是/system/app/SdkSetup.apk我的图像中不存在。非常感谢,为解决这个问题而疯狂!
wilsonpage '16

1
您如何精确地“使用同一系统映像创建另一个”?
gavsiu

42

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

官方资料

带Play商店的AVD

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


6
注意:您需要安装一个显示Target:的系统映像Android 7.0 (Google Play),而不仅仅是Google API。当前,它仅适用于API 24,而不适用于API25。安装系统映像后,它将显示在“推荐”选项卡下,而不是“ x86映像”选项卡下。
antoine

2
Linux上的Android Studio 2.3.3现在支持Play商店AVD-但值得注意的是,Play商店目前似乎仅在x86目标上可用,因此如果要获得Play,您仍然需要使用另一种方法存放在ARM AVD上。
NullColaShip

另外,现在还对API的25,26和27,除了图像24
arekolek

25

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

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

#!/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

1
这可以帮助我解决只读文件系统错误。由于我是在Windows中工作的,因此我只是忽略了脚本的第一行,而将第二行替换为此“ START / B / tools / emulator @ Nexus_6P_API_23 -no-boot-anim”,将其保存为.bat扩展名并运行它从命令行。
zaidorx

1
太棒了,我只删除了前两行,就自己启动了模拟器,然后运行了BAT文件...就像一个魅力一样工作
Im Rick James

如果您有adb shell stop stop,则将adb root放在开始处:必须是root错误。
nutella_eater

adb root行后应立即添加adb wait-for-device行以防止Read-only file system错误。
efkan

1
一旦将-writable-system像这样添加到我的仿真器命令中,〜/ android-sdk / tools / emulator @ Nexus_5X_API_23 -no-boot-anim -writable-system
reassembler

2

这是我在Linux上用于实例Nexus 5 API 24 x86(没有 GoogleApis)的脚本。

#!/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服务位置权限。

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


2

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

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

运行命令:
模拟器-avd <YOUR_EMULATOR'S_NAME> -netdelay none -n​​etspeed full -no-boot-anim -writable-system

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

然后,
adb root
adb重新安装
adb push <PATH_TO GmsCore.apk> / system / priv-app
adb push <PATH_TO GoogleServicesFramework.apk> / system / priv-app
adb push <PATH_TO GoogleLoginService.apk> / system / priv-app
adb push <PATH_TO Phonesky.apk> / system / priv-app

然后,重新启动模拟器
adb shell停止
adb shell启动

要验证运行,请使用
adb shell pm列出程序包,然后您将找到google的com.google.android.gms程序包


2

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

C:\Users\USER\.android\avd\DEVICE_ID\config.ini(Windows上)或~/.android/avd/DEVICE_ID/config.ini(Linux上)更新以下值

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>工具> AVD管理器重新下载设备的系统映像

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

在此也得到了解答:如何在Android Studio模拟器中安装Google Play应用?


2

轻松解决: 您应该先创建一个新的仿真器,然后才能打开它,请遵循以下3个简单步骤:

1-转到“ C:\ Users [用户] .android \ avd [您的虚拟设备文件夹] ”,使用文本编辑器(如记事本)打开“ config.ini”

2-变化

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

3-改变

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

“ image.sysdir.1 = system-images \ android-30 \ google_apis_playstore \ x86”


1

到目前为止,/system使用adb push命令似乎可以将apks安装到目录中。

某些隐藏的服务会自动/systemread-only模式重新挂载目录。

只需system.img通过我的操作系统挂载文件并复制文件,便可以通过任何方式将Play商店安装在普通虚拟机(即非Google-Api虚拟机)中。

# 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的确切路径,我们可以pm list packages -f在adb shell中使用命令 ]


我不相信有一些“神秘的”服务正在运行。.相反,模拟器(或系统映像)中的一个错误似乎已得到修复,该错误允许目录中apk存在s的多个副本/system。我注意到将每个apks 推送到正确的文件夹不会导致写入错误。我已经更新了我的答案-您现在可以尝试使用它吗?
Dev-iL

我面临着同样的问题,在推送apks时无法通过只读文件系统,我认为唯一的方法是编辑模拟器android系统图像,然后如何从Windows 8编辑android图像,谢谢。我需要在Android 6.0模拟器上安装最新的Google Play服务和Google Play游戏。
noname.cs

2
我已经安装了Linux,并使用Google api将apks复制到6.0 system.img,但是当我创建一个新的模拟器时,它没有Google Play服务或Google Play商店。我将再次尝试使用非Google API ROM。
noname.cs

0

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

  1. 安装Expo应用
  2. 打开你的项目
  3. 点击设备->在Android上打开-在这个阶段,Expo将安装expo android应用,您将可以打开它。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.