Android Studio模拟器不附带Play Store for API 23

Sim*_*mon 88 android android-emulator android-studio

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

Google API

我选择了最新版本的Android API 23.因为它说"使用Google API",我认为它实际上会包含所有Google应用程序,包括Play商店,以便我可以安装像Facebook这样的应用程序.

我看到的SO其他线程这似乎现在已经过时(如何安装谷歌Play应用程序在Android Studio中模拟器?),这个人给了安装基于通用包谷歌应用程序的指令,但只到Android 4.3的API 18:http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2

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

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

And*_*ard 53

我最近必须在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
Run Code Online (Sandbox Code Playgroud)

要安装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 ./
Run Code Online (Sandbox Code Playgroud)

将APK推送到模拟器

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

[pyoor@localhost tools]$ ./emulator @<YOUR_DEVICE_NAME> -no-boot-anim
Run Code Online (Sandbox Code Playgroud)

创建AVD时,这可能需要几分钟时间.一旦启动,我们需要将AVD系统分区重新安装为读/写,以便我们可以将我们的包推送到设备上.

[pyoor@localhost]$ cd ~/android-sdk/platform-tools/
[pyoor@localhost platform-tools]$ ./adb remount
Run Code Online (Sandbox Code Playgroud)

接下来,将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
Run Code Online (Sandbox Code Playgroud)

利润!

最后,使用以下命令重新启动emualator:

[pyoor@localhost platform-tools]$ ./adb shell stop && ./adb shell start
Run Code Online (Sandbox Code Playgroud)

模拟器重新启动后,我们应该会在菜单启动器中看到Google Play包.将Google帐户与此AVD相关联后,我们现在可以在我们的模拟器下运行完整版Google Play.

  • 我收到"ReadOnly文件系统"错误,并没有安装这些apk文件. (27认同)
  • 不幸的是,BasketBuild似乎不再可用.https://s.basketbuild.com/表示自至少9/3以来它已经下降,没有ETA可以启动.您是否为Google应用推荐了其他来源? (5认同)
  • 所有链接都已死亡 (4认同)
  • 不适用于android studio 2.0 (2认同)

Dev*_*-iL 48

以下是适用于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的gapps也适用于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\
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,打开GAPPS使用Lzip压缩,其就可以利用Lzip网站上找到的工具打开1,2使用自制软件,或在Mac上:brew install lzip.然后例如lzip -d gmscore-x86_64.tar.lz.

    我正在提供一个批处理文件,该文件利用7z.exe并自动lzip.exe提取所有必需.apk的(在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
    
    Run Code Online (Sandbox Code Playgroud)

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

  4. 更新su二进制文件,以便能够修改我们稍后上传的文件的权限.su可以通过Chainfire软件包"Recovery zipflashable "SuperSU中找到新的二进制文件.获取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
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,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
    
    Run Code Online (Sandbox Code Playgroud)
  7. 当模拟器加载 - 关闭它时,删除虚拟设备,然后使用相同的系统映像创建另一个虚拟设备.这修复了无法响应的Play商店应用,"Google Play服务已停止"以及类似问题.它的工作原理,因为在前面的步骤中,我们实际上已经修改了系统图像本身(看看该修正的日期android-sdk\system-images\android-24\google_apis\x86_64\system.img).这意味着从现在开始使用系统映像创建的每个设备都将安装gapps!

  8. 启动新的AVD.如果加载需要非常长的时间,请将其关闭,然后使用以下命令启动它:

    START /B E:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24
    adb wait-for-device
    adb shell "su --daemon &"
    
    Run Code Online (Sandbox Code Playgroud)

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

安装Play Store后首次启动.


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

  • 这对我来说最新的25/7.1仿真器.唯一奇怪的是`/ system/app/SdkSetup.apk`在我的图片中不存在.非常感谢,为了解决这个问题而疯狂! (3认同)
  • Open Gapps似乎包含.lz文件(如gsfcore-all.tar.lz),而不是.xz文件.我尝试了多种工具,其中没有一种能够解压缩.lz文件,所以我可以获得APK.有什么建议? (2认同)
  • @Chad Schultz这里是该工具的链接http://download.savannah.gnu.org/releases/lzip/如果您在Windows上下载"lzip-1.11-w32.zip"并使用以下命令将其转换为. tar文件并使用另一个工具来最终提取它. (2认同)

Pre*_*ola 39

现在没有必要侧面加载执行任何脚本的任何包来获得模拟器上的Play商店.从Android Studio 2.4开始,您现在可以创建一个预先安装了Play商店的AVD.目前,仅支持运行Android 7.0(API 24)系统映像的AVD.

官方消息来源

AVD与Play商店

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

  • 注意:您需要安装一个名为Target:`Android 7.0(Google Play)`的系统映像,而不仅仅是Google API.目前它仅适用于API 24,而不适用于API 25.安装系统映像后,它将显示在"推荐"选项卡下,而不是x86映像选项卡下. (6认同)
  • Linux 上的 Android Studio 2.3.3 现在支持 Play Store AVD - 但同样值得注意的是,Play Store 目前似乎只在 x86 目标上可用,所以如果你想获得 Play,你仍然需要使用另一种方法存储在 ARM AVD 上。 (2认同)

小智 23

想对最后的答案发表评论,但没有登录,只能回答:

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

#!/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
Run Code Online (Sandbox Code Playgroud)

  • 一旦我将 -writable-system 添加到我的模拟器命令中,就像这样 ~/android-sdk/tools/emulator @Nexus_5X_API_23 -no-boot-anim -writable-system (2认同)

Sha*_*ian 7

以简单的方式解决: 您应该创建一个新的模拟器,在第一次打开它之前,请按照以下 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 = 系统图像\android-30\google_apis_playstore\x86”


归档时间:

查看次数:

95301 次

最近记录:

7 年,7 月 前